Problem 206

jak na kogoś kto dopiero zaczyna przygodę z tym językiem jestem bardzo zadowolony z tego rozwiązania :slight_smile:

(1010101010..1389026624).step(10){|n| p n unless (n**2).to_s !~ /1.2.3.4.5.6.7.8.9.0/}

Hmm albo moja wersja ruby 1.9.1 jest zepsuta, albo twoje rozwiązanie daje bardzo dziwne wyniki.

PS Wyrzuca po prostu wszystkie liczby z twojego zakresu. Ruby 1.8 to samo.

fakt, nie załapało wykrzyknika. zamieniłem na unless. przed chwilą przetestowałem (ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux]) i działa podając ostateczny wynik. :slight_smile: dzięki za informację.

Może jest troche przytrze ale jest szybsze:

[code=ruby]#!/usr/bin/env ruby

tab_x0 = (28…9999).select do |t|
xx = tt100
d0 = xx%10
d2 = (xx/100)%10
d4 = (xx/10000)%10
d0 == 0 && d2 == 9 && d4 == 8
end
tab_x0 = tab_x0.collect { |t| t*10 }

tab_x1 = (10049…13893).select do |x|
xx = (x*x)/100000
d16 = (xx/10)%10
d18_19 = xx/1000
(d16 == 1 || d16 == 2) && d18_19 == 1
end

y = nil
x = nil
tab_x1.each do |x1|
xx2 = x1x1
tab_x0.each do |x0|
xx1 = 2
x1x0
xx0 = x0
x0
a = xx210000000000+xx1100000+xx0
xx = a/100000
d6 = (xx/10)%10
d8 = (xx/1000)%10
d10 = (xx/100000)%10
d12 = (xx/10000000)%10
d14 = (xx/1000000000)%10
d16 = (xx/100000000000)%10
if d6 == 7 && d8 == 6 && d10 == 5 && d12 == 4 && d14 == 3 && d16 == 2
x = x1*100000+x0
y = a
break
end
end
break if y
end

puts “x = #{x}, x^2 = #{y}”[/code]

możemy pominąć 0 na końcu

max = 19293949596979899 i = Math.sqrt(max).to_i while true res = i*i break if res.to_s.match(/1\d2\d3\d4\d5\d6\d7\d8\d9/) !=nil i-=1 end puts i.to_s + "0"