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,),)