「AOJをPrologで挑戦」の編集履歴(バックアップ)一覧はこちら

AOJをPrologで挑戦」(2013/06/06 (木) 15:51:40) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

aojの0000~0003までをPrologで書いてみた。 AOJはPrologに対応しておらず答えア合わせはできないのでコードの正確性は不明。 入出力も適当に書いてある。 基本的な考え方だけあってれば自分的に正解みたいな感じとなっている。 main:-between(1,9,A), between(1,9,B), C is A * B, format('~d*~d=~d~n',[A,B,C]),fail. siwake([],M,[],[]):-!. siwake([X|Rest],M,[X|Downs],Ups):-M<X,siwake(Rest,M,Downs,Ups). siwake([X|Rest],M,Downs,[X|Ups]):-X=<M,siwake(Rest,M,Downs,Ups). q_sort([],[]):-!. q_sort([M|Rest],Re):-siwake(Rest,M,Downs,Ups), q_sort(Downs,ReDowns), q_sort(Ups,ReUps), append(ReDowns,[M|ReUps],Re). aoj1:-read(A),q_sort(A,Ans),[T1,T2,T3|Rest]=Ans,write([T1,T2,T3]). calc_keta(Z,N,N):-Z<10. calc_keta(Z,N,Ans):-9<Z,Z1 is Z//10,N1 is N+1,calc_keta(Z1,N1,Ans). aoj2:-read([X,Y]),Z is X+Y,calc_keta(Z,1,Ans),write(Ans). selects([],[]):-!. selects([],Y):-!. selects([X|Result],Data):-select(X,Data,Rest),selects(Result,Rest). check_delta([X,Y,Z]):-selects([X1,Y1,Z1],[X,Y,Z]),Z1*Z1 =:=X1*X1+Y1*Y1,!,true. aoj3:-repeat,read(XYZ),check_delta(XYZ),write('ok'),fail.
aojの0000~0003までをPrologで書いてみた。 AOJはPrologに対応しておらず答え合わせはできないのでコードの正確性は不明。 入出力も適当に書いてある。 基本的な考え方だけあってれば自分的に正解みたいな感じとなっている。 main:-between(1,9,A), between(1,9,B), C is A * B, format('~d*~d=~d~n',[A,B,C]),fail. siwake([],M,[],[]):-!. siwake([X|Rest],M,[X|Downs],Ups):-M<X,siwake(Rest,M,Downs,Ups). siwake([X|Rest],M,Downs,[X|Ups]):-X=<M,siwake(Rest,M,Downs,Ups). q_sort([],[]):-!. q_sort([M|Rest],Re):-siwake(Rest,M,Downs,Ups), q_sort(Downs,ReDowns), q_sort(Ups,ReUps), append(ReDowns,[M|ReUps],Re). aoj1:-read(A),q_sort(A,Ans),[T1,T2,T3|Rest]=Ans,write([T1,T2,T3]). calc_keta(Z,N,N):-Z<10. calc_keta(Z,N,Ans):-9<Z,Z1 is Z//10,N1 is N+1,calc_keta(Z1,N1,Ans). aoj2:-read([X,Y]),Z is X+Y,calc_keta(Z,1,Ans),write(Ans). selects([],[]):-!. selects([],Y):-!. selects([X|Result],Data):-select(X,Data,Rest),selects(Result,Rest). check_delta([X,Y,Z]):-selects([X1,Y1,Z1],[X,Y,Z]),Z1*Z1 =:=X1*X1+Y1*Y1,!,true. aoj3:-repeat,read(XYZ),check_delta(XYZ),write('ok'),fail.

表示オプション

横に並べて表示:
変化行の前後のみ表示: