jak na kogoś kto dopiero zaczyna przygodę z tym językiem jestem bardzo zadowolony z tego rozwiązania
(1010101010..1389026624).step(10){|n| p n unless (n**2).to_s !~ /1.2.3.4.5.6.7.8.9.0/}
jak na kogoś kto dopiero zaczyna przygodę z tym językiem jestem bardzo zadowolony z tego rozwiązania
(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. 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 = 2x1x0
xx0 = x0x0
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"