Запуск метода fizzbuzz1 дает список из 100 членов с номерами от 1 до 100, где каждый кратный 3 заменяется на «fizz», каждый из которых равен 5 «buzz», и каждый кратна как 3 и 5 по «FizzBuzz»:Ruby Strings - разность между << и + =
def fizzbuzz1()
result = Array.new(100, "")
result.each_index do |index|
value = index + 1
result[index] += "fizz" if value % 3 == 0
result[index] += "buzz" if value % 5 == 0
result[index] = "#{value}" if result[index].size == 0
end
end
2.0.0-p195 :055 > fizzbuzz1
=> ["1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", ...and so on.
НО, переключая каждый +=
для <<
дает нечто неожиданное:
def fizzbuzz2()
result = Array.new(100, "")
result.each_index do |index|
value = index + 1
result[index] << "fizz" if value % 3 == 0
result[index] << "buzz" if value % 5 == 0
result[index] = "#{value}" if result[index].size == 0
end
end
2.0.0-p195 :057 > entire_fizzbuzz2_result = fizzbuzz2
2.0.0-p195 :058 > entire_fizzbuzz2_result[5]
=> "fizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzz"
Наиболее своеобразно, я также заметил, что если я вне линии: result[index] = "#{value}" if result[index].size == 0
дать:
def fizzbuzz3()
result = Array.new(100, "")
result.each_index do |index|
value = index + 1
result[index] << "fizz" if value % 3 == 0
result[index] << "buzz" if value % 5 == 0
end
end
2.0.0-p195 :062 > store_fizzbuzz3 = fizzbuzz3
2.0.0-p195 :063 > store_fizzbuzz3.reject { |each| store_fizzbuzz3[0] == each }
=> []
Что должно означать, что fizzbuzz3 возвращает массив 100 членов, где каждый элемент является тем же самым, и имеют характеристики:
2.0.0-p195 :066 > store_fizzbuzz3[1]
=> "fizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzzfizzfizzbuzzfizzbuzzfizzfizzbuzz"
2.0.0-p195 :067 > store_fizzbuzz3[1].size
=> 212
2.0.0-p195 :068 > store_fizzbuzz3[1].size/4
=> 53
И 53 является своим родом интересного номера в том, что это число целых чисел от 1 до 100, которые не делятся на 3 или 5 ... т.е. количество «чисел» в результате полностью функционирующего fizzbuzz1
вверху.
Что здесь происходит с <<
, может кто-нибудь дать мне небольшое пошаговое руководство?
ничего себе, кто бы знал. – akonsu
удивительный. Спасибо. – polpetti
не получил разницы между 'Array.new (100," ")' и 'Array.new (100) {" "}'? не могли бы вы больше помочь? –