読者です 読者をやめる 読者になる 読者になる

本履歴

購入した古本の履歴と時々プログラミング

プログラミングコンテストの練習

Puzzles for Hackers:スクリプトキディから大人のハッカーへ (IT Architects' Archive 知の連環)に載っていた覆面算をRubyで。

HACKER+HACKER+HACKER=ENERGY

一般の覆面算は総当りでやるしか無いのだろうけど、これは3*HACKER=ENERGYで両辺6桁の数なので、
HACKERを333333までループして、等式を満たすかをチェックしてみた。
答えが2つあって、なえなえ。美しくないなあ。

#HACKER+HACKER+HACKER=ENERGY
$digits=Array.new(10)
$e=0
$r=0
def is_hacker(n)
	r=0
	ret=true
	6.times{|i|
		r=n%10
		if $digits[r]
			ret=false
			break
		else
			$digits[r]=true
		end
		$r=r if i==0
		$e=r if i==1
		n/=10
	}
	ret
end

def is_energy(n)
	r=0
	ret=true
	6.times{|i|
		r=n%10
		case i
		when 2
			unless $r==r
				ret=false
				break
			end
		when 3
			unless $e==r
				ret=false
				break
			end
		when 5
			unless $e==r
				ret=false
				break
			end
		else
			if $digits[r]
				ret=false
				break
			else
				$digits[r]=true
			end
		end
		n/=10
	}
	ret
end

102345.upto(333333){|n|
	$digits=Array.new(10)
	puts n if is_hacker(n)&&is_energy(3*n)
}