Alan's Automaton Workshop

Alan's Automaton Workshop

Not enough ratings
QCを両方満たす解答例 (終盤問題のみ)
By HAC
自分が解いたときの解答例です。QCを両方満たしたものを載せています。詰まったときにチラ見したり、解き終わった後に照らし合わせて楽しむのに使ってください。現在編集途中。後ろの方の難しい問題から追加していくつもりです。
   
Award
Favorite
Favorited
Unfavorite
3-6 3-term Sorter (720 / 41.7)
複雑性: 720 / 750
ステップ数: 41.7 / 48.8


トランジションの条件を細かく指定していないためエラー表示が出ているが、実行する上で問題ない。数字を羅列すると見づらくなるので、ここでは見やすさを優先している。

考え方は以下の通り、
3つの数字をI1~I3に書き写し、1づつ引いていく
0になったものから順に完了済みを記すスイッチを入れ、出力していく
右上のIincは、今いくつ数字を引いたかを記録するもの

他にもアプローチがあると思うので、もっと速かったりシンプルな作りにできるものがあるかもしれない
3-7 Brackets Remover (740 / 76.09)
複雑性: 740 / 790
ステップ数: 76.09 / 90.53


題材としてとてもおもしろい問題。解くのにかなり時間がかかった。

各機械の機能は以下の通り、
IpreB: 「(」の左に何個「x」と数字が続くか記録するカウンタ
Inow: 括弧内の何個目の項目を処理する必要があるかを記録するカウンタ
Icnt: 2-BでInowを使うときに内容をコピーする一時的なカウンタ
Cend: 括弧内の最後の項目を処理していることを記録するスイッチ

流れは以下の通り、
1.「(」までの文字列をすべて書き写す
このとき「(」直前に続く「x」か数字の個数をIpreBに記録
2.括弧内に入り、「+」が見つかるまですべて書き写す
3.「+」が見つかったら「)」の位置にシーク、Inowを1増やす
「+」ではなく「)」が見つかった場合、CendをONにする
4.「)」の位置にシーク後、「x」か数字が続く限り書き写す
5.「+」か空白が来ると、「+」を記録して「(」にシーク
6.IpreBの数だけ左にシーク、1に戻る

2.では、2回目以降Inowの数だけ右に「+」をシークする
3-8 Main Calculator (990 / 106.85)
複雑性: 990 / 1040
ステップ数: 106.85 / 149.95


この問題も面白い。乗算と加算で計算の優先度が異なるため、うまく処理する必要がある。
4-4 Verb Conjugator (560 / 51.15)
複雑性: 560 / 620
ステップ数: 51.15 / 51.9
4-5 Telegraph Code Translator (300 / 80.5)
複雑性: 300 / 340
ステップ数: 80.5 / 100.2
4-7 Grammer Checker (1080 / 710.53)
複雑性: 1080 / 1110
ステップ数: 710.53 / 725.86


アプローチが複数ありそうなので悩ましい問題。処理のループをどうするかに悩み、ループの終了条件の付け方にも悩んだ。

以下は処理の手順の大枠
INvocを使って単語を記号化する、ここまでは単純

次の処理は大きく2つに分かれる
1.Tnoteの言語記号をINgmrに入れて、変換が成り立つかどうかをチェック
a.6文字以内で変換が成り立った場合(変換成功)
変換した文字列ををTextに写し、次の言語記号の判定へ
b.7文字以上続いた場合(変換失敗)
読み始めまで戻して、最初の言語記号をそのままTextに写し、次の言語記号の判定へ
2.言語記号がなくなると、Textの内容をTnoteに写してループ

ループの終了条件として、Textの内容がTnoteより短くなっているかということを判定している
ただし、初回に限り文字列の変換が起こっても文字列が短くならない場合がある($N→$NP、$VI→$VPなど)ので、C2ndを使って2ループ目以降であることを条件に加えている

成功条件の判定には、$Sのみであるかということを判定
5-1 Book Cipher (360 / 65.75)
複雑性: 360 / 360
ステップ数: 65.75 / 65.75
5-2 Zig-Zag Cipher (520 / 141.3)
複雑性: 520 / 520
ステップ数: 141.3 / 148.14
5-3 One-Time Pad Cipher (510 / 120.35)
複雑性: 510 / 640
ステップ数: 120.35 / 122.35
5-4 Pawn's Move (1740 / 159.06)
複雑性: 1740 / 1820
ステップ数: 159.06 / 447.53


ステップ数で苦戦していたんですが、他の方のガイドにて着想を得て組み直しました。感謝。
5-5 Knight's Move (1840 / 275)
複雑性: 1840 / 2690
ステップ数: 275 / 351
5-6 Queen's Move (1550 / 596.33)
複雑性: 1550 / 1690
ステップ数: 596.33 / 627.53


A・Bで行と列ごとにコマがあるかないか判定し、空いている番号をテープに記録
Cで先程のテープから割り出した、縦横にコマのないマスから斜め十字方向に探索
Dで再帰処理。再帰処理は少し工夫をしている
Tcolでは候補から外れた行番号の位置には「$」で埋める
TcolBにコマを置いた行を順に記録し、再帰時には後ろからTcolに戻している
Trowは「$」を使わず、左右の移動だけで処理している

注意:D内の、2つめのマッパーM33では、TcolB→Icolとなっているが、
A~Hを0~7に対応させているので、ここだけ書き換える必要がある
5-7 Territory Analytics (840 / 425.8)
複雑性: 840 / 1360
ステップ数: 425.8 / 1295.3


問題を読み替えると、Bが見つかるまで領域を塗りつぶす問題ととれる
シンプルな塗りつぶし手段として、再帰で処理してみた
(個人的な好みとして、ステップ数よりダイアグラムのシンプルさを優先)

1. Aのマスから探索開始
2. 壁際かどうかをチェックしながら、上下左右方向に順に探索
3. このとき、進んだ方向を1~4でテープTdirに記録
4-1. 進んだ先が■かAなら、元の位置に戻って次の方向に
4-2. 進んだ先が空白なら、その位置にAを記す
5. 上下左右方向の探索ですべて壁かAなら、テープをさかのぼり、数字で書かれた方向と逆方向に戻る
6. 数字で書かれた方向の、次の方向へ探索
5-8 Maze Analytics (790 / 361.7)
複雑性: 790 / 137
ステップ数: 361.7 / 744.3


ほとんど5-7と同じ...というより、5-7がこの問題と同じ解法で解ける。
5-7との違いは、進むときに×を記録し、戻るときに記録した×を消すこと
5-7では、Aという記録がスクリーン上に残ったことで、塗りつぶしとなったが、
5-8では、記録した×を消すため、別経路で同じマスを踏むこともできる
1 Comments
Zero 16 Jun, 2023 @ 10:18am 
this is outdated