このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1357191974/712
#  以前どこかで見かけた問題だけど 
#  「デジタル式の時計をアナログ式に変換する」 
#  入出力サンプル 
#  http://ime.nu/codepad.org/XcWCtEF5 
#  目盛りをo、短針をX、長針をxで表す 
#  重なったときはXで表す 
#  ただし短針は最も近い目盛りを指すようにする 
# 
#  
#           X
#      o         o
#  
#   o               o
#  
#  o                 o
#  
#   o               o
#  
#      o         o
#           o
#  
#        (0時0分)
#  


時計板([_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11],
[['         ',_0,'         '],
['    ',_11,'         ',_1,'    '],
['                   '],
[' ',_10,'               ',_2,' '],
['                   '],
[_9,'                 ',_3],
['                   '],
[' ',_8,'               ',_4,' '],
['                   '],
['    ',_7,'         ',_5,'    '],
['         ',_6,'         ']]).


'デジタル式の時計をアナログ式に変換する。
目盛りをo、短針をX、長針をxで表す。
重なったときはXで表す。
ただし短針は最も近い目盛りを指すようにする。'(_時,_分) :-
        時計板(_0から_11までの変数ならび,_時計板),
        '目盛りをo、短針をX、長針をxで表す。
重なったときはXで表す。
ただし短針は最も近い目盛りを指すようにする。'(_時,_分,_0から_11までの変数ならび),
        時計板の表示(_時計板).

'目盛りをo、短針をX、長針をxで表す。
重なったときはXで表す。
ただし短針は最も近い目盛りを指すようにする。'(_時,_分,_0から_11までの変数ならび) :-
        '短針をXで表す。
ただし最も近い目盛りを指すようにする。'(_時,_分,_0から_11までの変数ならび),
        '長針はxで表す。
重なったときはXで表す。'(_分,_0から_11までの変数ならび),
        変数として残っている所にoを埋める(_0から_11までの変数ならび).

'短針をXで表す。
ただし最も近い目盛りを指すようにする。'(_時,_分,_0から_11までの変数ならび) :-
        '0分から29分までは短針の位置は本来の時の位置である'(_時,_分,_0から_11までの変数ならび),!.
'短針をXで表す。
ただし最も近い目盛りを指すようにする。'(_時,_分,_0から_11までの変数ならび) :-
        '30分から59分までは短針は次の時に移動する'(_時,_分,_0から_11までの変数ならび).

'0分から29分までは短針の位置は本来の時の位置である'(_時,_分,_0から_11までの変数ならび) :-
        _分 < 30,
        nth0(_時,_0から_11までの変数ならび,'X').

'30分から59分までは短針は次の時に移動する'(_時,_分,_0から_11までの変数ならび) :-
        _分 >= 30,
        _時_2 is (_時 + 1) mod 12,
        nth0(_時_2,_0から_11までの変数ならび,'X').

'長針はxで表す。
重なったときはXで表す。'(_分,_0から_11までの変数ならび) :-
        _分_1 is truncate((_分 / 12) + 0.5),
        分を埋める(_分_1,_0から_11までの変数ならび).

分をxで埋める(_分_1,_0から_11までの変数ならび) :-
        nth0(_分_1,_0から_11までの変数ならび,'x'),!.
分をxで埋める(_,_).

変数として残っている所にoを埋める([]).
変数として残っている所にoを埋める([o|R]) :-
        変数として残っている所にoを埋める(R),!.
変数として残っている所にoを埋める([_|R]) :-
        変数として残っている所にoを埋める(R).

時計板の表示(_時計板) :-
        forall(member(_行,_時計板),行を表示する(_行)).

行を表示する(_行) :-
        atomic_list_concat(_行,_表示行),
        writef('%t\n',[表示行]).