Chapter6 Aftermath
6章はstart, end等のキーワードは全て使用禁止
単純な置き換え規則のみ(停止規則もナシ)で解かなければならない
6-1 Hello Again
challenge: 4 lines
code:6-1.a2b
b=a
c=a
aa=a
a=helloworld
6-2 Palindrome 2
a,b,cの3種の文字からなる2文字以上の入力文字列が回文ならtrue, そうでなければfalseと出力する
challenge: 24 lines
34 lines
code:6-2_34lines.a2b
# 文字移動用マーカー(_)を生成するためのマーカー(@)を生成
b=B@
c=C@
# a=...とすると最終結果の"false"中のaがまた変換されてしまうので回避する
aa=AA@@
aA=AA@
aB=AB@
aC=AC@
@a=A@@
# @は右端に貯める
# 例: abcba -> ABCBA@@@@@
@A=A@
@B=B@
@C=C@
# 移動用マーカー(_)の付いた文字を左に移動
A_A=_AA
B_A=_AB
C_A=_AC
A_B=_BA
B_B=_BB
C_B=_BC
A_C=_CA
B_C=_CB
C_C=_CC
# 移動してきた右端の文字と左端の文字を比較
_AA=true
_BB=true
_CC=true
_=false
# 左端の文字に移動用マーカー(_)を付加
A@@=_A
B@@=_B
C@@=_C
# 比較結果を集約(and)
truetrue=true
truefalse=false
falsetrue=false
falsefalse=false
# 文字列長が奇数の時に余る中央の文字と@、非回文の時に残る文字を消去
@=
A=
B=
C=
22lines
code:6-2_22lines.a2b
# 後ろの方で左端の文字をa=o, b=oo, c=oooにエンコードしている
# エンコードした文字を右に移動
oa=ao
ob=bo
oc=co
# 右端の文字と移動してきたエンコード済み文字を比較
# 一致したらtrue、不一致ならtrtrueueとする
# 行数短縮のためゴミ(o)が残るが最後に削除する
aoo=trtrueue
ao=true
booo=trtrueue
boo=true
bo=trtrueue
cooo=true
co=trtrueue
# 左端の文字をエンコードするためのマーカー(@)を移動
a@=@a
# b@=@b bから最優先で@を生成するのでこの行は不要
c@=@c
# 左端の文字をエンコード
@a=o
@b=oo
@c=ooo
# 左端の文字をエンコードするためのマーカー(@)を生成
b=@b
c=@c
aa=@aa
# ゴミを削除
o=
# 入力文字列中央に単独でaがあった場合エンコードされず残っているので消去
at=t
# at=truetでも良い
# "uetr"を消去する事でtrue(一致)とtrtrueue(不一致)のandを取る
uetr=
# trtrueueが残ったらfalseとする
trtrueue=false
13lines
code:6-2_13lines.a2b
b=sesefalfalsesefalfalfalse
c=sesesefalfalfalsesesefalfalfalfalse
sea=sesefalsefalfalse
ase=sefalsefalfalsese
aa=sefalsefalfalsesefalsefalfalse
falsesefalse=sefalfalsese
falsesesefalfalse=sesefalfalfalsese
falsesesesefalfalfalse=sesesefalfalfalfalsese
sefalsefalfalse=true
sesefalfalsesefalfalfalse=true
sesesefalfalfalsesesefalfalfalfalse=true
truese=se
sefal=
6-3 To B or not to B 2
challenge: 13 lines
13lines
code:6-3.a2b
b@=@b
c@=@c
@=_
_a=b_
_b=b__
_c=c_
___=__
__=
_=<
c<=<c
b<=<c
<=
a=@a