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.

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年06月06日 15:51