Mukai Systems

A=B interpreter

Program

Description

A=Bという、難解プログラミング言語を題材にしたパズルゲームがある。これは、難解プログラミング言語A=Bのinterpreterである。

プログラムの各行は一つ以下の命令からなる。A=Bには、以下の命令がある。

A=B -- 入力に文字列Aが存在する場合、最初に現れる文字列Aを文字列Bに置換する。
A=(return)B -- 入力に文字列Aが存在する場合、文字列Bを返し、プログラムを停止する。
(start)A=B -- 入力が文字列Aで始まる場合、文字列Bに置換する。
(end)A=B -- 入力が文字列Aで終わる場合、文字列Bに置換する。
(once)A=B -- プログラム中にただ一度しか実行されない点を除いてA=Bに等しい。
A=(start)B -- 入力に文字列Aが存在する場合、最初に現れる文字列Aを削除して先頭に文字列Bを追加する。
A=(end)B -- 入力に文字列Aが存在する場合、最初に現れる文字列Aを削除して末尾に文字列Bを追加する。
# A -- 文字列Aはコメントと見做され無視される。

括弧を含む命令はキーワードといい、左辺と右辺にそれぞれ一つまで記述できる。例えば以下のような記述は有効である。

(start)A=(end)B -- 入力が文字列Aで始まる場合、最初に現れる文字列Aを削除して末尾に文字列Bを追加する。

プログラムは入力に対して実行可能な命令がなくなるまで先頭から繰り返し評価される。

詳しくはゲーム内のマニュアルを参照されたい。

Source code

Notes

2023年、久々に正月に帰省して暇を持て余していたときに没頭してしまった。結局80時間程度遊んだが2問解けなかった。

ただ解くだけではなく、指定した行数以内で解かなければならない実績があったが、これまた難易度が高くほとんど歯が立たなかった。

Examples

a, b, cからなる文字列のうち、最も少ない文字を返すプログラム。

# abbcc => a
# bacca => b
ba=ab
ca=ac
cb=bc
ab=x
xb=bx
xc=
x=(return)c
ac=(return)b
bc=(return)a

a, b, cからなる文字列が、回文か否か判定するプログラム。

# aaabaaa => true
# abb => false
aA=
bB=
cC=
(start)a=(end)A
(start)b=(end)B
(start)c=(end)C
A=X
B=X
C=X
XX=(return)false
=(return)true

先頭にhelloを付与するプログラム。

# aaa => helloaaa
# abc => helloabc
(once)=(start)hello

1と0からなる文字列を二進数と見做し、その値だけaを出力するプログラム。

# 10 => aa
# 1010 => aaaaaaaaaa
(start)1=(end)xa
(start)0=(end)x
ax=xaa
x=

More info

See also