Miscelánea de Ejercicios

M1

Un emprendedor decidió subir el precio de su producto estrella por un porcentaje escogido. Pero entonces se dio cuenta que las personas dejaron de comprarlo en la misma cantidad. Entonces decidió hacer un descuento al precio actualizado por el mismo porcentaje. Sin embargo, al hacerlo el precio del producto no fue el mismo en el que comenzó.

Haz una función llamada aumentoDescuento que reciba un precio y un porcentaje, p de modo que 0 < p < 100, y devuelva el precio resultante después de aplicar un aumento por el porcentaje dado y a ese resultado aplicarle un descuento por ese mismo porcentaje.

assertEquals(93.75, aumentoDescuento(100, 25.0), 1e-4);
assertEquals(960.0, aumentoDescuento(1000.0, 20.0), 1e-4);
assertEquals(990.0, aumentoDescuento(1000.0, 10.0), 1e-4);

M2

Después del paso de un huracán, queremos un análisis de como se afectaron las cercas que rodean las casas de una población. Para tal efecto alguien hace un diagrama empezando por un poste al azar y escribiendo "#" si el poste no fue afectado y "-" si el poste fue afectado y va a tener que ser reemplazado.

Haz una función que reciba un diagrama válido y devuelva la mayor cantidad contigua de postes que deben ser reemplazados. Dado que las cercas son circulares y el inicio de un diagrama es aleatorio, el primer paso es modificar el String para garantizar que no comienza en un "-".

Por ejemplo si el diagrama es "#--#---#-#" la respuesta es 3 dado que hay 4 postes que no deben ser reparados, el espacio más grande está entre el segundo y el tercer poste y el espacio mide 3 postes.

Por ejemplo si el String inicial es "---###---" el primer paso debe ser transformar ese String a "###------" moviendo cada caracter "-" inicial de la cadena al final de la cadena.

Para este ejemplo la respuesta sería 6.

assertEquals(3, máximoHueco("#--#---#-#"));
assertEquals(5, máximoHueco("-----"));
assertEquals(0, máximoHueco("####"));
assertEquals(6, máximoHueco("###------"));

M3

Un día despreocupado ves una nota en un papel en donde está escrito el número 121, pero por alguna razón en vez de leerlo "ciento veintiuno" lo lees "un uno, un dos, un uno" y ahora escribes ese "número" 111211, ahora puedes hacer ese ejercicio nuevamente: "tres unos, un dos, dos unos" y al escribirlo sería "311221" y te das cuenta que podrías continuar así indefinidamente.

Haz una función que tome un String que contiene solo dígitos, y un número entero y retorne el String resultante después de aplicar el proceso antes descrito, la cantidad de veces indicada por el parámetro.

assertEquals("111211", selfDescribing("121", 1));
assertEquals("311221", selfDescribing("121", 2));
assertEquals("13212211", selfDescribing("121", 3));

M4

Queremos hacer un software que provea estadísticas de un torneo deportivo. En este torneo los partidos pueden tener 3 resultados para un equipo: ganar, empatar o perder. Cada uno de estos resultados los asociamos con un caracter: ‘O’, ‘-’ y ‘X’ respectivamente. Para visualizar los últimos 5 resultados podemos escribir un String así: “OO--X” que significa que sus últimos 2 partidos los gano, pero antes de esos partidos llevaba 2 partidos empatados y antes uno perdido. Los partidos más recientes tienen un índice menor en el String.

Haz una función que dado un String de 5 caracteres con los resultados de un equipo con la tendencia del equipo. La tendencia es el conteo de resultados iguales sin interrupción empezando desde el resultado más reciente. Por ejemplo en el ejemplo anterior la tendencia sería “2 ganados” porque el resultado más reciente es un partido ganado y a partir de ahí la cantidad de partidos ganados sin interrupción es 2.

Para las tendencias usa las palabras: “ganado, empatado, perdido” y en caso de que la tendencia sea mayor que 1, agrega una “s” a la palabra.

assertEquals("2 ganados", tendencia("OO--X"));
assertEquals("5 empatados", tendencia("-----"));
assertEquals("1 perdido", tendencia("X-XXX"));

© 2022 Carlos Obregón. This work is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0)

Scroll to Top