Lista de Exercícios 05 Strings

Documentos relacionados
Generating Fast, Sorted Permutation

Lista de Exercícios 09

Backtracking. Pequenos Bispos

Lista de exercícios para a prática de manipulação de Strings

Exercícios: Vetores e Matrizes

Algoritmos e Estruturas de Dados II. Trabalho Prático 4

Linguagem C Entrada/Saída (console)

Material Didático Unificado.

Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I - BCC701

Universidade Federal do ABC MCTA Programação Estruturada 2018.Q3

Ambiente Scilab Variáveis, expressões, comando de atribuição Entrada e Saída básica

Divisão e Conquista. Dado um conjunto de pontos no espaço bidimensional, você deve encontrar a distância entre os dois pontos mais próximos.

Programação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP

Exercícios TVC2 PARTE I:

Aula 15 - Estruturas de Repetição (p3)

Lista de Exercícios 5

Algoritmos e Estruturas de Dados I (DCC/003) Introdução à Programação de Computadores. Aula - Tópico 1

Lista de Exercícios 02

Linguagem C: Introdução

Material Didático Unificado. Variáveis correspondem a nomes para endereços de memória que são gerenciados pelo Scilab.

Lista sobre Estruturas de Dados

Exercícios: Recursão

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Lista de Exercícios 2 Condicionais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Aula 3 Primeiros programas

Introdução à Programação

Ficha 1 Noções de sequência e decisão em algoritmia

Laboratório de Programação A Exercícios sobre vetores e matrizes

Programação Universidade da Beira Interior Departamento de Informática 2007/08

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

Disciplina de Algoritmos e Programação

Aula 03 - Introdução ao Scilab (p2)

Seleção de Problemas:

Lista de Exercícios 3

BCC202 - Estrutura de Dados I

3. Linguagem de Programação C

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

Lista de Exercícios STRING LINGUAGEM DE PROGRAMAÇÃO PROF. EDUARDO SILVESTRI.

MODALIDADE PROGRAMAÇÃO 1ª FASE

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Lista de Exercícios 3 Laço de Repetição For e While

Introdução. O BOCA Online Contest Administrator é um sistema de correção online de códigos utilizado em competições de programação de computadores.

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Segundo trabalho de Organização e Recuperação da Informação FACOM- UFU Professor: Wendel Melo

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Trabalho de Programação 2 Processador CESAR

CCO 016 / COM 110 Fundamentos de Programação

Lista de Exercícios 4

Algoritmos e Técnicas de Programação

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

Introdução a Matrizes

Estruturas de Repetição

O usuário pode restringir dados a um determinado tipo, como números inteiros, números decimais ou texto, e definir limites para as entradas válidas.

PROGRAMAÇÃO DE COMPUTADORES

BCC201 Introdução à Programação ( ) Prof. Reinaldo Silva Fortes. Prática 04 Estruturas de Dados Homogêneas Vetores

Questão 01 (Neilor Tonin) Aula Prática 3: Estrutura Condicional. Entrada. Saída. Exemplo de entrada e Saída. - Procedimento para a entrega:.

Sistemas de Numeração.

C A P I T U L O 2 S I N T A X E B Á S I C A - V A R I Á V E I S E C O N S T A N T E S E M P H P

Puca Huachi Vaz Penna

1ª Lista de Exercícios

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Seleção de Problemas:

Praticar os princípios da ordenação, cópia de formatos, hifenização, trabalho com múltiplos documentos, modos de visualização e impressão.

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA. DIM0320 Algoritmos e Programação de Computadores

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Compiladores. Análise Léxica

Caderno de Problemas

3.1 - Funções para manipular dados de entrada e saída padrão

PROBABILIDADE E ESTATÍSTICA. Profa. Dra. Yara de Souza Tadano

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema

EXPRESSÕES RELACIONAIS

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Algoritmos e Programação

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

PROBLEMA A TROCA DE CARTAS

Transcrição:

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. ID: 10010 Onde está Waldorf? 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. 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<=0). 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). 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.

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 Exemplo de 1 8 11 abcdefghigg hebkwaldork FtyAwaldORm FtsimrLqsrc byoarbedeyv Klcbqwikomk strebgadhrb yuiqlxcnbjf 4 Waldorf Bambi Betty Dagbert 5 3 1 7 8

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. 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é 0 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 #. 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 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 # Exemplo de Disk NotE derail dried eye ladder soon

Códigos ID ID: 146 É 084 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 6 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, 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. 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. A saída consistirá de uma linha para cada código lido, contendo o código sucesso ou as palavras No Successor. Exemplo de Exemplo de abaacb ababac cbbaa No Successor #

WERTYU ID: 1008 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. 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. 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 Exemplo de O S, GOMR YPFSU/ I AM FINE TODAY.

Permutação em Comum* ID: 105 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. 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 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. 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 Exemplo de pretty women e walking nw down et the street *(Aquecimento da Final Mundial, Fonte do Problema: Competição Local, Universidade Alberta)

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. 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. Para cada conjunto, exiba alguma das seguintes frases: Run #x: Accepted Run #x: Presentation Error Run #x: Wrong Answer Em que x denota o número do conjunto de entrada (começando por 1).

Exemplo de The answer is: 5 The answer is: 5 The answer is: 5 The answer is: 15 The answer is: 5 The answer is: 5 3 Input Set #1: YES Input Set #: NO Input Set #3: NO 3 Input Set #0: YES Input Set #1: NO Input Set #: NO 1 1 0 1 0 1 1010 1 The judges are mean! 1 The judges are good! 0 Exemplo de Run #1: Accepted Run #: Wrong Answer Run #3: Presentation Error Run #4: Wrong Answer Run #5: Presentation Error Run #6: Presentation Error

Sintaxe Simples ID: 71 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.. 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. 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 fimde-arquivo. Se necessário, você deve assumir que cada sentença tem no máximo 56 caracteres e no mínimo 1 caractere. 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 Exemplo de Cp NO Isz YES NIsz YES Cqpq NO

Pesquisando Rapidamente ID: 13 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 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 00 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. 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.

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 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 Exemplo de 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 a portrait of the artist as a YOUNG man