HOJコンテスト結果
snukeさん主催のHOJコンテストに参加させて頂きました。
せっかくなので思考過程を含めてコードを公開します。
0743[Welcome to my contest!] 10B
a(X):Xa(XXrs)
a(l)
既に10B解があったのでSolverに任せました。ごめんなさい。
0744[Ten thousand] 17B→13B
最初に思いついたコード
a(X,Y):Xa(X,Y-1)
a(a(a(s,5)l,7)l,5)
逆回りすれば全部5回繰り返しになることに気づいて、
a(X):XXXXX
a(la(a(s)r))
0745[Growing square] 16B
a(X):XXXXsrsla(sX)
a(sr)
誰もが考える単純なコード。best解の周り方は考えてたんだけど出来なかった。
0746[Halo] 23B→22B
とりあえず角の部分を回収してみようと思って書いたテストコードがこれ
a(X,Y):YYYYa(sX,XlXrXlXrrXrXlXrXl)
a(,)
残った部分を回収しようと思って書いたコードがこれ
a(X,Y):YYYYa(sX,XXrXrXrXXrXlXrrXrXlXrXl)
a(,)
ここで卍で回収できることに気づいて完成した23Bコードがこれ
a(X):XXXX
b(X):a(a(XllXXXl)r)b(sX)
b(l)
ここから結構苦戦。a(X):XrXとか色々やったけどうまくいかなかった。
最後の方向転換を最初に持ってくることに気がついて完成。
a(X):XX
b(X):a(a(a(a(a(rX)a(lX)r))r))b(sX)
b()
0747[8-way] 20B→19B
a(X,Y):XXXXa(YYrYrrY,ssY)
a(,r)
初見からWindmillシリーズにしか見えなかったので迷わず書いたコード
a(X,Y):XXXXa(YYrYrrY,sY)
a(,r)
普通にsYで行ける事に気がついて終了。14B乱歩は探索できないです・・・
0748[R4] 23B→22B→19B→12B→11B
a(X,Y):Xa(ssX,Y-1)Xに何かを付け足すだろうということは分かったので、
sが12個の時がポイントだと狙いを絞って試行錯誤。
a(X,Y):Xa(ssX,Y-1)rrX
b:a(l,7)rssb
b
変数bを消したい→aを繰り返しに再利用する→なんかssも付けてくれるラッキー
a(X,Y):Xa(ssX,Y-1)rrX
a(a(l,7)r,4)
結局乱歩
a(X):Xa(XssXr)
a(s)
0749[4STEP] 22B
凶悪問題。まずルートが分かるまでかなり悩んだ。最初にできたコードはこちら。
a(X):sb(Xb(b(ss))rX)lsa(sX)
b(X):XX
a(sr)
ここからひたすら1B縮める作業。一旦展開して、まずは妙なlを消してみる。
a(X):sb(sXrssssssssrXs)sa(sX)
b(X):XrX
a()
次にbにsを含めてみる。そのため変数も追加。
a(X):b(b(X,rssssssssr),r)a(sX)
b(X,Y):sXYXs
a()
なんとなくいけそうな気がするのでsを縮めてみる。
a(X):b(b(X,rb(b(,s),)r),r)a(sX)
b(X,Y):sXYXs
a()
結局23Bのままで詰んだ・・・が、逆に外側を展開してみる。
a(X):b(Xsrb(b(,s),)rsX,r)a(sX)
b(X,Y):sXYXs
a()
srb(b(,s),)rsを初期値として与えてやればa(X):b(X,r)a(sXs)という形になることに気がつく。
a(X):b(X,r)a(sXs)
b(X,Y):sXYXs
a(srb(b(,s),)rs)
bを更に有効活用して完成。
a(X):b(X,r)a(b(,X))
b(X,Y):sXYXs
a(b(r,b(b(,s),)))
0750[Big rice field] 34B→32B
無難にパーツを作って繰り返すだけ。
a(X,Y):srXXla(sXs,Y-1)srXXl
b(X):XXXX
b(b(a(rr,4)sr)r)
srXXlが2箇所あって嫌なのでなんとかする。
a(X,Y):b(srXXl,a(sXs,Y-1))
b(X,Y):XYX
b(b(b(b(a(rr,4)sr,),)r,),)