合計:5567メニューを編集KtyaのHOJの記録その2昔のやつ2023/7パソコン新しくしたついでにsolver動かしてみたりして久しぶりにログインした。数式系とsolve0人にちょっかい出すだけの人になってる。互除法に無理やり二倍関数を詰め込んで圧縮した。数種類のパーツを並べる手法でいいのないのかなあ。rsrrsrの無駄の解決と曲がるのが両立しなかったけど向き入れ込むだけでよかった。再度考えたが進捗なし。if文周りが下手っぽいんだけどいい感じにならない。パーツの成長に向きを入れ込んで1B圧縮。逆順でも縮まないなあ。47B解の5変数関数定義は1行のやつはパッと見よさそうだけど、曲がるためだけの変数を何度も書いていて無駄っぽいので、ビットカウント部を分離して関数を3個にしたら縮んだ。if文(i(X,Y):Yみたいなやつ)を一度しか使っていないのがいかにも無駄だけどなかなか微調整が効かないな。ヒントに倣ってパーツを追加したsolverをとりあえず作った。(2変数のYに指定したパーツを入れるだけ)検索したら22Bで引っかかったが、lrみたいなのが含まれてたので普通に20Bになった。経路はまあ予想外で人間的には解きづらいかなあ。長さの差が2の長方形をたくさん書く方針だったが、よく見たら正方形でもサイズがでかくなった時に隙間を取ってくれることに気づいてbestになった。cupは想定よりも数周期分多く実行した結果をmapにしがちだな。0から考えたらいけた。渦で挟んだのを無限に繰り返す方針。26の時は数値関数を使い倒してた。前つくったやつだと見逃してた。X+X+cのcが0になるので縮んだみたいな感じ。実行部分XXでも検索できるようにいじって検索。細かい調整がむずかった。今までは数値関数使いまわし。L字のパーツの縦育てるのと横育てるのを分割してあとは数値と向き調整。l+実行なのでまだ行けたりするのかな。この手の成長の調整が複雑なタイプは数値がよさそうなんだな。引いていき、2残るときに棒を立てる。num)を引いておいて対応する。引く過程で、1を引いてしまうとすべての数が2に行き着いてしまうため、2個前のものとペアにすることで処理していた。1回しか引かれないことを利用して、書き直した。組として以下のような変更をした。何度も引くことがなくなる。引いていき、結果が2になる」ことが同値なので、これで圧縮が効く。Xに入る数によっては途中経過が何度も2になるため、従来のコードと挙動が異なる。加えて、if文を二倍関数にすることでrsrrsrの無駄と引き換えに実行時間を(指数関数的に)増やす方法で圧縮した。「if文が無駄だなあ」と言っていたけど、ただ変数増やしてそこに入れればいいだけだった。向き+実行みたいになっていて、「逆順にしたら縮んだ」の仕組みを導入できていないので、そこ次第ではさらに縮むと思う。かってしまえばかなりシンプルなコード。答え登録したのが同じ日だ(11年も違うが)単独ベストが作問者というやつを狙撃したいけど、まあ当然難しいね。丁寧に書き下して、いい感じに再帰。絶妙な関数とか経路認識がありそうなものだけども。足すのではなく、n+1をn!回足すことにするとnの更新用の変数が減らせる。上の方針に加えてsnukeさんが紹介している変数の順序を変えてNLE回避するやつを適用。前から処理するからこういうことできるのか〜(脳死でコピペしてたため、自分にとっては新テクだったのは秘密)。n歩を中に入れて一行にするのは、従来の手法で保存用として使っている変数を削っている関係で無理だった。XsYsXを使ったらわりとあっさり46くらいになって、そこから使い回す部分の選択や経路に少し工夫。単独で喜んだら一瞬で抜き返されてなぜかテンションが上がってしまった。