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

数学パズル
3桁の数値とその数値を2乗した値の各数字が1から9までの数字で構成されるような3桁の数値をすべて求めるプログラムを作成せよ。
例えば 763*763=582169 となるが、これは、1,2,3,5,6,7,8,9 からなり、4が抜けているからダメ。

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;