これを見て自分でも書いてみた。schemeっちゅーかGaucheです。
元ネタはこれらしい。
書いてみたはいいけど、ドラクエ7やったことないのでよくわからん。ので、コマンドにして表示用のオプションも付けてみた。
% ./baroque 3 2 2 3 | head (0 0 0 1 1 2 2 3) (0 0 0 1 1 2 3 2) (0 0 0 1 1 3 2 2) (0 0 0 1 2 1 2 3) (0 0 0 1 2 1 3 2) (0 0 0 1 2 2 1 3) (0 0 0 1 2 2 3 1) (0 0 0 1 2 3 1 2) (0 0 0 1 2 3 2 1) (0 0 0 1 3 1 2 2)
% ./baroque 3 2 2 3 | wc 1680 13440 30240
% ./baroque -d 10 2 3 2 3 | wc 878 7000 15756
% ./baroque -g 3 2 2 3 < < V V
% ./baroque -g -r "(0 0 0 1 1 2 2 3)" 3 2 2 3 solve start. < < V V button 0 pushed. ^ ^ V < button 0 pushed. > > V ^ button 0 pushed. V V V > button 1 pushed. < < < > button 1 pushed. ^ ^ ^ > button 2 pushed. > ^ > V button 2 pushed. V ^ V < button 3 pushed. V > < ^ソースはこちら。
回転方向のリストdirectionsは循環リストにしているので、turn手続きでは常に現在の要素(方向)の次の要素を参照すれば良い。
% rlwrap gosh gosh> (use srfi-1) #make-button手続きは回転させる彫像のインデックスを渡してあげれば、それらの彫像を回転させる手続きを返してくれる。gosh> (define directions (circular-list 0 1 2 3)) directions gosh> (~ directions 0) 0 gosh> (~ directions 3) 3 gosh> (~ directions 4) 0 gosh> (~ directions 7) 3 gosh> (~ directions 100) 0 gosh> (~ directions 101) 1
探索手続きsearchでは常にrouteに経路を保存しつつ再帰しているので、routeの要素数を数えれば探索の深さがわかるため、routeの要素数が制限depth-limitに達したら止まる。
そう言えば今日はオライリーのLand of Lispの発売日らしいですね!amazonで予約しとりますがいつ届くのかなー。shiroさん翻訳らしいので、shiroさん節を楽しみにしています。
0 件のコメント:
コメントを投稿