Por Nacho Cabanes
Nivel de dificultad aproximado (1 a 5): 2
"¡Javi! ¡Parece que éste tampoco le gusta!" se convirtió en cantinela habitual a la hora de la comida, antes de que el pequeño dejara definitivamente de comer potitos una tarde. Darle de comer era misión imposible; pese a la paciencia de sus padres, el niño había heredado el carácter cabezón del padre y mantenía la boca cerrada, inmune a los vuelos de la cucharita y a las monerías de quienes le rodeaban. Era necesario encontrar una solución.
Se les ocurrió que, quizá, el aparentemente caprichoso rechazo a los potitos se debía a algún ingrediente concreto. Comenzaron a anotar, cuidadosamente, todos los ingredientes de cada potito que le daban, junto con un comentario de si el pequeño se lo había tomado o no. Tras varios días, estaban convencidos de que podrían averiguar cuáles eran los ingredientes que no le gustaban, y así comprar aquellos potitos que fuera a comerse. ¿Puedes ayudarles a encontrarlos?
Entrada
La entrada estará compuesta de múltiples casos de prueba. Cada uno comienza con un número indicando el número de potitos que se han intentado dar al bebé (como máximo 25).
A continuación aparece una línea por cada potito. La línea comienza por SI: o NO: dependiendo de si el pequeño se comió o no el potito. Después aparece la lista de los ingredientes del potito separados por espacios. La lista se cierra con la palabra FIN, que no debe considerarse un ingrediente. Ningún potito tiene más de 10 ingredientes, y todos los ingredientes están compuestos por una única palabra de hasta 20 letras minúsculas.
La entrada acaba con un caso de prueba sin potitos.
Salida
Para cada caso de prueba se deben mostrar, en una línea, los ingredientes que no le gustan al niño, ordenados alfabéticamente y separados por espacio. Si todos los ingredientes le gustan, se dejará la linea en blanco.
(Asegúrate de que has leído las preguntas frecuentes antes de plantear tu solución)
Entrada de ejemplo 3 SI: patata maiz tomate FIN NO: patata puerro guisantes pollo FIN SI: tomate zanahoria puerro pollo calabacin arroz FIN 2 SI: tomate zanahoria pollo calabacin arroz FIN NO: tomate ternera puerro FIN 0 Salida de ejemplo guisantes puerro ternera
// Reto 25: Potitos // Ejemplo de entrada: // 2 // SI: tomate zanahoria pollo calabacin arroz FIN // NO: tomate ternera puerro FIN // Salida correspondiente: // puerro ternera // Nacho Cabanes, 04-Junio-2014 using System; using System.Collections.Generic; class Potitos { static void Main() { int cantidad = Convert.ToInt32(Console.ReadLine()); while (cantidad > 0) { List<string> aceptables = new List<string>(); List<string> noAceptables = new List<string>(); for (int i = 0; i < cantidad; i++) { // Leo línea y descompongo string texto = Console.ReadLine(); string[] detalles = texto.Split(' '); // Guardo los aceptables en una lista if (detalles[0] == "SI:") for (int j = 1; j < detalles.Length - 1; j++) aceptables.Add(detalles[j]); // Y los no aceptables en otra if (detalles[0] == "NO:") for (int j = 1; j < detalles.Length - 1; j++) noAceptables.Add(detalles[j]); } // Finalmente, elimino los aceptables de la lista de NO foreach (string comida in aceptables) if (noAceptables.Contains(comida)) noAceptables.Remove(comida); // Y ordeno, y muestro sin duplicados noAceptables.Sort(); if (noAceptables.Count > 0) Console.Write(noAceptables[0]); for (int j = 1; j < noAceptables.Count; j++) if (noAceptables[j] != noAceptables[j - 1]) Console.Write(" " + noAceptables[j]); Console.WriteLine(); // Y preparo la siguiente pasada cantidad = Convert.ToInt32(Console.ReadLine()); } } }
// Reto 25: Potitos // Potitos // Ejemplo de entrada: // 2 // SI: tomate zanahoria pollo calabacin arroz FIN // NO: tomate ternera puerro FIN // Salida correspondiente: // puerro ternera // Nacho, 05-Junio-2014 import java.util.Scanner; // Para entrada desde teclado import java.util.ArrayList; // Para ArrayList, claro import java.util.Collections; // Para ordenar ArrayList public class Reto25 { public static void main(String [] args) { Scanner entrada = new Scanner(System.in); int cantidad = Integer.parseInt(entrada.nextLine()); while (cantidad > 0) { ArrayList<String> aceptables = new ArrayList<String>(); ArrayList<String> noAceptables = new ArrayList<String>(); for (int i = 0; i < cantidad; i++) { // Leo línea y descompongo String texto = entrada.nextLine(); String[] detalles = texto.split(" "); // Guardo los aceptables en una lista if (detalles[0].equals("SI:")) for (int j = 1; j < detalles.length- 1; j++) aceptables.add(detalles[j]); // Y los no aceptables en otra if (detalles[0].equals("NO:")) for (int j = 1; j < detalles.length - 1; j++) noAceptables.add(detalles[j]); } // Finalmente, elimino los aceptables de la lista de NO for (String comida : aceptables) if (noAceptables.contains(comida)) noAceptables.remove(comida); // Y ordeno, y muestro sin duplicados Collections.sort(noAceptables); if (noAceptables.size() > 0) System.out.print(noAceptables.get(0)); for (int j = 1; j < noAceptables.size(); j++) if (noAceptables.get(j) != noAceptables.get(j - 1)) System.out.print(" " + noAceptables.get(j)); System.out.println(); // Y preparo la siguiente pasada cantidad = Integer.parseInt(entrada.nextLine()); } } }