Snakes and rubies

Saturday, 19 aprilis , 2008

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

5 Responses to “Snakes and rubies”


  1. [...] Levanto el guante del desafío que plantea Gastón en su blog: juanjo@albus:~$ python Python 2.5.1 (r251:54863, Mar 7 2008, 03:41:45) [GCC 4.1.2 (Ubuntu [...]

  2. Manuel Says:

    Interesante. Yo hincho para humitos igual =P

    (el último ejemplo te quedo con letra más chica)


  3. [...] profundas y no que quede solo de palabras, asique decidimos escribir un par de post al respecto. Este es el primero de él, la respuesta de Juanjo y ahora tiro algunas diferencias entre [...]

  4. Dave Says:

    1. Dado un array con nombres de persona eliminar los nombre que comienzan con “Pe”:

    lista = ["Pablo", "Raul", "Pedro", "Pepe", "Ariel", "TerePe"]
    
    [x for x in lista if not x.startswith("Pe")] # => ['Pablo', 'Raul', 'Ariel', 'TerePe']
    

    2. Verificar si el mismo array contiene el nombre “Raul”

    "Raul" in lista
    

    3. Generar un string con todos los nombres unidos por “-”:

    "-".join(["Pablo", "Raul","Pedro", "Pepe", "Ariel", "TerePe"]) # => 'Pablo-Raul-Pedro-Pepe-Ariel-TerePe'
    

    4. Generar un segundo array con los nombres todos en minúsculas ordenado alfabéticamente:

    lista_lower = [x.lower() for x in lista]
    lista_lower.sort()
    lista_lower # => ['ariel', 'pablo', 'pedro', 'pepe', 'raul', 'terepe']
    

    5. Desordenar el array:

    import random
    random.shuffle(lista)
    

    6. Averiguar si la lista siguiente tiene números pares

    any([x % 2 == 0 for x in [1,2,3,4,5]])
    

    7. Averiguar si toda la lista son números pares:

    all([x % 2 == 0 for x in [1,2,3,4,5]])
    

    8. Obtener el producto de una lista de números:

    import operator
    reduce(operator.mul, [1,2,3,4,5]) # => 120
    

    9. Obtener el factorial de 9999:

    import math
    math.factorial(9999)
    

    10. Y por último averiguar si dos arrays son iguales:

    [1,2,3,4,5] == [1,2,3,4,5]
    

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.