Comment faire avancer plusieurs recenseurs, ou « Mais qu'en est-FizzBuzzBoozz? »
-
08-10-2019 - |
Question
Ceci est une façon de faire plutôt peu orthodoxe l'exercice de FizzBuzz href="https://stackoverflow.com/questions/437/what-is-your-solution-to-the-fizzbuzz-problem"> classique , mais il est juste pour illustrer le problème (et bon, il pourrait être rapide si vous voulez FizzBuzz à un milliard).
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
Comment généraliser ce code pour accepter un hachage comme {3 => 'Fizz', 5 => 'Buzz', 7 => 'Boozz'}?
La solution
Créer un tableau de fizzers, Buzzers et Boozzers. Ensuite, dans le next
d'appel en boucle sur chaque fooer dans ce tableau et résumer ensuite les résultats avec inject
:
# 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow