このディレクトリの索引

# 出典:: C/C++の宿題片付けます 127代目 #413 # # 演習 # 今日は友引の火曜日である。今日からN日後までに仏滅ではない日曜日が何日あるか求めるプログラムを作成せよ。 # 六曜:先勝,友引,先負,仏滅,大安,赤口 '日付の六曜・曜日を得る'(_8桁の日付文字列,_六曜,_曜日) :- '日付から整数の年・月・日を得る'(_8桁の日付文字列,_年,_月,_日), '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日を答えよ'(_年,_月,_日,_六曜,_曜日),!. '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日を答えよ'(_年,_月,_日,_六曜,_曜日) :- '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日'(2015,10,15,大安,木曜,_年,_月,_日,_六曜,_曜日). '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日'(_年,_月,_日,_六曜,_曜日,_年,_月,_日,_六曜,_曜日). '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年,_月,_日,_六曜,_曜日) :- '2015年10月15日以後の_年、_月、_日の六曜と曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年,_月,_日,_六曜,_曜日). '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年,_月,_日,_六曜,_曜日) :- '2015年10月15日より前の_年、_月、_日の六曜と曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年,_月,_日,_六曜,_曜日). '2015年10月15日以後の_年、_月、_日の六曜と曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年,_月,_日,_六曜,_曜日) :- [_年_1,_月_1,_日_1] @>= [2015,10,15], '翌日の六曜、曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年_2,_月_2,_日_2,_六曜_2,_曜日_2), '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日'(_年_2,_月_2,_日_2,_六曜_2,_曜日_2,_年,_月,_日,_六曜,_曜日). '2015年10月15日より前の_年、_月、_日の六曜と曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年,_月,_日,_六曜,_曜日) :- [_年_1,_月_1,_日_1] @< [2015,10,15], '翌日の六曜、曜日'(_年_2,_月_2,_日_2,_六曜_2,_曜日_2,_年_1,_月_1,_日_1,_六曜_1,_曜日_1), '2015年10月15日は大安の木曜日である。_年、_月、_日の六曜と曜日'(_年_2,_月_2,_日_2,_六曜_2,_曜日_2,_年,_月,_日,_六曜,_曜日). '翌日の六曜、曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年_2,_月_2,_日_2,_六曜_2,_曜日_2) :- 翌日(_年_1,_月_1,_日_1,_年_2,_月_2,_日_2), 六曜連鎖(_六曜_1,_六曜_2), 曜日連鎖(_曜日_1,_曜日_2). '前日の六曜、曜日'(_年_1,_月_1,_日_1,_六曜_1,_曜日_1,_年_2,_月_2,_日_2,_六曜_2,_曜日_2) :- 翌日(_年_2,_月_2,_日_2,_年_1,_月_1,_日_1), 六曜連鎖(_六曜_2,_六曜_1), 曜日連鎖(_曜日_2,_曜日_1). 六曜連鎖(先勝,友引). 六曜連鎖(友引,先負). 六曜連鎖(先負,仏滅). 六曜連鎖(仏滅,大安). 六曜連鎖(大安,赤口). 六曜連鎖(赤口,先勝). 曜日連鎖(月曜,火曜). 曜日連鎖(火曜,水曜). 曜日連鎖(水曜,木曜). 曜日連鎖(木曜,金曜). 曜日連鎖(金曜,土曜). 曜日連鎖(土曜,日曜). 曜日連鎖(日曜,月曜). 翌日(_年,12,31,_翌年の年,1,1) :- succ(_年,_翌年の年),!. 翌日(_年,2,29,_年,3,1) :- うるう年(_年),!. 翌日(_年,2,28,_年,3,1) :- \+(うるう年(_年)),!. 翌日(_年,_月,30,_年,_翌日の月,1) :- member(_月,[4,6,9,11]), succ(_月,_翌日の月),!. 翌日(_年,_月,31,_年,_翌日の月,1) :- member(_月,[1,3,5,7,8,10,12]), succ(_月,_翌日の月),!. 翌日(_年,_月,_日,_年,_月,_翌日の日) :- succ(_日,_翌日の日). うるう年(_うるう年) :- 0 is _うるう年 mod 400,!. うるう年(_うるう年) :- 0 is _うるう年 mod 100,!,fail. うるう年(_うるう年) :- 0 is _うるう年 mod 4. '日付から整数の年・月・日を得る'(_日付,_年,_月,_日) :- 日付から整数年を得る(_日付,_年), 日付から整数月を得る(_日付,_月), 日付から整数日を得る(_日付,_日). 日付から整数年を得る(_日付,_整数年) :- sub_atom(_日付,0,4,_,_年文字列), atom_number(_年文字列,_整数月). 日付から整数月を得る(_日付,_整数月) :- sub_atom(_日付,4,2,_,_月文字列), atom_number(_月文字列,_整数月). 日付から整数日を得る(_日付,_整数日) :- sub_atom(_日付,6,2,_,_日文字列), atom_number(_日文字列,_整数日).