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
Download

Scripting