main

21

Upload: anthony-reynaldo-flores-gomez

Post on 28-Dec-2015

13 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Main

.

INF-111

2da Guía de Ejercicios

Ejercicios de Modularidad y Cadenas

Autores:

Mauricio Alarcónr00t García

D'jalmar GutierrezArun Limachi

2 de mayo de 2014

Page 2: Main

Índice

1. Programación Modular 41.1. Analizando Algoritmos (4pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.1.1. Primos: Siguiente y anterior . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.1.2. Serie de factoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2. Primeros Pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2.1. El �bonacci más cercano (2 pts) . . . . . . . . . . . . . . . . . . . . . . . . . 51.2.2. El enésimo dígito (2 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2.3. Eliminando Dígitos (2 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2.4. Insertando Dígitos (2 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2.5. Eliminar y devolver el enésimo dígito (2 pts) . . . . . . . . . . . . . . . . . . . 71.2.6. Cohesión y Acoplamiento: Preguntas (6 pts) . . . . . . . . . . . . . . . . . . . 7

1.3. Caminando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.1. Es �bonacci? (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.2. Es primo? (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.3. TIMTOWTDI (AKA: TimTowdy) (6 pt) . . . . . . . . . . . . . . . . . . . . . 81.3.4. Shush impares! (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.5. Shush pares! (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.6. OH NOES! (10 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.7. Shush último dígito! (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.8. Factoriales! (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.9. Optimización vs Módulos (4 pt) . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.10. Conteo de dígitos (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3.11. SWAP! (2 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.4. Corriendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.4.1. El signi�cado de la vida (15 pt) . . . . . . . . . . . . . . . . . . . . . . . . . 101.4.2. El examen (32 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.4.3. Ordenando Dígitos (48 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.4.4. ¾½Más series?! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4.5. Población de primos entre factoriales (10 pt) . . . . . . . . . . . . . . . . . . 11

2. Cadenas 122.1. Fáciles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.1.1. Sencillo pero útil (4pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1.2. ¾Cuántas veces? (4pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1.3. Conteo de A en B (4pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1.4. Eliminando (4pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.1.5. Buscando palabras (4pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2. Que comiencen los juegos... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.1. ¾Es consonante? (4pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.2. ¾es vocal? (4pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.3. Juego de Niños (10pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.4. Balanza (4 pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.5. Palíndromes (4pt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.6. ¾Podría ser palíndrome? (10pts) . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.7. Forma un palíndrome! (20pts) . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1

Page 3: Main

2.2.8. Mensajes Ocultos (4pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.2.9. Contando Cercas (10pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.2.10. Anagramas (10pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.2.11. Arrays.sort() (15pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.2.12. Concursos por sms (10pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2.13. ¾Qué es Criptoanálisis? (20pts) . . . . . . . . . . . . . . . . . . . . . . . . . . 182.2.14. El cifrado del César (20pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2

Page 4: Main

README.txt

Es importante que leas esto antes de empezar, de lo contrario, trabajarás de más, en vano.

En cada sección deberás juntar 100 puntos. Si juntas más de 100 puntos en una sección, el excesose pierde (no se acumula). Por ejemplo, si haces el ejercicio 1.4.5 (10 puntos), 1.4.4.frankenstein (15puntos), el 1.4.3 (48 puntos) y el 1.4.2 (32 puntos), tendrás 100 puntos en la sección 1. Modularidad,y los otros 5 puntos se perderán.

Esta práctica tiene más de 40 ejercicios, no te preocupes, no tienes que hacerlos todos: elije es-tratégicamente los problemas que resolverás, de modo que por sección, tus puntos sumen 100.

El puntaje �nal, será un promedio de los puntos que tienes en cada sección. Esta práctica tiene 4secciones, y una sección �nal que contiene ejercicios l33t h4x0r.

Por el momento, solo las primeras dos secciones están disponibles. Las otras dos estarán disponiblesa partir del lunes a medio día.

¾Qué son los ejercicios l33t h4x0r?

A lo largo de la práctica, encontrarás algunos ejercicios etiquetados con esta medalla:

Estos son ejercicios �l33t h4x0r�. Si haces uno de estos ejercicios, ya no tienes que hacer el resto deejercicios de la práctica, y automáticamente tienes el 100% de los puntos de esta práctica.

Ten en cuenta que, si haces uno de estos ejercicios, tendrás que defenderlo ante tu auxiliar. Si resultatener algún error lógico (o si no entiendes tu algoritmo), el ejercicio quedará anulado y tendrás 0%.

3

Page 5: Main

1. Programación Modular

1.1. Analizando Algoritmos (4pts)

A continuación se te darán varios ejemplos de algoritmos en los que se usa modularidad... por cadaproblema propuesto, habrán dos o más soluciones "propuestas", puedes asumir (está garantizado) quetoda solución propuesta es correcta (es decir, da con la respuesta correcta), por esta razón no deberíaspreocuparte en veriri�car si el código tiene bugs lógicos, no gastes tus fuerzas en eso, concéntrate en:

Analiza las soluciones a los problemas que se te proponen a continuación, y elige la que más teguste (si ninguna solución te convence, puedes proponer una solución nueva) indicando:

por qué te parece una buena solución

y por cada solución descartada, indica: por qué no te parece que sea una buena solución.

Nota 1: Los diagramas de �ujo fueron creados con Dia

Nota 2: los módulos que usan los modelos se encuentran en el Apéndice

1.1.1. Primos: Siguiente y anterior

Los siguientes algoritmos leen un número n: Si n es primo, entonces muestra al número primo másgrande que sea menor que n (el anterior primo de n ); de lo contrario, muestra al primo más pequeñoque sea mayor que n (el siguiente primo de n )

4

Page 6: Main

1.1.2. Serie de factoriales

Generar la serie para los primeros n términos:

1 + 2 + 6 + 24 + 120 + 720 + ... (1)

1.2. Primeros Pasos

En esta sección crearás módulos extremadamente sencillos, pero que probablemente necesitarás enlas siguientes secciones ;)

1.2.1. El �bonacci más cercano (2 pts)

Haz un módulo que, dado un número cualquiera, devuelva al último número �bonacci que sea menoro igual que el número dado.

SERIE FIBONACCI:

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584

4181 6765 10946 ...

5

Page 7: Main

EJEMPLOS

PARAMETROS 1

RESULTADO 1

Porque el último número �bonacci que es menor o igual que 1 es el mismo 1.

PARAMETROS 2

RESULTADO 2

Como el 2 también pertenece a la serie �bonacci, el último número �bonacci que es menor o igual que2, es el mismo 2.

PARAMETROS 42

RESULTADO 34

el 9no número de la serie �bonacci es el 34, y el 10mo término de la serie �bonacci es el 55. Como 55>42 y 34 <42, entonces la respuesta es 34, ya que 34 es el último número de la serie �bonacci que esmenor o igual que 42.

PARAMETROS 88

RESULTADO 55

Porque 55 es el último término de la serie �bonacci que es menor o igual que 88. El siguiente términode la serie �bonacci es el 89, pero el 89 no cumple la condición (89 <= 88 es falso)

1.2.2. El enésimo dígito (2 pts)

Haz un módulo que, dado un número x, y otro número n, te indique cuál es el enésimo dígito delnúmero x.

Nota: Si n es mayor que la cantidad de dígitos en x, el módulo debería devolver 0.

1.2.3. Eliminando Dígitos (2 pts)

Haz un módulo que, dado un número x y otro número n, convierta en 0 el dígito en la posición n,y devuelva el x modi�cado.

Nota: si n es mayor que la cantidad de dígitos en x, entonces el número que el módulo devuelve nodebería ser distinto de x

6

Page 8: Main

1.2.4. Insertando Dígitos (2 pts)

Haz un módulo que, dado un número x, otro número n y un dígito a, inserte el dígito a en el enésimodígito de x.

EJEMPLO

PARAMETROS: x = 643, n = 5, a = 9.

RESULTADO: 90643

PARAMETROS: x=643, n=1, a=7.

RESULTADO: 647

1.2.5. Eliminar y devolver el enésimo dígito (2 pts)

Haz un módulo que, dado un número n, y otro número x, elimine el enésimo dígito de x, y devuelvael dígito eliminado.

HINT: si reusas los módulos que diseñaste para solucionar el problema 2.2 y 2.3 evitas duplicarcódigo.

1.2.6. Cohesión y Acoplamiento: Preguntas (6 pts)

Dos criterios importantes que se deben tener en cuenta al usar la modularidad son: La cohesión yel Acoplamiento.

¾El módulo que se te pidió en el ejercicio 2.5 está bien acoplado?

¾tiene alta cohesión?

El módulo que creaste para 2.5, en realidad, debería devolver dos valores: el primero es el dígitoque eliminaste del número, y el 2do es el número con el dígito eliminado... Explica: ¾es estoposible?

El ejercicio en 2.5 podría no tener una buena cohesión, sin embargo, es una rutina que se usamuy seguido. En tu opinión... ¾Crees que es bueno sacri�car un poco de cohesión para evitar laduplicidad de código?

NOTA: pide ayuda a tu auxiliar, o lee la guía sobre modularidad si tienes problemas respondiendolas preguntas de 2.6.

7

Page 9: Main

1.3. Caminando

Estos ejercicios no son muy difíciles, pero te introducen al uso de módulos en un algoritmo. En estasección, probablemente utilices los módulos que creaste para la sección 2.

No olvides, que puedes utilizar todos los módulos que creaste para resolver los problemas pasados,también puedes usar los módulos del apéndice. No olvides que duplicar código no solo te hará trabajarextra, sino que también es una mala práctica de programación que te dará pesadillas a la hora demodi�car y darle mantenimiento a tu código.

1.3.1. Es �bonacci? (2 pt)

Haz un módulo que indique si un número pertenece a la secuencia �bonacci o no.

1.3.2. Es primo? (2 pt)

Haz un módulo que indique si un número es primo o no.

1.3.3. TIMTOWTDI (AKA: TimTowdy) (6 pt)

TIMTOWTDI son las siglas de There Is More Than One Way To Do It, que en español signi�ca"Hay más de una forma para hacerlo", también es conocido como "TimTowdy", y es el slogan de Perl.El problema 3.2 es un claro ejemplo de TimTowdy, porque hay varias formas de resolverlo.

Explica: ¾Por qué crees que la solución que elegiste es la mejor?

1.3.4. Shush impares! (2 pt)

Haz un módulo que elimine los dígitos impares de un número.

1.3.5. Shush pares! (2 pt)

Haz un módulo que elimine los dígitos pares de un número.

1.3.6. OH NOES! (10 pt)

3.4 y 3.5 son problemas muy parecidos, pero es muy difícil (o aún no haz aprendido cómo) evitarla duplicidad de código en este tipo de rutinas. ¾Se te ocurre alguna forma de evitarla? ¾Cuál?

HINT: ¾No sería genial poder enviar otro módulo como parámetro?

HINT2: Talvez sería buena idea formularle esta pregunta a algún experto en el internet (algún forode Stackexchange, o Quora podría ayudarte)

¾ERES AUTODIDACTA?: En INF-121 te enseñarán: Polimor�smo (herencia de templates), Gene-ricidad(templates) y Herencia (heredar métodos y generar interfaces), estos tres pilares te permiteneliminar por completo la duplicidad de código... Cuando llegues a INF-121, ½no olvides presionar a tudocente o auxiliar para que te enseñe a evitar la duplicidad de código mediante estos tres pilares!

8

Page 10: Main

1.3.7. Shush último dígito! (2 pt)

Haz un módulo que elimine el último dígito de un número.

1.3.8. Factoriales! (2 pt)

La secuencia de números factoriales, está compuesta por números que son el factorial de algúnnúmero.

SECUENCIA DE NUMEROS FACTORIALES

1 2 6 24 120 720 5040 40320 362880 ...

Haz un módulo que indique si un número pertenece a la secuencia de números factoriales.

HINT:

4! = 1*2*3*4 = 24. 24 % 4 es 0, 6 % 3 es 0, 2 % 2 es 0.

Pero también hay un módulo en el apéndice que calcula el factorial de un número :O.

1.3.9. Optimización vs Módulos (4 pt)

En el ejercicio 3.8 habían varias formas de resolverlo... ¾preferiste usar módulos? ¾o preferisteoptimizar tu algoritmo? ¾por qué?

1.3.10. Conteo de dígitos (2 pt)

Haz un módulo que, dado un número x y un dígito d, devuelva la cantidad de veces que el dígito daparece en el número x.

1.3.11. SWAP! (2 pt)

Haz un módulo que, dado un número x, y dos números: i y j, que devuelva el número x con losdígitos en la posición i y j intercambiados.

EJEMPLO:

PARAMETROS: 12345 3 1

RESULTADO: 32145

PARAMETROS: 375932 5 2

RESULTADO: 335972

9

Page 11: Main

1.4. Corriendo

En esta sección encontrarás ejercicios de di�cultad más alta, practicarás la modularidad.

1.4.1. El signi�cado de la vida (15 pt)

Haz un algoritmo que, dado un número n, devuelva un número con la misma cantidad de dígitosque n, y cuyos dígitos son solo 4 ó 2, intercalados. (El 1er dígito de derecha a izquierda siempre es el2).

EJEMPLO:

INPUT: 12345

OUTPUT: 24242

INPUT 74938

OUTPUT: 424242

INPUT: 7

OUTPUT: 2

1.4.2. El examen (32 pt)

Dado un número n, seguido de un lote de n números, rota sus últimos dígitos (de derecha a izquierda)hacia la izquierda.

EJEMPLO:

INPUT: 5 123 456 789 321 654

OUTPUT: 423 756 389 621 154

Nota: Este fue el primer ejercicio del primer parcial de I/2014, a muchos les pareció difícil, sinembargo el problema se hace muy fácil si utilizas los módulos que creaste para la sección 3.caminando

1.4.3. Ordenando Dígitos (48 pts)

Dado un número n, ordena sus dígitos en orden ascendente de izquierda a derecha (el dígito menorva a la izquierda del número).

HINT: los números están compuestos de dígitos, y los dígitos solo pueden ser 1, 2, 3, 4, 5, 6, 7, 8,9 ó 0

HINT2: El método "más sencillo"de ordenación, se llama bubble sort (en español: Método burbuja)

HINT3: Hay una forma çorta"de resolver este ejercicio ;)

10

Page 12: Main

1.4.4. ¾½Más series?!

Recuerdas antes del primer parcial? la pizarra llena de series... con números primos aquí, �bonaccispor allá, factoriales por este otro lado, patrones por todas partes... y tú, escribiendo �echas de �ujo portodas partes en tu hoja, intentando no perderte dentro de todos esos cuadritos, óvalos, rombos de tudiagrama de �ujo... intentando seguirle el hilo a tu lógica... muchas veces te equivocabas, pero no eraporque no sabías cómo resolver el problema, sino porque te perdías, y cerrabas los bucles y condicionesen lugares en los que no deberías...

½Pues eso se acabó con la modularidad! A continuación se te darán algunos ejercicios de series, solopara que veas que los problemas son más fáciles de resolver, si modularizas (partes el problema) deforma correcta ;)

Primos (5pt) Haz un algoritmo para generar la siguiente serie: x2 + x3 + x5 + x7 + ...

Intermitente (5pt) Haz un algoritmo para generar la siguiente serie:

1− 2 + 3− 4 + 5− 6 + 7− 8 + ...

HINT: (−1)1 = −1.(−1)2 = +1.(−1)3 = −1...

Frankenstein (15pt) Haz un algoritmo para generar la siguiente serie

−x2/(1 + 2) + x3/(1− 4)− x5/(2 + 6) + x7/(3− 8)− x11/(5 + 10)

NOTA: La potencia es la serie de los números primos. El denominador se compone de un número�bonacci, sumado o restado (intermitentemente) con un múltiplo de 2. Los términos de la seriese suman y restan ïntermitentemente"(es decir: suma, resta, suma, resta, suma, resta, ...)

1.4.5. Población de primos entre factoriales (10 pt)

Se ha demostrado un teorema matemático que indica que, sí o sí, tiene que haber un primo enel rango [n, n!]. (link: http://es.wikipedia.org/wiki/Número_primo#Primos_primoriales_y_primos_factoriales )

Haz un algoritmo que, dado un número n, indique cuántos números primos hay en el rango [n, n!].

11

Page 13: Main

2. Cadenas

2.1. Fáciles

Los ejercicios de esta parte son muy fáciles. Probablemente necesites los módulos que programespara esta sección, en ejercicios más avanzados (como los de la siguiente parte). Si aún no entiendes lascadenas, te aconsejo que hagas unos cuantos de estos ejercicios.

2.1.1. Sencillo pero útil (4pt)

Haz un módulo que, dada una cadena X, y un caracter a, responda con un número que indique laposición de la cadena en la que está la primera ocurrencia del caracter a. Si el caracter a no está en lacadena, el número retornado debe ser negativo.

EJEMPLO:

PARAMETROS: X = "huehuehuehuehue", a = 'e'

RESPUESTA: 3

PARAMETROS: X = "HUEHUEHUEHUEHUE", a = 'e'

RESPUESTA: -1

2.1.2. ¾Cuántas veces? (4pt)

Haz un módulo que, dada una cadena X, y un caracter a, responda con un número que indique laposición de la cadena en la que está la primera ocurrencia del caracter a. Si el caracter a no está en lacadena, el número retornado debe ser negativo.

EJEMPLO:

PARAMETROS: X = "huehuehuehuehue", a = 'e'

RESPUESTA: 3

PARAMETROS: X = "HUEHUEHUEHUEHUE", a = 'e'

RESPUESTA: -1

2.1.3. Conteo de A en B (4pt)

Haz un módulo que, dada una cadena X, y un caracter a, responda un número que indique lacantidad de veces que el caracter a aparece en la cadena X.

EJEMPLO:

PARAMETROS: X = "Kerrigan", a = 'r'

RESPUESTA: 2

12

Page 14: Main

2.1.4. Eliminando (4pt)

Haz un módulo que, dada una cadena A y un caracter b, elimine de la cadena A todos los caracteresiguales a b, y devuelva la nueva cadena.

EJEMPLO:

PARAMETROS: A = "can i haz cheeseburger? :3" b = 'e'

RESPUESTA: "can i haz chsburgr? :3"

2.1.5. Buscando palabras (4pts)

Haz un módulo que, dada una cadena A y otra cadena B, indique cuántas veces la cadena A apareceen B

EJEMPLO:

PARAMETROS: A = "THE" B = "FIRST SOLVE THE PROBLEM ,

THEN WRITE THE CODE"

RESPUESTA: 3

2.2. Que comiencen los juegos...

Esta sección contiene una mezcla de ejercicios muy fáciles, fáciles, medianos, difíciles y muy difíciles...en esta sección aplicarás todos tus conocimientos de cadenas.

And may the odds be always with you

2.2.1. ¾Es consonante? (4pts)

Haz un módulo que, dado un caracter devuelva VERDADERO si el caracter es una letra consonante,y FALSO de lo contrario.

HINT: Conteo de A en B

NOTA: las letras consonantes, son todas aquellas letras pertenecientes a nuestro alfabeto de 28letras, incluyendo la 'ñ' que no son vocales. Las vocales son: a, e, i, o, u.

2.2.2. ¾es vocal? (4pts)

Haz un módulo que, dado un caracter devuelva VERDADERO si el caracter es una letra vocal, yFALSO de lo contrario.

13

Page 15: Main

2.2.3. Juego de Niños (10pts)

Hay un juego que juegan los niños de párvulos para aprender las vocales: Su maestra les enseña unacanción, y después de cantar la canción, la maestra dice .ahora con 'a' !", y todos los niños cantan lamisma canción, pero sustituyen todas las vocales de la canción con la letra 'a'.

Haz un algoritmo que, dada una çanción"(cadena de texto), sustituya todas las vocales con unaletra x que leerás por input.

EJEMPLO:

INPUT:

Vinci Vinci arana subio la telarana

a

OUTPUT:

Vanca Vanca arana sabaa la talarana

2.2.4. Balanza (4 pt)

Imagina que las x son pesos de 1 Kg y las o son pesos de 2 Kg. Se te darán dos cadenas de textocuyos caracteres únicamente son o ó x. Tu deber es añadirle caracteres a cualquiera de las cadenas detexto con el objetivo de que "pesen"lo mismo, agregando la menor cantidad de caracteres posible.

EJEMPLO:

INPUT:

xoxoxxx xx

OUTPUT:

xoxoxxx xxooox

2.2.5. Palíndromes (4pt)

Haz un módulo que veri�que si una cadena de texto es palíndrome (una palabra palíndrome, esaquella que se lee igual al derecho y al revés, por ejemplo: aibophobia).

2.2.6. ¾Podría ser palíndrome? (10pts)

Haz un algoritmo que indique si se puede armar una palabra palíndrome moviendo los caracteres deuna cadena dada.

NOTA: no puedes eliminar ni añadir nuevos caracteres de la cadena

14

Page 16: Main

2.2.7. Forma un palíndrome! (20pts)

Haz un algoritmo que, dada una cadena de letras, forme la palabra palíndrome más grande, utilizandoúnicamente los caracteres de la cadena de letras dada.

NOTA: No puedes añadir ni eliminar caracteres de la cadena, por ejemplo si la cadena solamentetiene una letra a, el palíndrome no puede tener dos letras a

NOTA 2: Si existen varias palabras palíndromes que se podrían formar a partir de la cadena dada,imprimir cualquiera de ellas

EJEMPLO:

INPUT:

aabbccdd

aabbccddf

aaabbbccc

maythena 'arublessingsbeuponyou

OUTPUT:

cbaabc

dcbafabcd

cbaaabc

ounsebaymyabesnuo

2.2.8. Mensajes Ocultos (4pts)

Algunos textos contienen mensajes ocultos, una de las formas de ocultar un mensaje en un texto esponer cada letra del mensaje en la primera letra de cada palabra del texto.

Para encontrar este tipo de mensajes ocultos dentro de texto, hay que tener en cuenta que el mensajeoculto se compone de la primera letra de las palabras del texto. Por ejemplo:

en la cadena de texto çompete online design event rating", el mensaje oculto es çoder".

Haz un algoritmo que, dada una cadena de texto, encuentre este tipo de mensajes ocultos.

2.2.9. Contando Cercas (10pts)

Llamamos cerca a una sucesión de caracteres que contienen los símbolos | y − en forma alternada.Haz un algoritmo que, dada una cadena de texto, indique cuál es la cerca más grande.

EJEMPLO:

INPUT:

|-|-|-

-|-|-|-|-

|--||-

|-|-----|-|-|-|-|||-

OUTPUT:

6

9

2

10

15

Page 17: Main

2.2.10. Anagramas (10pts)

Se dice que una cadena de texto A es un anagrama de otra cadena de texto B, cuando, utilizandotodas las letras de la cadena A, y aumentando, o eliminando espacios en blanco, se puede obtener lacadena B.

Haz un algoritmo que, dadas dos cadenas de texto A y B, indique si son anagramas o no.

EJEMPLO:

INPUT:

ray magini

imaginary

diavole in dracon limala asno

leonardo da vinci la mona lisa

mar azul

armymen

OUTPUT:

son anagramas

son anagramas

no son anagramas

2.2.11. Arrays.sort() (15pts)

Imagina que tienes un módulo llamado

cadena ordenar(cadena a)

que, dada una cadena de texto a, ordena sus letras en orden alfabético, poniendo todos los espaciosy caracteres que no son letras al principio de la cadena, por ejemplo:

print( ordenar (" explicito es mejor que implicito ") )

imprimirá:

cceeeeiiiiijllmmoooppqrsttux

ojo que antes de la primera c, hay 4 espacios en blanco.

Imagina que un programador genial ya programó para tí este módulo, y puedes usarlo sin programarlo.

¾Cómo resolverías el problema 2.11 Anagramas con este módulo?

NOTA: revisa el apéndice para ver cómo usar el módulo cadena ordenar(cadena a) en Java ;)

16

Page 18: Main

2.2.12. Concursos por sms (10pts)

¾Alguna vez participaste en un concurso mediante SMSs? Consisten en enviar un mensaje de textocon alguna palabra, a un número 'x'. El número 'x' suele tener 4 dígitos.

Las empresas que realizan estos concursos, suelen elegir números que sean fáciles de recordar. Paraconseguir esto, aprovechan el hecho de que el teclado de los celulares y de los teléfonos, le asigna acada número 3 ó 4 letras, como en la imagen, e intentan que las letras del número que eligen, armenuna palabra.

Por ejemplo, para formar la palabra UMSA, elegirían el número 8672.

Haz un algoritmo que, dada una palabra de 4 letras, te indique el número que la empresa eligiríapara dicha palabra.

EJEMPLO:

INPUT:

CODE

LIVE

DAMN

UMSA

MONO

OUTPUT:

2633

5483

3266

8672

6666

17

Page 19: Main

2.2.13. ¾Qué es Criptoanálisis? (20pts)

Este algoritmo ha sido traducido del problema 10008 - What's Cryptoanalysis? del juez virtual UVa.El tiempo límite es 3.000 segundos

Se le llama Criptoanálisis al proceso utilizado para romper"la encriptación de alguna informaciónque ha sido encriptada por alguien más. Este proceso, muchas veces, envuelve una especie de análisisestadístico del texto encriptado. Tu deber es escribir un programa que hace un análisis sencillo de untexto dado.

INPUT

Se te dará un número n, seguido de n líneas, cada línea contendrá una cadena de texto que podríao no tener espacios en blanco.

OUTPUT

Por cada letra t en el texto, debes escribir en una línea: esa letra t (en mayúsculas), seguida de unnúmero x que indica cuántas veces la letra t ha aparecido en cualquiera de las líneas que leíste.

EJEMPLO:

INPUT

3

This is a test.

Count me 1 2 3 4 5.

Wow !!!! Is this question easy?

OUTPUT

S 7

T 6

I 5

E 4

O 3

A 2

H 2

N 2

U 2

W 2

C 1

M 1

Q 1

Y 1

INPUT

1

iuuq :// ujuboqbe.dpn/sftfobt -jogpsnbujdb -vntb ; GVDL UIF TATUFN!

OUTPUT

18

Page 20: Main

B 6

T 5

U 5

F 4

N 4

D 3

J 3

O 3

G 2

P 2

S 2

V 2

E 1

I 1

L 1

Q 1

Z 1

NOTA: Si quieres que el juez virtual UVa te acepte este problema, deberás imprimir las letras enorden descendente según su aparición, y solo deberás contar las letras que pertenezcan al alfabeto inglés(27 letras, sin contar la ñ). Además, debería considerar las mayúsculas y las minúsculas como iguales.

2.2.14. El cifrado del César (20pts)

Uno de los métodos de encriptación más sencillos del cifrado clásico, es el cifrado de César, en elque se recorre el alfabeto n posiciones.

Por ejemplo, el INPUT del ejercicio 2.13, está encriptado con el cifrado de César, con 1 posición.

La siguiente tabla muestra las letras del abecedario (primera línea), y su equivalente en el cifradode César.

ESTA LETRA: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

EQUIVALE A: Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

Haz un algoritmo que, dada una cadena de texto 'A', que es un mensaje encriptado con el cifradode César, y un número 'n', que indica las posiciones que se recorrerá el alfabeto, que criptoanalise lacadena 'A', indicando el mensaje oculto.

NOTA puedes asumir que...

Puedes utilizar el código ASCII de los caracteres de la siguiente forma:

(int) 'a' = 97 (int) 'A' = 65 (int) 'f' = 102 'f' - 'a' = 5 ADVERTENCIA: pregúntale a tu docentequé opina sobre utilizar éste método antes de utilizarlo en tu examen ;)

19

Page 21: Main

Apéndice

20