λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > cccCISccccCIScccCIYxSGSHaaCLgDLihhhDLDLgggDLTTGaaCLSGccbbbCLDLgggDLjggggDLSHDLTTGaaaCL Hello World!
なんかでた。理解を深めるため、命令を短くする。wikipedia の内容によるうと
L outputs a character to the screen
ということなので、最初に出現する L 以降を削除してみる。
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > cccCISccccCIScccCIYxSGSHaaCL H
予想通り、1文字だけ出力された。また、文字より数値を出力させた方がデバッグしやすいので
M outputs a number to the screen
の通り M を使う。また、レジスタ1,2は a, g でインクリメンタルできるらしい。
a adds 1 to register 1 g adds 1 to register 2
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > aM 0
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > gM 0⏎
全然変わらない。ということはレジスタ3が怪しい。
C sets register 3 to the value of register 1 D sets register 3 to the value of register 2
レジスタ3に値をセットするためには C か D を使えば良さそう。
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > aCM 1
G sets register 1 to the memory at the memory pointer S adds 1 to the register
が使えそうだとわかる。またフラグはメモリの先頭から始まっているらしいので
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > GCM 97
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > GCL a
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > GCLSGCL ac
解けそう。最後に適当に繰り返して終わり。
λ nc misc.2019.chall.actf.co 19600 Welcome to the AlphaBeta interpreter! The flag is at the start of memory. You get one line: > GCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCLSGCL actf{esolangs_sure_are_fun!}