PE #009 in J
「ピタゴラスの定理を満たす自然数 a < b < c の3つ組で a+b+c = 1000 なるものが唯一存在する.それを求め,3つの積を答えよ.」
ワンライナーにまとめてはいないけど.
{ (~. ^ each ((i.@>: each)@;/@(#/.~))) q: -: 5e5 +----+----+-----+------+------+-------+--------+ |1 1 |1 5 |1 25 |1 125 |1 625 |1 3125 |1 15625 | +----+----+-----+------+------+-------+--------+ |2 1 |2 5 |2 25 |2 125 |2 625 |2 3125 |2 15625 | +----+----+-----+------+------+-------+--------+ |4 1 |4 5 |4 25 |4 125 |4 625 |4 3125 |4 15625 | +----+----+-----+------+------+-------+--------+ |8 1 |8 5 |8 25 |8 125 |8 625 |8 3125 |8 15625 | +----+----+-----+------+------+-------+--------+ |16 1|16 5|16 25|16 125|16 625|16 3125|16 15625| +----+----+-----+------+------+-------+--------+ ((] , (0&< *. 1000&>))@(1000&+)@-@(, (5e5&%))@*/ each) { ((~.) ^ each ((i.@>: each)@;/@(#/.~))) q: -: 5e5 +---------+--------+--------+-------+-------+--------+---------+ | 999 1| 995 1| 975 1| 875 1|375 1 |_2125 0 |_14625 0 | |_499000 0|_99000 0|_19000 0|_3000 0|200 1 | 840 1 | 968 1 | +---------+--------+--------+-------+-------+--------+---------+ | 998 1| 990 1| 950 1 | 750 1|_250 0 |_5250 0 |_30250 0 | |_249000 0|_49000 0|_9000 0 |_1000 0| 600 1 | 920 1 | 984 1 | +---------+--------+--------+-------+-------+--------+---------+ | 996 1| 980 1| 900 1 |500 1 |_1500 0|_11500 0|_61500 0 | |_124000 0|_24000 0|_4000 0 | 0 0 | 800 1| 960 1| 992 1 | +---------+--------+--------+-------+-------+--------+---------+ | 992 1 | 960 1| 800 1 | 0 0 |_4000 0|_24000 0|_124000 0| |_61500 0 |_11500 0|_1500 0 |500 1 | 900 1| 980 1| 996 1| +---------+--------+--------+-------+-------+--------+---------+ | 984 1 | 920 1 | 600 1 |_1000 0|_9000 0|_49000 0|_249000 0| |_30250 0 |_5250 0 |_250 0 | 750 1| 950 1| 990 1| 998 1| +---------+--------+--------+-------+-------+--------+---------+ (1000-375)-200 425 +/ 200 375 425 1000 */ 200 375 425 31875000
追記:ワン(?)ライナーにまとめた.と言うか↑のコードの :-
は余分で,バグ.
なお整数方程式の定石*1,因数分解を使っている.すなわち (a-1000)(b-1000) = 500000 について,500000の素因数分解に従って整数解を列挙し,条件を満たすものを選んでいる.遅延ストリームがあれば効率アップだろうね.
([: */"1@x: ] ,"1 -~/@,&1e3"1)@((#~ </"1)@~.@,/"3@(>@((0:`] @. ((*./)@(1e3&> *. 0&<)))@(1e3&+)@(-"1)@(*/)@(>"1) each)@{@((;/@(|:@,: |.)@(, -) each)@(~. ^each (i.@>: each)@(;/)@(#/.~)))))@q: 5e5 +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|375 200|0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|200 375|0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|375 200|0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|0 |0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ |0|0|0 |0|0 |0|0|0|0|200 375|0|0 |0|0| +-+-+-------+-+-------+-+-+-+-+-------+-+-------+-+-+ (] */@x:@, -~/@,&1e3)"1@((#~ </"1)@~.@,/"3@(>@((0:`] @. ((*./)@(1e3&> *. 0&<)))@(1e3&+)@(-"1)@(*/)@(>"1) each)@{@((;/@(|:@,: |.)@(, -) each)@(~. ^each (i.@>: each)@(;/)@(#/.~)))))@q: 5e5 31875000
それにしてもだんだんpoint-free styleに慣れてきている自分が嫌だ.