#!/usr/bin/env ruby # =========================================== # palindrom.rb # ------------------------------------------- # Novejsi verze ;-) Upraveno: 20050217-000500 # Autor: Wejn # Licence: GPL # ------------------------------------------- # Ruby = http://www.ruby-lang.org/ # =========================================== dom = [0, 1, 2] # experimentalne zjisteno, ze pro (3..9) uz zadny neexistuje szi = 9 szo = 17 results = {} class Palindrom def Palindrom.generate(domain, size, &block) raise "No block given" if block.nil? gen(domain.map { |x| x.to_s }, size/2, size%2!=0, "", &block) end def Palindrom.gen(dom, half, odd, res, &p) if half > 0 dom.each do |x| gen(dom, half - 1, odd, res + x, &p) end else (odd ? dom : [""]).each do |x| p.call(res + x + res.reverse) end end end end Palindrom.generate(dom, szi) do |pal| mult = ((pal.to_i)**2).to_s results[pal] = mult if mult.size == szo && mult == mult.reverse end num = 0 results.sort.each do |k,v| num += 1 puts "#{k}: #{v}" end puts "Pocet: #{num}" =begin Vysledek: wejn@ns ~ $ ruby ./palindrom.rb 100000001: 10000000200000001 100010001: 10002000300020001 100020001: 10004000600040001 100101001: 10020210401202001 100111001: 10022212521222001 100121001: 10024214841242001 101000101: 10201020402010201 101010101: 10203040504030201 101020101: 10205060806050201 101101101: 10221432623412201 101111101: 10223454745432201 110000011: 12100002420000121 110010011: 12102202520220121 110020011: 12104402820440121 110101011: 12122232623222121 110111011: 12124434743442121 111000111: 12321024642012321 111010111: 12323244744232321 111101111: 12343456865434321 111111111: 12345678987654321 200000002: 40000000800000004 200010002: 40004000900040004 Pocet: 22 =end # vim: set et ts=4 :