Skip to content

Instantly share code, notes, and snippets.

@cronin101
Created July 20, 2012 12:18
Show Gist options
  • Select an option

  • Save cronin101/3150434 to your computer and use it in GitHub Desktop.

Select an option

Save cronin101/3150434 to your computer and use it in GitHub Desktop.
Fizzbuzztination
1.9.3p194 :001 > range = (1..20)
=> 1..20
1.9.3p194 :002 > fizz = ->(x){ "fizz" if x.modulo(3).zero? }
=> #<Proc:0x007febfc141140@(irb):2 (lambda)>
1.9.3p194 :003 > buzz = ->(x){ "buzz" if x.modulo(5).zero? }
=> #<Proc:0x007febfc137938@(irb):3 (lambda)>
1.9.3p194 :004 > fizz_list = range.map(&fizz)
=> [nil, nil, "fizz", nil, nil, "fizz", nil, nil, "fizz", nil, nil, "fizz", nil, nil, "fizz", nil, nil, "fizz", nil, nil]
1.9.3p194 :005 > buzz_list = range.map(&buzz)
=> [nil, nil, nil, nil, "buzz", nil, nil, nil, nil, "buzz", nil, nil, nil, nil, "buzz", nil, nil, nil, nil, "buzz"]
1.9.3p194 :006 > fizzbuzz_tuples = fizz_list.zip buzz_list
=> [[nil, nil], [nil, nil], ["fizz", nil], [nil, nil], [nil, "buzz"], ["fizz", nil], [nil, nil], [nil, nil], ["fizz", nil], [nil, "buzz"], [nil, nil], ["fizz", nil], [nil, nil], [nil, nil], ["fizz", "buzz"], [nil, nil], [nil, nil], ["fizz", nil], [nil, nil], [nil, "buzz"]]
1.9.3p194 :007 > fizzbuzz_list = fizzbuzz_tuples.map(&:join)
=> ["", "", "fizz", "", "buzz", "fizz", "", "", "fizz", "buzz", "", "fizz", "", "", "fizzbuzz", "", "", "fizz", "", "buzz"]
.9.3p194 :008 > string_or_number = ->(string, index){ string.length.zero? ? (index+1).to_s : string }
=> #<Proc:0x007febfc18ff70@(irb):18 (lambda)>
1.9.3p194 :009 > output = fizzbuzz_list.each_with_index.map(&string_or_number)
=> ["1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", "buzz", "11", "fizz", "13", "14", "fizzbuzz", "16", "17", "fizz", "19", "buzz"]
1.9.3p194 :010 > range.find_all(&fizz)
=> [3, 6, 9, 12, 15, 18]
1.9.3p194 :011 > range.find_all(&buzz)
=> [5, 10, 15, 20]
1.9.3p194 :012 > intersection = range.find_all(&fizz) & range.find_all(&buzz)
=> [15]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment