【出典】https://twitter.com/c_oi/status/301346035094126593 https://twitter.com/c_oi/status/301346039590436864
【引用】「0~3の数字を2個ずつ使ってできる年月日は21世紀(2001/01/01~2100/12/31)の間に何日間あるでしょう?」
【出典】https://twitter.com/c_oi/status/301346035094126593 https://twitter.com/c_oi/status/301346039590436864
【引用】「0~3の数字を2個ずつ使ってできる年月日は21世紀(2001/01/01~2100/12/31)の間に何日間あるでしょう?」
remove1(E, [E|Tail], Tail).remove1(E, [X|Tail], [X|List]) :- remove1(E, Tail, List).permutation([], []).permutation(List, [H|Tail]) :- remove1(H, List, List1), permutation(List1, Tail).条件(L) :-permutation([0,0,1,1,2,2,3,3], L),L = [Y1, Y2, Y3, Y4, M1, M2, D1, D2],Y is (Y1 * 1000 + Y2 * 100 + Y3 * 10 + Y4),M is (M1 * 10 + M2),D is (D1 * 10 + D2),年の条件(Y),月日の条件(Y, M, D).年の条件(Y) :- 2001 =< Y, Y =< 2100.月日の条件(Y, M, D) :-月の日数(Y, M, Days),1 =< M, M =< 12,1 =< D, D =< Days.月の日数(_, 1, 31).月の日数(Y, 2, 29) :- 閏年(Y), !.月の日数(Y, 2, 28).月の日数(_, 3, 31).月の日数(_, 4, 31).月の日数(_, 5, 31).月の日数(_, 6, 30).月の日数(_, 7, 31).月の日数(_, 8, 31).月の日数(_, 9, 30).月の日数(_, 10, 31).月の日数(_, 11, 30).月の日数(_, 12, 31).閏年(Y) :- Y mod 4 == 0, (Y mod 100 \== 0 ; Y mod 400 == 0).?- setof(L, 条件(L), Ls), length(Ls, N).% N = 48