ECLiPSe CLP で解きました。
ほぼPure Prolog で、制約論理の述語は使用してません。
自分のマシンで約9秒。
プログラム:
:-lib(util). :-dynamic(cubic_sorted/2). go:- retractall(cubic_sorted(_,_)), between(1,1000000000000,I), CubicNum is I * I * I, digit_sort(CubicNum,Sorted), assert(cubic_sorted(Sorted,I)), findall(Num,cubic_sorted(Sorted,Num),NumLst), length(NumLst,NumLen), ( NumLen>=5-> sort(NumLst,NumLstSorted), [First|_]=NumLstSorted, CubeFirst is First * First * First, printf(output, "CubicNum %d ,Lst %w", [CubeFirst, NumLst]),nl, true ; fail ) . digit_sort(Num,Sorted):- num2lst(Num,Lst), msort(Lst,Sorted). % convert number to list(reversed) num2lst(0,[]):-!. num2lst(Num,[Dig|DigRst]):- Dig is Num mod 10, RestNum is Num // 10, num2lst(RestNum,DigRst).
コマンドライン:
?- time(go).
Yes (9.22s cpu)
標準出力:
<解答伏せます。>
Success, times: 9.218750s thread, 9.219+0.000s process, 9.224s real
コメントを残す