色々考えたのですが, 結局「目盛の消えたものさしのパズル」にしました.
1cmきざみで目盛のついている長さ6cmのものさしがあります. ところが,下のようにいくつかの目盛が消えて, 間に2つしか目盛が残っていません.
+-----------------------------+
| |
| | | |
+----+--------------+---------+
0cm 1cm 4cm 6cm
でも,このものさしがあれば,1cm から 6cm まで計れるのです.
目盛の間の長さのリストで表すことにすれば, このものさしは [1,3,2] というリストで表すことができます. この場合,以下のようになっているので,1cm から 6cm まで計れるといえます.
したがって,このパズルを一般化した問題は,次のようになります.
| ゴール | 答 |
|---|---|
| measure(6, 2, L) | no |
| measure(6, 3, L) | L=[1,3,2] など |
| measure(9, 3, L) | no |
| measure(9, 4, L) | L=[1,1,4,3] など |
| measure(13, 4, L) | no |
| measure(13, 5, L) | L=[1,1,4,4,3] など |
| measure(17, 5, L) | no |
| measure(17, 6, L) | L=[1,1,1,5,5,4] など |
runtime(G) :-
statistics(runtime, _),
call(G),
!,
statistics(runtime, [_,T]),
write('CPU時間 '), write(T), write(' ミリ秒'), nl.
runtime(_) :-
statistics(runtime, [_,T]),
write('CPU時間 '), write(T), write(' ミリ秒'), nl, fail.
使い方は,以下の通り.
?- runtime(measure(6, 2, L)).
% rlogin jube
% cd 解答プログラムのあるディレクトリ
% submit2 解答プログラムのファイル名
提出コマンド submit2 の詳しい説明は,以下のようにすれば表示されるので,
必ず見ておくこと.
% submit2
「submit2 -l」で提出者一覧(学番順),「submit2 -L」でCPU時間順の一覧が
表示される.