14 comentarios sobre “9ea9552db3343564a84bc2b3bf3d6529

  1. Pues después de probar y probar y probar a mano sin éxito llegué a la conclusión de que era mejor hacer un script para sacar el mensaje y desempolvar mis ruby skills.

    Os lo dejo para aquellos que no son muy buenos adivinando o los que piensan que «aquello que puede hacer una máquina que no lo repita el hombre».


    #!/usr/bin/env ruby

    require 'digest/md5'
    require 'pp'

    sergiomd5 = '9ea9552db3343564a84bc2b3bf3d6529'
    words = %w{felicidades feliz navidad 2008 año felices fiestas próspero nuevo y os deseo un una navidades }
    encontrado = ''

    # choose y append_all tomados prestados de semergence.com
    def choose(n, k)
    return [[]] if n.nil? || n.empty? && k == 0
    return [] if n.nil? || n.empty? && k > 0
    return [[]] if n.size > 0 && k == 0
    c2 = n.clone
    c2.pop
    new_element = n.clone.pop
    choose(c2, k) + append_all(choose(c2, k-1), new_element)
    end

    def append_all(lists, element)
    lists.map { |l| l << element }
    end

    (1...words.length).each do |n|
    choose(words,n).each do |msgarr|
    msgstr = msgarr.join(' ')
    # puts msgstr
    msgmd5 = Digest::MD5.hexdigest(msgstr)
    # puts msgmd5
    if msgmd5 == sergiomd5
    encontrado = msgstr
    end
    end
    end

    print "El mensaje de Sergio Hernando para esta Navidad "
    if !encontrado.nil?
    puts "es:", encontrado
    else
    puts "quedará oculto para siempre"
    end

    Si alguien se aburre que incluya además la posibilidad de comprobar las mismas palabras en mayúsculas (todo, sólo la primera de cada palabra, la primera de la frase, etc.).

    Feliz año, Sergio.

  2. He mejorado un poco el script (aún es chungo pero tampoco estoy para muchos trotes…) y ahora también encuentra el mensaje de Ricardo :). También he reducido las palabras eliminando aquelas que me parecía que no iban a estar.

    Y además termina cuando los ha encontrado a los dos sin tener que pasar por todas las posibilidades.

    Os lo posteo por si alguien quiere conocerlo:


    #!/usr/bin/env ruby

    require 'digest/md5'
    require 'rubygems'
    require 'permutation'

    sergiomd5 = '9ea9552db3343564a84bc2b3bf3d6529'
    rickmd5 = '96aa01f0c3679071e28fce43e058fc6f'
    #words = %w{felicidades feliz navidad 2008 año felices fiestas próspero nuevo y os deseo un una navidades }
    words = %w{feliz navidad 2008 año felices fiestas próspero nuevo}
    encontradosergio = ''
    encontradorick = ''

    # choose y append_all tomados prestados de semergence.com
    def choose(n, k)
    return [[]] if n.nil? || n.empty? && k == 0
    return [] if n.nil? || n.empty? && k > 0
    return [[]] if n.size > 0 && k == 0
    c2 = n.clone
    c2.pop
    new_element = n.clone.pop
    choose(c2, k) + append_all(choose(c2, k-1), new_element)
    end

    def append_all(lists, element)
    lists.map { |l| l << element }
    end

    def check_msg(msg, md5)
    msgmd5 = Digest::MD5.hexdigest(msg)
    if msgmd5 == md5
    return true
    end
    return false
    end

    def print_msg(name, msg)
    print "El mensaje de #{name} para esta Navidad "
    if msg != ''
    puts "es:", msg
    else
    puts "quedará oculto para siempre"
    end
    end

    catch (:found) do
    (1...words.length).each do |n|
    perm = Permutation.new(n)
    choose(words,n).each do |msgarrsrc|
    perm.map { |p| p.project(msgarrsrc) }.each do |msgarr|
    msgstr = msgarr.join(' ')
    # puts msg
    if check_msg(msgstr, sergiomd5)
    encontradosergio = msgstr
    elsif check_msg(msgstr, rickmd5)
    encontradorick = msgstr
    end
    if encontradosergio != '' and encontradorick != ''
    throw :found
    end
    end
    end
    end
    end

    print_msg('Sergio', encontradosergio)
    print_msg('Ricardo', encontradorick)

    Por cierto, Sergio, ¿alguna forma de insertar código en comentarios que quede bonito?

  3. chmeee,

    Yo creo que encerrando el código entre tags «code» debería verse algo, pruebo con tu código:


    #!/usr/bin/env ruby

    require 'digest/md5'
    require 'rubygems'
    require 'permutation'

    sergiomd5 = '9ea9552db3343564a84bc2b3bf3d6529'
    rickmd5 = '96aa01f0c3679071e28fce43e058fc6f'
    #words = %w{felicidades feliz navidad 2008 año felices fiestas próspero nuevo y os deseo un una navidades }
    words = %w{feliz navidad 2008 año felices fiestas próspero nuevo}
    encontradosergio = ''
    encontradorick = ''

  4. Pues no, no hace gran cosa. No debe estar definido en el CSS del theme el comportamiento de los tags «code».

    Sorry. ¿Qué resultados arroja el script para el hash de Ricardo? :D

  5. Ya había usado el <code> para los comentarios anteriores pero parece que sin un <pre> no queda indentado, aunque supongo que nada que un poco de CSS magic no pueda arreglar.

    Respecto al resultado del script, es el siguiente:

    feliz
    navidad
    2008
    año
    felices
    fiestas
    próspero
    nuevo
    feliz navidad
    navidad feliz
    feliz 2008
    2008 feliz
    navidad 2008
    2008 navidad
    feliz año
    año feliz
    navidad año
    año navidad
    2008 año
    año 2008
    feliz felices
    felices feliz
    navidad felices
    felices navidad
    2008 felices
    felices 2008
    año felices
    felices año
    feliz fiestas
    fiestas feliz
    navidad fiestas
    fiestas navidad
    2008 fiestas
    fiestas 2008
    año fiestas
    fiestas año
    felices fiestas
    fiestas felices
    feliz próspero
    próspero feliz
    navidad próspero
    próspero navidad
    2008 próspero
    próspero 2008
    El mensaje de Sergio para esta Navidad es:
    felices fiestas
    El mensaje de Ricardo para esta Navidad es:
    próspero 2008

    Un saludo

  6. Pues debe ser la códificación de caracteres para la tilde. Parece que Ricardo y Ruby usan la misma :).
    Lo siguiente es la salida del intérprete en línea de comando de ruby (puedes usarlo on-line si no lo tienes instalado en http://tryruby.hobix.com/)

    irb(main):001:0> require ‘digest/md5’
    => true
    irb(main):002:0> msg = «próspero 2008»
    => «pr\303\263spero 2008»
    irb(main):003:0> Digest::MD5.hexdigest(msg)
    => «96aa01f0c3679071e28fce43e058fc6f»

    Pensaba que era por el Unicode, pero el siguiente resultado me ha dejado confundido:

    irb(main):001:0> file = File.new(«p2008», «w»)
    => #
    irb(main):002:0> msg = «próspero 2008»
    => «pr\303\263spero 2008»
    irb(main):003:0> file.puts msg
    => nil
    irb(main):004:0> file.close
    => nil
    irb(main):005:0> quit
    $ md5sum p2008
    75848c93c1fef976ddc735ee6a1ce394 p2008

    ¿Ein? Así que me imagino que debe ser que hay diferencias en cómo tratan los caracteres unicode el md5sum y el digest/md5 en ruby. Lo he buscado pero no he encontrado nada al respecto.

  7. Ya está, parece ser que no es nada tan esotérico (yo y mis conspiranoias sobre las codificaciones de caracteres que me vuelven loco a veces). Es el \n de final de cadena.
    He aquí la prueba:

    $ echo «próspero 2008″|md5sum
    75848c93c1fef976ddc735ee6a1ce394 –
    $ echo -n «próspero 2008″|md5sum
    96aa01f0c3679071e28fce43e058fc6f –

    Vaya lo que va a dar de si una felicitación navideña :), quién lo iba a decir.

  8. ¡Vaya!, no había seguido la pequeña batalla entre chmeee, Sergio, ruby y las felicitaciones navideñas…me he divertido mucho…pero fue otro día ;-P

    ¡felices fiestas y próspero 2008 a los dos!

Comentarios cerrados.