21世紀における0~3の数字を2個ずつ使ってできる年月日の個数

【出典】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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX