HackIt! 2010: Level 4. Solución

Realmente una prueba que superamos en menos tiempo que la anterior. Basta con un pequeño script o programa para solucionar. Yo me he decantado por esto último, algo quick & dirty en Java: un bucle recorre el fichero, guardando en una tabla hash el número de apariciones de cada carácter que aparece en el enorme texto que nos plantea el reto 4.

import java.util.*;
import java.io.*;
 
public class Lector {
     public static void main(String[] args) throws Exception{
 
            HashMap<Character, Integer> h = new LinkedHashMap<Character,Integer>();
 
           Scanner s = new Scanner(new File("level4"));
 
           while (s.hasNext()){
 
               String line = s.next();
               for (int i= 0; i < line.length(); i++){
                    if (h.get(line.charAt(i))!=null){
                        h.put(line.charAt(i), h.get(line.charAt(i))+1);
                    }else{
                        h.put(line.charAt(i), 1);
                    }
               } 
           }
               System.out.println(h);
     }
}

Es una tabla hash especial, una LinkedHashMap en concreto. Especial dado que al recorrerla quiero hacerlo en el mismo orden en el que inserté las claves. Si compilamos y ejecutamos el programa que os muestro en la imagen, aparece en los resultados un conjunto de caracteres con una única instancia en el texto. En orden: 8675309. Buscando en Google, la primera aparición de esa cadena es un artículo de la Wikipedia, indicando que es el nombre de de una canción del cantante Tommy Tutone. Y así llegamos al level 5.

6 comentarios en «HackIt! 2010: Level 4. Solución»

  1. ¿Qué os parecen las soluciones a los retos del HackIt’2010? ¿Queréis que siga comentando o mejor os dejo más tiempo para solucionar por vuestra cuenta? No sé, veo que las explicaciones tienen bastantes visitas, pero al no haber feedback estoy un poco confuso con respecto a cómo actuar…

  2. Parece complicado, no la resolución en sí, sino el hecho de llegar a la conclusión de que se soluciona de esa manera…

    A mi me parecen interesantes estas soluciones que pones, yo cuando saco un momento libre intento hacer alguno en el curro…estaba planteándome intentarlo con el HackIt de este año, pero viendo esto, igual me lo planteo y me dedico a otras cosas (como jugar al Age of Empires :P).

  3. ¡¡Increible!!

    A mí lo que me deja roto es la conclusión sobre qué hay que hacer. Vamos, que leyendo lo que hay que hacer («Busca el apellido del cantante y creeme que no es este.»), jamás hubiera llegado a la conclusión de que debía contar la cantidad de letras que hay en el texto. Ya no me preocupa tanto cómo conseguir la solución, sino cómo llegar a saber que había que contar las letras. ¿Dónde está esa pista?¿Cómo se puede llegar a esa conclusión?.

    Dime Juanan (por entendenderlo), ¿cómo llegaste a esa conclusión?

    Un saludo!

  4. @Ikarus: no es contar las letras, ojo! La idea es mostrar los dígitos que sólo aparecen una vez en el batiburrillo de caracteres que nos dan como entrada. Es decir, analizando a ojo de buen cubero el texto de entrada, alguien del grupo se dió cuenta de que algún carácter sólo aparecía una vez y la idea consecuente era: ¿cuáles son esos caracteres tan especiales que sólo aparecen una vez en todo el texto?

    De todas formas, esta prueba se parece mucho a otra de este reto:
    http://www.pythonchallenge.com/

    os animo a darle leña al Python Challenge porque aporta ideas muy interesantes que luego nos vendrán bien en otros HackIt! 😉

Responder a firehack Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.