パズルが面白そうだったのでVBとC#で書いてみた

数学パズル

3桁の数値とその数値を2乗した値の各数字が1から9までの数字で構成されるような3桁の数値をすべて求めるプログラムを作成せよ。

例えば 763*763=582169 となるが、これは、1,2,3,5,6,7,8,9 からなり、4が抜けているからダメ。

窓際プログラマーの独り言 -C#の話題を中心に:[Haskell

C#

var list = from x in Enumerable.Range(100,900)
where
(
from z in ((x * x).ToString() + x.ToString()).ToCharArray().Distinct() where z != '0'  select z
).Distinct().Count() == 9
select x;

VB

Dim list = From x In Enumerable.Range(100, 900) _
Where _
( _
From z In ((x * x).ToString() & x.ToString()).ToCharArray().Distinct() Where z <> "0"c Select z _
).Count = 9 _
Select x

最終的に生成される文字列が0を含んでいなくて、重複していなくて、9桁なら、問題の条件を満たすというロジックです。

追記:NyaRuRuさんに教えてもらったので、toCharArrayをなくすついでにいろいろといじったバージョン(C#のみ)

var list = from x in Enumerable.Range(100, 900)
where (x*1000000+x*x).ToString().Distinct().Where(s => s != '0').Count() == 9
select x;
Share