まだとちゅう!
【1635:Welcome to 2nd festival!!】
太くなぞればよい. たくさん進むには再帰か数値がありそうだけど
距離を正確にしなきゃいけないのは1箇所だけで, むしろ曲がるのが厄介.
数値で自在に向きをつけるのが効率良さそう.
[24B]
a(X,T):ra(rssr,T-1)XXs
a(,25)a(,13)a(,29)a(,19)a(,27)
微妙に特殊な初項とかa(a())とかの可能性を秘めた形で書いたけど役立てられず.
【1636:strange UZU】
大きい方からでも小さい方からでもよい.
(6rsl)が1個, (5rsl)が2個, (4rsl)が3個, ... (0rsl)が7個.
これで原点に戻ってくるのは奇跡ですw
[28B]
b(X,T):Xsb(X,T-1)
a(T):b(lb(,T-1)r,8-T)ra(T-1)ra(8)
a(8)
片方は数値じゃなくてsXで育てる. ということは小さい方からやる.
[27B]
a(X,T):Xa(X,T-1)
b(X,T):a(slXr,T)lb(sX,T-1)b(,7)
b(,7)
1個の関数に押し込める.
[27B]
b(X,A,T):slXrb(X,A-1,T)lb(sX,T-1,T-1)b(,7,7)
b(,6,6)
終了判定と繰り返し回数の数値の減少をずらしてごまかす.
[26B]
b(X,A,T):slXrb(X,A-11,T)lb(sX,T,T-10)b(,70,61)
b(,70,61)
【1637:degenerated Starmie】
棒を立てるしか思いつかない. 無理やり1つの規則に乗せると
0,0,1,1,2,2,3,3,4,3,1,0
という数列が必要. min(1次関数,1次関数)というのりで実装したらいけた.
傾き1/2のやつと傾き3/2のやつを使っています (コードの数値では3/6と3/2).
[35B]
a(A,B):lsra(A-6,B-2)rsl
b(X,T):sXb(a(34-T,T-6),T-3)Xs
c:b(,35)lc
c
【1638:degenerated Starmie - another color - 】
境界は既出な形の星型. UZU的に大きくしていく. 最適化できた自信があまりない
けど簡単に縮むという気もしなかった.
[23B]
b:rsl
a(X):XXXXsa(rbsblXsbs)
a(l)
【1639:Batsu 3】
三角形はXXrXXでとればよさそう. 22歩進むのが大変.
と思いきや, 三角形パーツは10歩進むのにも使える. 2歩進めばよい.
[29B]
f(X):XXrXX
a:sf(f(f(sr)))lsr
b:aaaaalssab
b
5回, lss, 6回, ...という繰り返しを数値で実装.
[28B]
f(X):XXrXX
b(T):sf(f(f(sr)))lsrb(T-1)lssb(6)
b(5)
rとlがぶつかってるあたりを上手くできるといいんだけどねー. むずい.
おまけ:変なの. 実質最初の29Bと同じですね.
[29B]
f(X):XXrXX
a(X):sf(f(f(sr)))lsrXa(a(a(a(lssa(a())))))
a()
【1640:Batsu 4】
直接回収はつらいので再帰で育てる. どうせ4倍関数が要るので,
12歩は育てるんじゃなく4倍関数で進めばよい. あとは割と単純.
[30B]
f(X):XXXX
a(X):f(f(sXf(XrXl)rsX)f(sss)r)a(sX)
a(r)
【1641:classical 5 rensa】
最初は縦に棒を並べてました. 全然たりねー!
[36B]
t(X):XXX
a(T):sa(T-1)
b(T):la(10)rsra(T)l
t(rt(t(b(10))b(1)t(b(8))b(24))r)
全然足りないので方針変更. 数値じゃなくて4倍関数で挑戦.
正方形を回収する動きをaとすると, aaassssrssssaみたいに考えそうになるが,
最初を壁キックしてすべて左側で回収させるとパーツが減って一気に簡単になる.
[28B]
f(X):XXXX
a:f(f(lf(s)l)s)
f(aaararsaaalal)
こうなったらXXXYXYですよね. 改良.
[25B]
f(X,Y):XXXYXY
a:f(f(lf(s,)l,)s,)
f(f(a,r)sf(a,l),)
正方形8つも置いてて無駄だよなぁー, 4つにすると定義1個減るはずだし.
[23B]
f(X,Y):XXXYXY
f(f(f(f(,lf(s,)l)s,),r)f(f(s,),l),)
【1642:hop step and BIG jump!!】
再帰で0,2,4,たくさんっていうのを作ってみる.
[21B]
a(X,Y):XrXrXrra(XYYYss,XXX)
a(,)
部位固定でsolverで調べたがこの構文周りでは21Bが最善っぽいのにBestにならない不思議.
ほかの選択肢として3倍関数まわりで直接書いてみる.
当然sを増やしやすいように, まずはXsXsXを選択. したけど9倍したいわけじゃないので
単にsXsXsXを選択して書いてみる. この方法を選択したらあとはめっちゃ簡単で,
やってみるとすぐ21Bになって, すぐ20Bになるはずです.
[20B]
f(X):sXsXsXr
f(sr)f(f())f(f(f(f()l)l))
数値でも再帰でもないとは出題時は予想していなかった.
【1643:ROSE!!】
苦手系だが何とか. 7,3,1,(0)っぽい. 7の場所, 7の次に3が来れる場所を調べる.
7 (3のパターン) l 7 l 7 (3のパターン) l 7 l みたいな感じでとらえる.
[22B]
f(X):XX
a(X,Y):Ya(sXrX,f(f(f(XYX)l)))
a(l,)
【1644:katamari to juji】
これも苦戦した. XXrXというヒントがあるのでそれにいろいろいれて移動してみる. 最後は繰り返し.
f(sss)f(f(f(s)))までは良い感じだけど, 後半がいまいちしっくりこない.
26Bで並んでるしこれで想定解なのかなー. まだ縮んでも不思議ではない気がする.
[26B]
a(X):XXrX
c:a(sss)
b:ca(a(a(s)))a(srs)cssb
b
【1645:find some function】
普通の26B.
[26B]
f(X):XXX
x:sr
a:xf(s)
b:ax
f(f(f(babba)xb)a)
srとsssばかり出てくる. この2つを上手くならべればよい. 12B構文的な並びを模索.
個人的に普段「再帰/数値/関数」みたいに呼び分けているのですが, 「再帰関数/数値関数」なわけで.
しばらく数値関数は選択肢に入ってなかったですw
[25B]
c(X):srsssXsr
f(T):c()c(f(T-127)c()c()c(f(T+T)))
f(40)
srとsssの12B構文だと半周までしか規則に乗らない. 無理やり打ち切って繰り返す.
[23B]
f(T,A):srf(T-29,A)sssf(T+17,A-1)f(22,39)
f(22,39)
f(T):srf(AT+B)sssf(CT+D), f(E)
は全部調べたけど無理. 12B構文の途中に不規則な何かを挟む構文を模索.
f(T):srf(T-A)sssf(T-X)f(T+B), f(C)
f(T):srf(T-A)f(T-X)sssf(T+B), f(C)
f(T):f(T-X)srf(T-A)sssf(T+B), f(C)
みたいなのが18Bだからワンチャンあるで!
いろいろ調整するが, なかなか似た形にすらなってくれない. さくっとプログラムを組んで調べる.
255^4個全部やっても5〜10分くらいあれば1構文チェックできます.
[18B]
f(T):srf(T-115)f(T-107)sssf(T+67), f(73)
f(T):srf(T-115)f(T-107)sssf(T+67), f(81)
f(T):srf(T-163)f(T-152)sssf(T+95), f(103)
f(T):srf(T-163)f(T-152)sssf(T+95), f(114)
f(T):srf(T-163)f(T-152)sssf(T+95), f(125)
5個出てきた. 想定解なのかな?解説はKtya先生にお任せします.
【1646:Nazo no Moyou!!】
とりあえずなぞってみる. 目でたどるだけじゃなくて, 文字におこしてみることも結構大事.
[58B]
a:sssrsssrsrsrsssrsss
b:ssrsssrsrsrsssrssr
c:abbla
d:scscrcscs
drd
[41B]
b:ssrsssrsrsrsssrss
c:sbsbrbsbs
d:scscrcscs
drd
おや?
[21B]
f(X):sXsXrXsXs
d:f(f(f(srs)))
drd
[19B]
a(X):XrX
f(X):sa(XsX)s
a(f(f(f(a(s)))))
再帰に乗せる.
[20B]
f(X,Y):rXrXf(YXsXrXsXY,s)
rf(,)
[18B]
f(X,Y):rXrXf(sYrYs,XsX)
rf(,)
向きの不満は逆にたどることで解決. 面白い.
[17B]
f(X,Y):lXlXf(sYlYs,XsX)
f(,)
【1647:Meiro】
無理でした. 一応わからないなりには頑張りました.
[38B]
f(X):rsXsXsXl
lf(rsf(f()s))f()rf(ssf()r)ssf()lf()slf()lf()rf()f()s
[36B]
f(X,Y):rsXsYXsXlY
lf(rsf(f(,)s,),)f(,)rf(ssf(,)r,)lf(,f(,)lf(,))rf(,)f(,)s
36B解のfがきもいですねー.
【1648:ta】
最初に解いたとき.
[30B]
a:scccrsr
c:lslsrsrslsrr
b:aaarrsb
b
大体3倍の3倍の4倍みたいになっていることを理解. 3倍にノイズを混ぜる感じ.
変数変換したり逆まわりを試したりパターンの境目を調整したりと大変でした.
[22B]
f(X):rXXXllsl
b:f(rsf(sf(sl))l)b
b
こんな感じでぐちゃぐちゃしてしまってつらかった.
[20B]
f(X):srXlXlX, d:f(f(f(s)rs)rs)d, d
f(X):srXlXlXr, d:f(f(f(s)s)s)ld, d
f(X):srXslXslXsr, d:f(f(f()))ld, d
最後のやつが見栄えが綺麗だし想定解っぽいかなー?
【1649:cycle】
普通に原点に戻るUZUを育てる. UZUを置いたあとの曲がり方がやや不規則なのでよく調べる.
[18B]
a(X,Y,Z):ZYa(sX,XrYXl,rZ)
a(,r,)
最初なぜか19Bで並んでいましたね.
Yにl,rのどちらの方向を混ぜ込むか, Zにl,rのどちらをつけるか, ZY or YZ, など
変種はたくさんあり, 全部試したつもりで初期向きあわない19Bだなーと思っていたけど,
試し忘れがあったらしく, 日を改めて挑んだらあっさり縮みました.
【1650:Take no ha】
見た目のぐねぐね感とは裏腹に, 実に直線的なパーツ成長だった.
次の問題が解けて, それがヒントだろうと考えたけど考えたけど結構大変でした.
4 l (3のやつ) ll 4 (3のやつ) ll 4 l 4
みたいな感じで移動できそうで実装してみる:
[規則チェック用]
p(X,T):X
f(X):XX
a(X,Y,T):a(sX,XlYllXYllXlXll,T-1)p(YllYll,2-T)
a(,,6)
先端がちょっとずつ足りない. だけじゃなくてもうちょっと不思議な離れたやつも.
ここまで行ってからも結構悩みました. XrXlX的にやると, それぞれ長さ1,2のときに回収!
一番奥のやつが長さ2のときに回収するとはなかなか盲点で難しかった. 実装.
[22B]
a(X,Y):XXllXXa(YXXllYYl,sY)
a(,l)
XrXlXの行きと帰り2倍で書いたんですが, 2倍関数を入れてみてもどうも22Bにしかならない.
結論としては, 行きと帰りをまとめない方が短かったらしい.
22Bからの短縮もかなり悩んでしまいました.
[20B]
a(X,Y):XXa(YXYYlYXYYr,sY)
a(,l)
【1651:Icho no ha】
対称性に注意して移動を考えると,
4 (l,r) 7 (l,r) 5
みたいな感じっぽい. 4,7,5って何やねん!っていうことですが,
19Bとやたら短い解が既に出ていたことをヒントに考えると,
4 (l,r) 4 + 3 (l,r) 3 + 2
となっているんじゃね?ってなって, 区切りが違っていたことが発覚.
[規則チェック用]
b(X,T):X
a(X,Y,T):b(YrrY,2-T)a(sX,XlXYllXXYllXlXll,T-1)
a(,,6)
ちょっとずつ足りませんがな. "Take no ha"と同じ原理なんだけど,
先に解いたこっちはなぜかあまり悩まなかった.
パーツを置くのは十字の左右だが, 十字全体を描くように.
移動は全部XlX的な移動なので, a(X):a(sXs), a(l)的に育てます.
[19B]
a(X,Y):YYa(sXs,XYXllXYX)
a(l,)
【1652:Castle】
13,8,5,3,2,1,1.
Fibonacciを左右に分岐させて並べていけばよい.
0,1,1,2,3,...
0のところがあるので初期向きをごまかせるという例のあれ.
[19B]
a(X,Y,Z):Xlla(YrXXrY,YZ,Y)
a(,,s)
【1653:Arrow】
「14Bくらいなら, とりあえずSolver動かしながら考えよう」「あーすぐ出てた」.
[14B]
a(X):XXXXa(srsXrs)
a()
13B以下も一通り調べてなかったのでこれで.
【1654:Batsu 5】
極限で「両側に棒を立てて真ん中に戻る」を作る. ちょっと太く.
[18B]
a(X,Y):Yla(lsrsX,XrssrY)
a(,)
srslYでSolverで部位固定探索.
[17B]
a(X,Y):Xa(rYrsXr,srslY)
a(,)
1変数で16,15Bを少し調べてみる.
[16B]
a(X):Xa(lsrsXrXslls)
a()
[15B]
a(X):Xa(srslXrsXll)
a()
よくわからんのありますねー.
【1655:Square?】
わかりやすい. 先端を見ると,
2 l 2 r (1のとき) r 2 (1のとき) r 2
みたいな感じで育てていけばよさそう. 書いてみると1発OK.
[15B]
f(X,Y):YYYYf(sX,XlXrYXYXl)
f(,r)
【1657:Triangle?】
みんな大好き XXrXX / XrXXrX に釣られそうになるが, もっと単純だったw
[14B]
f(X):XrXXrX
f(f(f(f(f(s)))))
[14B]
f(X):XXrXX
f(f(f(f(srs))))
[13B]
a(X):XsrXra(sX)
a(sr)
【1658:Batsu 6】
極限で「両側に棒を立てて真ん中に戻る」を作る. 太く.
[21B]
a(X,Y):Yla(lsrsX,XrsssssrY)
a(,)
乱歩的なやつは知らない. 他のサイズで見つけたやつを十分理解して
適当に修正すればできかもしれないけどよくわかりません.
【1659:Hydrangea】
「31,15,1,3,7」というヒントがあります. 最初「31,15,137」と思って,
数値でわけわからん構文書かされる超鬼畜問題かと思ったw
個人的にはヒントなしの方が解きやすかったかもしれないw
確かに「31」のスペーシングと「137」のスペーシングでは後者の方が広いので別の数値かw
1,3,7,15,31ということで, (2x+1)という変換を繰り返すっぽいことに.
いずれにせよ4倍っぽいものが見えるので, 右下の4倍と左上の4倍の変形を調べると
すぐに分かるかもしれません. XXXXl or lXXXXみたいな感じで.
経路は正方形の逆回りがあるので注意しておくと微調整でつまずきにくいはず.
[19B]
f(X,Y):XrXrXrXf(XYX,rYl)
f(,s)
【1660:Wheat】
最適化できた自信なし.
謎増殖.
[34B]
f(X,Y):XXYYXYYYXYXYYYXYYXXYXYXYYY
f(,f(ss,r))
何となく綺麗だけど無理.
[30B]
c:ss
x:ccllc
y:cllcc
f(T):xlxrf(T-1)ylyr
f(16)
再帰.
[27B]
c:ss
f(A):Af(ccllclclAllclcllccr)
f()
結局は1パーツ作って繰り返す方が短く済みそう.
[26B]
a:ss
b:aallalarararraarrarab
b
中パーツを作ってみる.
[21B]
a:ssl
b:arala
c:bbaalbarc
c
パーツ+移動の2倍として書いてみる.
[21B]
f(X):XrXrss
x:f(f(f(f(l))f()f(l)r))f()x
x
結構巧くできたけど, パーツ自体が歩数が多い分, 回収効率では補いきれない.
歩数を絞った状態で圧縮をしましょ. そういえばssXr, ssXlまわりやってなかったわww
[20B]
f(X):ssXl
x:f(f())f()
b:xf(rf()f())xf(b)
b
単純だった. もっと短いのあるかもしれないけどよくわかんねー.
l, ssを配置して周期的に繰り返す
a(T):la(AT+B)ssa(CT+D), a(E)
みたいな構文も考えてsolverかけたけど出てこず.
【1661:Batsu 7】
25Bとか短すぎて無理ゲー.
まずはXsrslXで適当に. あまり最適化してないかも.
XXとsrslを別に定義した方が短かったかもしれない.
[32B]
f(X):XsrslX
c:f(f())
d:rrf()
f(f(rccf(f(rcf(f(lf(d)))d))dc))
まぁでも28B以下くらいを目指すには直接なぞるのは厳しそう.
再帰で育てる方針を模索.
2,3,6
0,2,3,6
0,*,2,*,3,*,6,
みたいな数列が欲しいのです:難しい.
数値で. 1.5, 3, 6, 12.
[31B]
g(X):XrX
x(T):g(s)lx(T-2)
a(X,T):Xa(g(g(x(T)Xlx(T))),T+T)
a(l,3)
2変数かけて0,2,3,6を実現.
srslが2箇所出てくるから定義しなきゃいけなくて残念.
[27B]
f(X):XX
b:srsl
a(X,Y,Z):Xa(f(f(YXY)l),YZb,Y)
a(,,b)
【1662:Batsu 8】
[32B]
srsから始めて適当に2倍したりXssrssXしたりして増やすと規則に乗ります.
[25B]
a:srs
g(X):XsasX
f(X):g(XrrX)
g(g(g(f(f(f(a))))))
再帰にしてみると縮んだ. 割と当たり前だが見落としていた.
[25B]
a:srs
g(X):XsasX
f(X):g(g(X))f(g(XrrX))
f(a)
【1664:Skyscraper】
L字4つが拡大して配置されている. 中央に戻らないのがよい.
外に出るのは当然srslよりssで. a(X):(4個繰り返し)ssa(sXs)にあわせて4倍の中身を作る.
この形でそれっぽい2倍関数で書けば普通に20Bになると思うけど案外Best者少ない.
[20B]
f(X):XX
a(X):f(f(rf(XrXl)))ssa(sX)
a()
[20B]
f(X):XX
a(X):f(f(rf(Xl)))ssa(sXs)
a(r)
【1665:The pattern of Arbok.】
長文. 結構たくさんのものを用意しないと書けなさそう.
ガチ書きより某方針の方が短いかもなー?
s,rs,rrs,rrrsを並べます.
[下書き1]
b:srslsrslsrsslsrslsrsslsrslsrsssr
c:sslsrsrslslsrsrslslsrsrslsrslsrslsrsslsrsrrslsrsssslssrsrsssrsslslsllsslslsrsrslsrsrssrrsrslsrslslsrsrslsrsrssrrsrsslslsrslsllsssrslslsrss
d:rslslsrssrsrslslsslsllsslslsllsslslsllsslslsrsrssrsrrssrsrsrrssrsrslsrsssrslsrrsrslssrslsrslslssrrslsrssrslslsrsrslslsrsrslsssrs
e:slsrslsrslsrslsrsrssrsrrssrslsrslsrsrrssrslssslslssrsrslsrssrsrsrrsrsss
f:ssssrslsssrsrssssrslsslslsrsrslslsrssrrsrslssrsrsrrsrsssssrsrsl
g:srsslsrslsrslsrslsrslsrslsrssrslsrslssrslsrslssrslsrsrssrslsrslsrslsrslsrslsrslsr
h:ssssrslsrslsrsssrrsrslslsrslsrslsrssrslsrslsrslslsrs
bcdefgh
細かく切って書かないとデバッグが大変です.
sの個数がなるべく少なくなるように書くのが良いです.
どの経路が一番少なくなるのかよくわかりません. 中央下の回収して戻るところで
10歩くらい必要になり, 他の場所の往復よりロスが多いという仮説を立ててこんな経路に.
次に, つなげて1行にしたあと, lをrrrに置換, rrrrを消します.
[変換前]
srsrrrsrsrrrsrssrrrsrsrrrsrssrrrsrsrrrsrsssrssrrrsrsrsrrrsrrrsrsrsrrrsrrrsrsrsrrrsrsrrrsrsrrrsrssrrrsrsrrsrrrsrssssrrrssrsrsssrssrrrsrrrsrrssrrrsrrrsrsrsrrrsrsrssrrsrsrrrsrsrrrsrrrsrsrsrrrsrsrssrrsrssrrrsrrrsrsrrrsrrsssrsrrrsrrrsrssrsrrrsrrrsrssrsrsrrrsrrrssrrrsrrssrrrsrrrsrrssrrrsrrrsrrssrrrsrrrsrsrssrsrrssrsrsrrssrsrsrrrsrsssrsrrrsrrsrsrrrssrsrrrsrsrrrsrrrssrrsrrrsrssrsrrrsrrrsrsrsrrrsrrrsrsrsrrrsssrssrrrsrsrrrsrsrrrsrsrrrsrsrssrsrrssrsrrrsrsrrrsrsrrssrsrrrsssrrrsrrrssrsrsrrrsrssrsrsrrsrsssssssrsrrrsssrsrssssrsrrrssrrrsrrrsrsrsrrrsrrrsrssrrsrsrrrssrsrsrrsrsssssrsrsrrrsrssrrrsrsrrrsrsrrrsrsrrrsrsrrrsrsrrrsrssrsrrrsrsrrrssrsrrrsrsrrrssrsrrrsrsrssrsrrrsrsrrrsrsrrrsrsrrrsrsrrrsrsrrrsrssssrsrrrsrsrrrsrsssrrsrsrrrsrrrsrsrrrsrsrrrsrssrsrrrsrsrrrsrsrrrsrrrsrs
これをinput.txtに入れてa.exeを動かすと次の出力が得られます(笑)
s,rs,rrs,rrrsからなる4文字をf(1から255)という1つの数字に変換します.
コードを公開しちゃったら, この変換機を実装するのは易しいプログラミングの問題.
再帰のsolverより遥かに易しいので頑張ってください.
[変換後:138B]
a(T,X):X
b(N,T):rb(N,T-63)a(64-T,sb(N-1,T+T+T+T))
f(T):b(4,T)
g(A,B,C,D,E,F):f(A)f(B)f(C)f(D)f(E)f(F)
g(197,140,35,134,240,128)g(128,128,34,56,98,248)g(15,58,121,8,52,136)g(8,52,229,157,40,199)g(48,172,121,121,121,12)g(111,111,141,36,176,43)g(98,40,40,47,56,134)g(129,28,134,113,247,191)g(48,78,252,47,15,200)g(158,161,74,4,252,8)g(223,34,34,50,44,137)g(32,197,134,134,141,197)g(141,73,34,50,34,127)
今回はsを310個含んだコード. 単純に計算すると, (4個)がf(T)という2バイトに変化する計算ですが,
上のように準備をすると, (6個の数値)が(7バイト)に化けており, 最終的な圧縮率は(sを24個)が(7バイト)となっています.
sが310個ですと, 数値が78個必要. gの引数と変化させた場合, (関数定義) + (関数を並べる)で以下のバイト数になります:
引数2個:(a,b,fの定義28B) + (gの定義7B) + (本文117B) = 152B.
引数3個:(a,b,fの定義28B) + (gの定義10B) + (本文104B) = 142B.
引数4個:(a,b,fの定義28B) + (gの定義13B) + (本文95B+4B) = 140B.
引数5個:(a,b,fの定義28B) + (gの定義16B) + (本文90B+6B) = 140B.
引数6個:(a,b,fの定義28B) + (gの定義19B) + (本文91B) = 138B.
引数7個:(a,b,fの定義28B) + (gの定義22B) + (本文88B+2B) = 140B.
引数8個:(a,b,fの定義28B) + (gの定義25B) + (本文90B) = 143B.
下に行くほど圧縮率はかせげるけど関数準備に3バイトずつ増えていく.
引数4個のときは, 数値76個までを95個で並べたあとf(n1)f(n2)と4バイト足します.
引数8個のときは, 最後に2つダミーを入れて数値80個並べてしまいます.
そんな感じで今回はこの構文で138バイトが実現されました.
もうちょっと改善したくなりますねぇ.
例えばこれが「s305個」まで減らせたと仮定すると, 数値77個まで減るのですが,
実は数値が78個から77個まで減ったとしても, 必要バイト数は変化しません!
引数5個, 引数6個, 引数7個ともに138バイト止まりです.
これが304個になると, 引数5個で28+16+(90+2)=136Bが実現できます.
最初にsolveしたときは, sが314個で140バイトでした. これは結構惜しくて,
sを2つ削るだけで138バイトが実現できる状態です. 上手く経路を書きかえると縮むかも!?と期待できますね?
というわけで最終日に頑張って倒しました.
今回の138バイトは, 更新するにはsを6個以上削る必要があり, 結構つらいと見てここで終了.
「sの個数の最小化」と問題は割と単純なのですが..
ちなみに, 「s,rs,rrs,rrrsの並び全種類を1数値に」という方針では, 4文字止まりです.
255種類しか作れませんからね. 「本当は4つ並べるやつすべて」すら作れてないはずです.
どれが漏れてるんだっけなー, rrrsrrrsrrrsrrrsがくると対処不能になってるかも.
いざというときはr,lを入れ替えて変換しなおせば何とかなる?細かいことは忘れました.
ちなみに「s,rからなる7文字」を圧縮する変換機も持っていて, 直線が多かったり曲がる方向が割と固定されていると
役に立ちますが, 今回はr,l両方にたくさん曲がる必要があるため断念.
たぶん参考記事:■の下の方.
【1666:CAT S EYE】
jubeat knitでCAT'S EYE(LV7)に出てくる6個押し.
6個押しの直後に灰色の2個押しが出てくるので, そこを確実に避ける必要がある.
まぁ普通に上下に分けて押せばよい. ここよりも6+7+9+12+14+15の6個押しの方が
苦手でなぜかよくグレてた. LV7にしてはEXC難しい部類だったと思います.
それはさておき. 2倍関数使いたくなる.
f(X):XX, a:正方形として,
f(f(f(arr)+移動)+移動)みたいな感じでやればいいと思うんだけど,
これで壁に邪魔されずに6個回収される位置関係があるといいなぁー.
ようは壁にめりこむ部分を最後にまわせればよい.
案1:f(f(f(rr右前の正方形)rssssssrssssss)ssssssrssssssr)
案2:f(f(rssssssrssssssf(rr右前の正方形))ssssssssssss)
上下に分けると思うと案2の方が自然なのに, なかなか案1しか出てこなかった.
というかどっちもなかなか出てこなかった. まぁ変わらないかも.
あとはパーツの実装. パーツを6歩移動でも使い回したい.
このくらい考えれば35Bくらいは簡単に切れるはず.
[34B]
f(X):XX
a:f(f(sf(rsr)))
c:rass
f(f(cf(sf(acr)rrs)c)lccr)
[30B]
f(X):XX
a(X):rf(f(f(f(sXr))s)s)
f(f(a()a()f(rf(a(s)a())r))f(la()))
30Bの微変更バージョンはいくつかあるけど29Bにはならない..
【1667:Nazo janai Moyou】
4倍の4倍みたいな. 正方形に丸がささっていますが, 丸と思わず
単純に拾いこぼしを回収してみる感じで縮みました.
[29B]
f(X):XssX
f(f(rf(f(f(f(rf()f()))f(rsr)f()rf()f(lsr)f(f())))))
戻る