Wie mehrere Enumeratoren oder „Aber was ist FizzBuzzBoozz?“ Voran
-
08-10-2019 - |
Frage
Dies ist eine eher unorthodoxe Art und Weise der klassischen FizzBuzz Übung zu tun , aber es ist nur das Problem zu veranschaulichen (und hey, es könnte schnell sein, wenn Sie auf eine Milliarde zu fizzbuzz wollen).
fizzer = ( Array.new( 2, '' ) << 'Fizz' ).cycle
buzzer = ( Array.new( 4, '' ) << 'Buzz' ).cycle
(1..100).each do |number|
fizzbuzz = fizzer.next + buzzer.next # this line is giving me problems.
puts ( fizzbuzz.empty? ? number : fizzbuzz )
end
Wie dieser Code verallgemeinern einen Hash wie zu akzeptieren {3 => 'Fizz', 5 => 'Buzz', 7 => 'Boozz'}?
Lösung
Erstellen Sie ein Array von Einseifen, Buzzers und Boozzers. Dann in der Schleife Anruf next
auf jeder fooer in diesem Array und dann die Ergebnisse mit inject
Summe:
# The sort is needed so it prints fizzbuzz, not buzzfizz
# (hashes being unordered and all)
fooers = the_hash.sort_by {|k,v| k}.map do |k,v|
( Array.new(k - 1, '') << v ).cycle
end
(1..100).each do |number|
fizzbuzz = fooers.map(&:next).inject(:+)
puts ( fizzbuzz.empty? ? number : fizzbuzz )
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow