Snakes and rubies

by Gastón Ramos

Hace unos días que con Manuel Kaufmann (humitos) venimos comparando algunas cosas entre python y ruby, por simple curiosidad dado que son 2 lenguajes muy parecidos y que nos gustan mucho. Entonces se nos ocurrió escribir algunos problemas puntuales y sencillos para ver como los resuelve cada lenguaje, quiero aclarar que de ninguna manera queremos generar una guerra santa entre lenguajes ni mucho menos simplemente queremos divertirnos comparándolos. Entonces sin más vamos al grano, aquí va mi versión ruby de los ejercicios:

  1. Dado un array con nombres de persona eliminar los nombre que comienzan con “Pe”:
    irb(main):005:0> ["Pablo", "Raul",
    "Pedro", "Pepe", "Ariel", "TerePe"].delete_if{|n| n =~ /^Pe/}
    
    =>["Pablo", "Raul", "Ariel", "TerePe"]
  2. Verificar si el mismo array contiene el nombre “Raul”
     irb(main):006:0> ["Pablo", "Raul",
    "Pedro", "Pepe", "Ariel", "TerePe"].include?("Raul")
    
    => true
  3. Generar un string con todos los nombres unidos por “-”
    irb(main):009:0> ["Pablo", "Raul",
    "Pedro", "Pepe", "Ariel", "TerePe"].join("-")
    
    => "Pablo-Raul-Pedro-Pepe-Ariel-TerePe"
  4. Generar un segundo array con los nombres todos en minúsculas ordenado alfabéticamente
    irb(main):012:0> (["Pablo", "Raul",
    "Pedro", "Pepe", "Ariel", "TerePe"].collect{|n| n.downcase}).sort
    
    => ["ariel", "pablo", "pedro", "pepe", "raul", "terepe"]
  5. Desordenar el array:
    irb(main):016:0> ["Pablo", "Raul",
    "Pedro", "Pepe", "Ariel", "TerePe"].sort_by{ rand }
    
    => ["TerePe", "Pedro", "Raul", "Pablo", "Pepe", "Ariel"]
  6. Averiguar si la lista siguiente tiene números pares:
    irb(main):017:0> [1, 2, 3, 4, 5].any?{|x| x % 2 == 0 }
    
    => true
  7. Averiguar si toda la lista son números pares:
    irb(main):018:0> [1, 2, 3, 4, 5].all?{|x| x % 2 == 0 }
    
    => false
  8. Obtener el producto de una lista de números:
    irb(main):023:0> [1, 2, 3, 4, 5].inject{|x,n| x * n }
    
    => 120
  9. Obtener el factorial de 9999:
    irb(main):025:0> (1..9999).inject{|x,n| x * n }

    No voy a poner la salida del factorial por que es un número muuuuy….. largo pero lo pueden probar por uds mismos en el intérprete interactivo de ruby.

  10. Y por último averiguar si dos arrays son iguales:
    irb(main):002:0> [1, 2, 3, 4, 5].eql? [1, 2, 3, 4, 5]
    
    => true
  11. Todos los ejemplos se probaron con la versión 1.9 de ruby. Ahora para ver las versión python vamos a tener que estar atentos al blog de humitos