Итак, я делаю Project Euler, чтобы закрепить свои навыки в Ruby. У меня проблема № 4, которая гласит:
Палиндромное число читается так же
в обе стороны. Самый большой палиндром сделан
из произведения двух 2-значных
цифры 9009 = 91 * 99.
Найдите самый большой палиндром из
произведение двух 3-значных чисел.
Сначала я пытаюсь проверить свой код, используя информацию из первого абзаца. Я определил функцию палиндрома следующим образом:
def palindrome?(blah)
string = blah.to_s
string.reverse == string
end
Мой код выглядит так:
array = (90..99).to_a
array = array.map{|u| array.map{|y| u*y}}
array = array.sort
array = array.select{|u| palindrome?(u)}
puts array
Программа ничего не выводит. Если я сделаю следующее:
array = (90..99).to_a
array = array.map{|u| array.map{|y| u*y}}
array = array.sort
#array = array.select{|u| palindrome?(u)}
puts array
Я получаю длинную серию несортированных четырехзначных чисел, так что, думаю, она игнорирует сортировку. Наконец, если я просто сделаю:
#array = (90..99).to_a
#array = array.map{|u| array.map{|y| u*y}}
#array = array.sort
array = [7447, 9009, 3551, 2419]
array = array.select{|u| palindrome?(u)}
puts array
Я получаю 7447 и 9009, как и должен. Почему это происходит?
Я использую 1.8.6, потому что это единственная версия, доступная на этом компьютере с Windows.