Retos - 025: Potitos

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

Aportar una solución

Tu nombre (si quieres que aparezca):
Tu web/blog (si quieres que incluyamos un enlace a ella):
Tu e-mail (no se mostrará; si quieres que te avisemos cuando esté publicado):
¿Eres humano? ¿Cuánto es 2 más 3?
Lenguaje
Fuente:

// 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());
        }
    }
}