Scripting Lesi TP1 27 de Outubro de 2005 Questão 1 (Ficheiros duplicados) Temos pouco espaço em disco. Queremos ver a lista dos cheiros duplicados existentes num conjunto de directorias (cuidado podem ser muitos!). Sugestão: "locate directoria"ou "nd directoria-- dá todos os cheiros nela contidos; O comando "md5sum cheiro"dá o check sum do cheiro. Exemplo de saída: 1 acb567f9b502c9a0a94a205735de8fd5 ficheiro Questão 2 () Rcentetnmee dobesciru-se que um txteo não pedre mtiuo a sua lgeilibadide se tcaorroms a odrem das lraets de cdaa plaarva maednnto no etnnato a peirimra e a úlmtia ltera. Faça um programa perl elegante que dado um texto normal o troque. Questão 3 () Ordenar um cheiro por ordem do comprimento de linha Questão 4 () Avisar de linhas repetidas num cheiro Questão 5 () Escreva da forma mais simples que conseguir: a). uma função perl que elimine os repetidos de uma lista. b). uma função mul: mul(3, "a","b") = ("a","a","a","b","b","b") c). Construa a função bisplit que construa um array associativo a partir de uma string, de acordo com o seguinte exemplo: bisplit(/[;,]/,/=/,"a=b,c=d,e=f") = {a=>b,c=>d,e=>f} Questão 6 () Escreva da forma mais simples que conseguir: a). um função bijoin que construa uma string a partir de duas strings e de um array associativo; de uma string, de acordo com o seguinte exemplo: %a = (a=>"b",z=>"d",e=>"f"); bijoin("-->",",\n", %a) daria a-->b, e-->f, z-->d Note que as chaves estão ordenadas. Questão 7 () Marcar os nomes próprios de um texto e escrever no nal um índice remissivo à linha. Questão 8 () Fazer um acentuador de texto: a). a partir de um grande texto correcto, inferir uma tabela de acentuação b). usando essa tabela acentuar texto desacentuado. Questão 9 () 6. Alterar aleatoriamente a ordem das linhas de um cheiro. Questão 10 () 1 a). Alterar aleatóriamente a ordem das linhas de um cheiro. b). Dado um cheiro com um email:nome por linha, mande via mail "Estimado nome, estás convidado a vir à JOIN2006..."a todos. Questão 11 () Dados dois textos (duas strings), construa uma função de similariedade que calcule uma semelhança entre elas. Para isso, calcule a lista de palavras de cada string, e devolva a percentagem de palavras que aparecem em ambas (palavras comuns / número de palavras do texto maior). ex: sim("era uma vez","uma vez eu comi") = 2/4 = 0.5 sim("o rato e o gato", "o gato e o pato") = 4/5 = 0.8 Questão 12 () Um dos modos de gerar texto aleatório é usar um modelo preditivo como o que se apresenta a seguir: • com base em grandes quantidades de texto, construir uma tabela preditiva que, a partir das duas últimas palavras, indique quais as palavras que apareceram a seguir e qual a sua probabilidade. • para gerar frases, escolher aleatoriamente a palavra seguinte com base nas anteriores e na tabela preditiva. Construa um gerador de texto aleatório. Questão 13 (gettext, i18n, .po) Para fazer a internacionalização (i16o) de cheiros C, pretende-se: a). substituir todas as strings pela invocação da função "_"aplicada a essa string. Exemplo 1 2 printf("Viva o %s","NQPQNEAFCTB") ... é transformada em printf(_("Viva o %s"),_("NQPQNEAFCTB")) Tendo o cuidado de não acrescentar a função "_"se ela já lá existir. b). E ao mesmo tempo criar um catálogo ".po"para tradução, com seguinte formato: 1 2 3 4 5 6 #: lib/kernel.c:116 msgid "Viva o %s" msgstr "" #: lib/kernel.c:116 msgid "NQPQNEAFCTB" msgstr "" Construa um programa perl que dada uma lista de cheiros (via linha de comando) que crie cheiros correspondentes com extensão ".c_"e crie um catálogo "catalog.po". Questão 14 () Dado um conjunto de músicas em MP3, em que cada nome de cheiro é composto por um nome do autor, um hífen e o nome da música, criar uma directoria por autor, e mover o cheiro da música para essa directoria, removendo-lhe o nome do autor. Os acentos e espaços deverão ser retirados e os espaços substituídos. Por exemplo os seguintes cheiros: 1 2 3 Sergio Godinho - Antes o poço da morte.mp3 Sérgio Godinho - Bate coração.mp3 Trovante - Os Lusíadas.mp3 seriam arrumados como: 1 2 3 Sergio_Godinho/Antes_o_poco_da_morte.mp3 Sergio_Godinho/Bate_coracao.mp3 Trovante/Os_Lusiadas.mp3 Questão 15 () Escreva da forma mais simples e elegante que conseguir: a). uma função orio que recebe como parâmetros: uma função binária, um elemento neutro • uma lista de elementos e retorna a aplicação iterada da função aos elementos. P Exemplo: orio(sub{$_[0] + $_[1]}, 0 , [ 1..7 ]) deveria dar 7i=1 i 2 • • b). Escreva uma invocação dessa função para calcular o máximo de um lista de inteiros positivos incluídos num cheiro "A"(um por linha) Questão 16 (Semi-corrector ortográco para XML) Construa um programa que dado um cheiro XML e uma descrição de língua dos seus elementos, faça a sua correcção ortográca (marque apenas as palavras desconhecidas, prexando-as com '#'). Questão 17 (Reconhecedor de voz muito académico) Imagine que um sistema de reconhecimento de voz tem apenas uma função split que corta o cheiro de som em cheiros de som com uma única palavras e uma outra capaz de dada um cheiro de som e uma palavra vericar se pode condizer. Um som pode condizer com mais que uma palavra. Para melhorar esse sistema, pretende-se construir uma tabela que baseado em textos, associe cada par de palavras a uma lista das palavras que mais provavelmente se poderão seguir. a). Descreva a estrutura que vai usar para guardar a tabela. b). Escreve a função constroi que, dado um texto com exemplos de comandos (cada comando tem várias palavras e tem uma única linha) devolva a tabela. c). Escreva uma função reconhece que dada um cheiro de som e uma tabela, reconheça o comando correspondente. Questão 18 () Pretende-se construir um dicionário de rimas(DR) a partir de um conjunto (grande) de poemas (CP). O DR vai associar uma palavra a um conjunto de palavras que com ela rimem e que tenha aparecido a rimar em pelo menos um caso do CP. Suponha que existe uma função toPhon que faça e transcrição fonética de uma palavra (Exemplo toPhon("partir") = "p6rti:r"em que o símbolo ":"indica que a vogal anterior é a tónica). a). Construa um programa que dado um CP construa o DR correspondente. b). Construa um programa que junte dois DR. 3