• Nenhum resultado encontrado

Lista de Exercícios 05 Strings

N/A
N/A
Protected

Academic year: 2021

Share "Lista de Exercícios 05 Strings"

Copied!
11
0
0

Texto

(1)

Universidade Federal de Ouro Preto – UFOP

Instituto de Ciências Exatas e Biológicas – ICEB

Departamento de Computação – DECOM

Disciplina: Algoritmos e Programação Avançada

Professores: Marco Antonio M. Carvalho

Túlio Ângelo M. Toffolo

Lista de Exercícios 05 – Strings

Instruções

• Todos os exercícios que envolvem programas devem ser resolvidos através de programas; • Na solução dos exercícios, devem ser utilizados os conceitos listados no cabeçalho desta lista;

• Para cada exercício, deve ser criado um arquivo com nome “Nome_ListaX_ExeY.c”, em que Nome denota o nome do aluno, X denota o número da lista de exercícios e Y denota o número do exercício; • Os códigos fonte deverão ser primeiramente submetidos ao Uva, e após serem aceitos, devem ser

entregues através do Moodle, sem zipar;

• Códigos copiados ou tentativas de trapaça acarretam em perda total da lista de exercícios; • Eventuais dúvidas podem ser sanadas com o professor;

• A data da entrega é até o início da próxima aula prática.

Onde está Waldorf? ID: 10010

Dado uma grade de m por n de letras, (1<=m, n<=50), e uma lista de palavras, encontre a localização na grade na qual a palavra pode ser encontrada. Uma palavra casa uma linha de letras da grade direta, sem interrupções. Uma palavra pode casar as letras da grade independentemente da caixa (ou seja, letras maiúsculas ou minúsculas são tratadas da mesma forma). O casamento pode ser feito em qualquer uma das oito direções, horizontalmente, verticalmente ou diagonalmente na grade.

Entrada

A entrada começa com um único inteiro em uma linha indicando o número de casos a seguir, cada um deles descrito como a seguir. Esta linha é seguida por uma linha em branco, e também há uma linha em branco entre duas entradas consecutivas.

A entrada começa com um par de inteiros, m seguido por n, 1<=m, n<=50 em notação decimal em uma única linha. As próximas m linhas contém n letras cada, este é a grade de letras na qual as palavras da lista devem ser encontradas. As letras da grade podem ser maiúsculas ou minúsculas. Depois das letras da grade, outro inteiro k aparece sozinho em uma linha (1<=k<=20). As próximas k linhas da entrada contém uma lista de palavras a serem procuradas, uma palavra por linha. Estas palavras podem conter letras maiúsculas e minúsculas apenas (sem espaços, hífens ou outros caracteres não alfabéticos).

Saída

Para cada caso de teste, a saída segue a descrição abaixo. As saídas de dois casos consecutivos serão separadas por uma linha em branco.

(2)

Para cada palavra na lista, um par de inteiros representando a localização da palavra correspondente na grade deve ser exibido. Os inteiros devem ser separados por um único espaço. O primeiro inteiro é a linha da grade na qual a primeira letra da palavra pode ser encontrada (1 representa a coluna mais à esquerda na grade, e n representa a coluna mais à direita na grade). Se uma palavra pode ser encontrada mais de uma vez na grade, a localização exibida deve corresponder àquela ocorrência mais ao topo (ou seja, a ocorrência que posiciona a primeira letra mais próxima do topo da grade). Se duas ou mais palavras são as mais ao topo, a saída deve corresponder àquela mais à esquerda. Todas as palavras podem ser encontradas pelo menos uma vez na grade.

Exemplo de Entrada Exemplo de Saída 1 8 11 abcDEFGhigg hEbkWalDork FtyAwaldORm FtsimrLqsrc byoArBeDeyv Klcbqwikomk strEBGadhrb yUiqlxcnBjf 4 Waldorf Bambi Betty Dagbert 2 5 2 3 1 2 7 8

(3)

Ananagramas ID: 156

A maioria dos fãs de jogos de palavras cruzadas é acostumada com anagramas -- grupos de palavras com as mesmas letras em ordens diferentes -- por exemplo, OPTS, SPOT, STOP e POST. Algumas palavras, porém, não possuem este atributo, não importa como você rearranje as letras delas, você nunca formará outra palavra. Tais palavras são chamadas ananagramas, um exemplo é QUIZ.

Obviamente, tais definições dependem do domínio no qual estamos trabalhando; você pode pensar que ATHENE é um ananagrama, ao passo que qualquer químico rapidamente produziria ETHANE. Um possível domínio poderia ser a língua inglesa completa, mas isto poderia levar a alguns problemas. Alguém poderia restringir a, digamos, música, em que SCALE se tornaria um ananagrama relativo (LACES não está no mesmo domínio) mas NOTE não é, uma vez que pode produzir TONE.

Escreva um programa que lerá o dicionário de um domínio restrito e determine os ananagramas relativos. Note que palavras de uma letra só são, ipso facto, ananagramas relativos, uma vez que não podem ser “rearranjados” de maneira nenhuma. O dicionário não conterá mais que 100 palavras.

Entrada

A entrada consistirá de uma série de linhas. Nenhuma linha terá mais que 80 caracteres de comprimento, mas pode conter qualquer número de palavras. Palavras consistem de até 20 letras maiúsculas/minúsculas, e não serão divididas entre linhas. Espaços podem aparecer livremente ao redor das palavras, e pelo menos um espaço separa múltiplas palavras na mesma linha. Note que palavras contendo as mesmas letras de diferentes caixas são consideradas anagramas uma da outra, logo, tIeD e Edit são anagramas. O arquivo será terminado por um único #.

Saída

A saída consistirá de uma série de linhas. Cada linha consistirá de uma única palavra que é um ananagrama relativo no dicionário de entrada. Palavras devem ser exibidas em ordem lexicográfica (case-sensitive). Haverá sempre pelo menos um ananagrama relativo.

Exemplo de Entrada Exemplo de Saída

ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Rides dealer NotE derail LaCeS drIed

noel dire Disk mace Rob dries # Disk NotE derail drIed eye ladder soon

(4)

Códigos ID ID: 146

É 2084 e o ano do Grande Irmão finalmente chegou, apesar de um século depois. No intuito de exercer grande controle sobre os cidadãos e assim conter um colapso crônico da ordem e da lei, o Governo decide em uma medida radical -- todos os cidadãos devem ter um microcomputador cirurgicamente implantado em seus punhos esquerdos. Este computador conterá todos os tipos de informações pessoais assim como um transmissor que permitirá que os movimentos das pessoas sejam registrados e monitorados por um computador central. (Um efeito colateral desejável deste processo é que serão encurtadas as filas de desemprego dos cirurgiões plásticos). Um componente essencial de cada computador será um código de identificação único, consistindo de até 50 caracteres tomados a partir das 26 letras minúsculas. O conjunto de caracteres para qualquer código é escolhido atropeladamente. A forma complicada na qual o código é impresso no chip faz com que seja muito mais fácil para o fabricante produzir códigos que são rearranjamentos de outros códigos do que criar códigos novos com uma seleção diferente de letras. Logo, uma vez que um conjunto de letras foi escolhido, todos os códigos deriváveis dele serão utilizados antes que o conjunto seja trocado.

Por exemplo, suponha que foi decidido que um código conterá exatamente 3 ocorrências de ‘a’, 2 de ‘b’ e 1 de ‘c’, então três dos 60 códigos permitidos sob estas condições são:

abaabc abaacb ababac

Estes três códigos são listados do alto para baixo em ordem alfabética. Entre todos os códigos gerados com este conjunto de caracteres, estes códigos aparecem consecutivamente nesta ordem.

Escreva um programa que ajude a gerar estes códigos de identificação. Seu programa deve aceitar uma sequência de não mais que 50 letras minúsculas (que podem conter caracteres repetidos) e imprimir o código sucessor se ele existir ou a mensagem ‘No Successor’ se o dado código é o último na sequência para aquele conjunto de caracteres.

Entrada

A entrada consistirá de uma série de linhas, cada uma contendo ma string representado um código. O arquivo será terminado por uma linha consistindo de um # único.

Saída

A saída consistirá de uma linha para cada código lido, contendo o código sucesso ou as palavras ‘No Successor’.

Exemplo de Entrada Exemplo de Saída abaacb

cbbaa #

ababac No Successor

(5)

WERTYU ID: 10082

Um erro comum em digitação é posicionar as mãos no teclado uma linha à direita da posição correta. Desta forma, “Q” é digitado como “W” e “J” é digitado como “K” e assim por diante. Você deve decodificar uma mensagem digitada desta maneira.

Entrada

A entrada consiste de várias linhas de texto. Cada linha contém dígitos, espaços, letras maiúsculas e minúsculas (Exceto, Q, A, Z) ou pontuação mostrada acima [exceto a aspa invertida (`)]. Teclas rotuladas com palavras [Tab, BackSp, Control, etc.] não são representadas na entrada.

Saída

Você deve substituir cada letra ou símbolo de pontuação por aquele imediatamente à sua esquerda no teclado QWERTY mostrado acima. Espaços na entrada devem ser exibidos na saída.

Exemplo de Entrada Exemplo de Saída O S, GOMR YPFSU/ I AM FINE TODAY.

(6)

Permutação em Comum* ID: 10252

Dadas duas strings de letras minúsculas, a e b, imprima a string x mais longa tal que haja uma permutação de x que seja uma subsequência de a e haja uma permutação de x que seja uma subsequência de b.

Entrada

O arquivo de entrada contém várias linhas. Duas linhas consecutivas formam um conjunto de entradas. Isto significa que no arquivo de entrada, as linhas 1 e 2 são um conjunto de entrada, as linhas 3 e 4 são um conjunto de entrada, e assim por diante. A primeira linha de um par contém a, e a segunda contém b. Cada string está em uma linha separada e consiste de até 1000 letras minúsculas.

Saída

Para cada conjunto de entrada, exiba uma linha contendo x. Se vários x satisfazem o critério acima, escolha o primeiro em ordem alfabética.

Exemplo de Entrada Exemplo de Saída pretty women walking down the street e nw et

(7)

Script de Juiz Automático ID: 10188

Juízes humanos de competições de programação são conhecidos por serem muito exigentes. Para eliminar a necessidade deles, escreva um script de juiz automático para julgar as soluções submetidas.

Seu programa deve tomar um arquivo contendo a saída correta assim como a saída do programa submetido e responder Accepted, Presentation Error, ou Wrong Answer, definidos como a seguir:

Accepted: Você deve reportar “Accepted” se a saída do time casa com a solução exatamente. Todos os

caracteres devem casar e devem ocorrer na mesma ordem.

Presentation Error: Dê um “Presentation Error” se todos os caracteres numéricos casam na mesma

ordem, mas há pelo menos um caractere não numérico que não casa. Por exemplo, “15 0” e “150” receberiam “Presentation Error”, ao passo que “15 0” e “1 0” receberiam “Wrong Answer”, descrito abaixo.

Wrong Answer: Se a saída do time não pode ser classificada como acima, então você não tem alternativa a não ser anotar um “Wrong Answer” para o time.

Entrada

A entrada consistira de um número arbitrário de conjuntos de entrada, Cada conjunto de entrada começa com uma linha contendo um inteiro positivo n < 100, que descreve o número de linhas da solução correta. As próximas n linhas contém a solução correta. Então segue um inteiro positivo, m<100, sozinho em sua linha, que descreve o número de linhas da saída submetida pelo time. As próximas m linhas contêm esta saída. A saída é terminada pelo valor de n=0, que não devem ser processado.

Nenhuma linha terá mais do que 100 caracteres. Saída

Para cada conjunto, exiba alguma das seguintes frases: Run #x: Accepted

Run #x: Presentation Error Run #x: Wrong Answer

(8)

Exemplo de Entrada Exemplo de Saída 2

The answer is: 10 The answer is: 5

2

The answer is: 10 The answer is: 5

2

The answer is: 10 The answer is: 5

2

The answer is: 10 The answer is: 15

2

The answer is: 10 The answer is: 5

2

The answer is: 10 The answer is: 5

3

Input Set #1: YES Input Set #2: NO Input Set #3: NO

3

Input Set #0: YES Input Set #1: NO Input Set #2: NO 1 1 0 1 0 1 1010 1

The judges are mean! 1

The judges are good! 0

Run #1: Accepted Run #2: Wrong Answer Run #3: Presentation Error

Run #4: Wrong Answer Run #5: Presentation Error Run #6: Presentation Error

(9)

Sintaxe Simples ID: 271

Na terra de Hedônia, a língua oficial é o Hedoniano. Uma professora de Hedoniano percebeu que vários dos seus estudantes ainda não dominam bem a sintaxe do Hedoniano. Cansada de corrigir os vários erros sintáticos, ela decidiu desafiar os alunos e pediu que eles escrevessem um programa que pudesse checar a corretude sintática de qualquer sentença que escrevessem. Similar à natureza dos Hedonianos, a sintaxe do Hedoniano é também agradavelmente simples. Aqui estão as regras:

0. Os únicos caracteres na linguagem são os de p até z e N, C, D, E, e I. 1. Todo caractere de p até z é uma sentença correta.

2. Se s é uma sentença correta, então Ns também é.

3. Se s e t são sentenças corretas, então Cst, Dst, Est, e Ist também são.

4. As regras de 0 a 3 são as únicas regras que determinam a corretude sintática de uma sentença.

É pedido a você que escreva um programa que checa se uma sentença satisfaz as regras sintáticas dadas nas regras de 0 a 4.

Entrada

A entrada consiste de um número de sentenças consistindo apenas de caracteres de p até z e N, C, D, E, e I. Cada sentença é terminada por um caractere nova linha. A coleção de sentenças é terminada pelo caractere fim-de-arquivo. Se necessário, você deve assumir que cada sentença tem no máximo 256 caracteres e no mínimo 1 caractere.

Saída

A saída consiste das respostas YES para cada sentença bem formada e NO para cada sentença não bem formada. As respostas são dadas na mesma ordem que as sentenças. Cada resposta é seguida por um caractere nova linha, e a lista de respostas é seguida por um caractere fim-de-arquivo.

Exemplo de Entrada Exemplo de Saída Cp Isz NIsz Cqpq NO YES YES NO

(10)

Pesquisando Rapidamente ID: 123

Pesquisa e ordenação são parte da teoria e prática da ciência da computação. Por exemplo, a busca binária nos fornece um bom exemplo de um algoritmo fácil de entender com complexidade sublinear. Quicksort é um eficiente [caso médio] método de ordenação O(n log n) baseada em comparações.

KWIC-indexing é um método de indexação que permite “pesquisa humana” de, por exemplo, uma lista de títulos.

Dados uma lista de títulos e uma lista de “palavras a serem ignoradas”, você deve escrever um programa que gere um índice KWIC (Key Word In Context) dos títulos. Em um KWIC-index, um título é listado uma vez para cada palavra chave que ocorre no título. O KWIC-index é ordenado por palavra chave.

Qualquer palavra que não seja uma das “palavras a serem ignoradas” é uma palavra chave em potencial. Por exemplo, se as palavras a serem ignoradas são “the, of, and, as, a” e a lista de títulos é: Descent of Man

The Ascent of Man

The Old Man and The Sea

A Portrait of The Artist As a Young Man O KWIC-index destes títulos pode ser dados por:

a portrait of the ARTIST as a young man the ASCENT of man

DESCENT of man descent of MAN

the ascent of MAN

the old MAN and the sea a portrait of the artist as a young MAN

the OLD man and the sea

a PORTRAIT of the artist as a young man the old man and the SEA

a portrait of the artist as a YOUNG man

Entrada

A entrada é uma sequência de linhas, a string :: é usada para separar a lista de palavras a serem ignoradas da lista de títulos. Cada uma das palavras a serem ignoradas aparece em letras minúsculas em uma linha sozinha e não possuem comprimento maior que 10 caracteres.

Cada título aparece em uma linha sozinha e pode consistir de letras maiúsculas e minúsculas misturadas. Palavras em títulos são separadas por espaço em branco. Nenhum título contém mais que 15 palavras.

Não haverá mais do que 50 palavras a serem ignoradas, não mais que 200 títulos, e não mais que 10000 caracteres nos títulos e palavras a serem ignoradas combinados. Nenhum outro caractere além de ‘a’-‘z’, ‘A’-‘Z’, e espaço em branco aparecerá na entrada.

Saída

A saída deve ser o KWIC-index dos títulos, com cada título aparecendo uma vez para cada palavra chave no título, e com o KWIC-index ordenado por palavra chave. Se uma palavra aparece mais que uma vez em um título, cada instância é uma palavra chave em potencial.

(11)

A palavra chave deve aparecer toda em letras maiúsculas. Todas as outras palavras em um título devem ser em letras minúsculas. Títulos no KWIC-index com a mesma palavra chave devem aparecer na mesma ordem em que apareceram na entrada. No caso em que múltiplas instâncias de uma palavra são palavras chave no mesmo título, as palavras chave devem ser capitalizadas da esquerda para a direita.

Maiúsculas ou minúsculas são irrelevantes para determinar se uma palavra deve ser ignorada.

Os títulos em um KWIC-index não necessitam ser justificados ou alinhados por palavra chave, todos os títulos devem ser justificados à direita.

Exemplo de Entrada Exemplo de Saída

is the of and as a but :: Descent of Man The Ascent of Man

The Old Man and The Sea

A Portrait of The Artist As a Young Man A Man is a Man but Bubblesort IS A DOG

a portrait of the ARTIST as a young man the ASCENT of man

a man is a man but BUBBLESORT is a dog DESCENT of man

a man is a man but bubblesort is a DOG descent of MAN

the ascent of MAN

the old MAN and the sea

a portrait of the artist as a young MAN a MAN is a man but bubblesort is a dog a man is a MAN but bubblesort is a dog the OLD man and the sea

a PORTRAIT of the artist as a young man the old man and the SEA

Referências

Documentos relacionados

favorecida), para um n´ umero grande de poss´ıveis lan¸ camentos, esperamos que a frequˆ encia de cada face seja parecida. • Em outras palavras, esperamos que a frequˆ encia

A combinação dessas dimensões resulta em quatro classes de abordagem comunicativa, que podem ser exemplificadas da seguinte forma: interativo/dialógico: professor e

Associação Brasileira Beneficente de Reabilitação Associação de Amigos da Criança Defeituosa Associação Brasileira Beneficente de Reabilitação Associação Brasileira de

Outro aspecto a ser observado é que, apesar da maioria das enfermeiras referirem ter aprendido e executado as fases do processo na graduação, as dificuldades na prática

O exercício do poder regulamentar, pelos Municípios e pelo Distrito Federal, não viola o pacto federativo, pois não importa ofensa ao artigo 22, XI, da Constituição Federal (que

Also due to the political relevance of the problem of repressing misguided employment relationships, during the centre-left Prodi Government (2006-2008) and the

A Psicologia, por sua vez, seguiu sua trajetória também modificando sua visão de homem e fugindo do paradigma da ciência clássica. Ampliou sua atuação para além da

No capítulo 4 são abordados os principais resultados obtidos diante das restrições impostas à coleta de dados, bem como a avaliação dos dados obtidos caracterizando os períodos