抽象書き換えチャレンジ(強盗)


9

これは、いくぶん的なような挑戦です。これは強盗のスレッドです。警官のスレッドはこちらです。

強盗

警官は抽象的な書き換えシステムを投稿します。あなたの仕事は、書き換えルールを適用して、ターゲット文字列にソース文字列から到達できるかどうかを証明することにより、提出をクラックすることです。(これを行うには、ソース文字列で始まりターゲットで終わる一連の書き換えルールをポストするか、これが存在するかしないかを数学的に証明します。)

詳細と定義については、警官のスレッドを参照してください。


やれ!私は間違った質問に賞金をかけました、これは警官の挑戦にあることを意味していました。したがって、誰かがランダムな賞金を獲得します。
Nathaniel

心配ありません。賞金を払い戻しました。
James

@DJMcMayhem:ええと... SE APIがこの質問を特集として掲載しているのはそのためですが、報奨金や締め切り日はありません。:oええと、ユーザースクリプトに入力検証を追加する時間です。
Ilmari Karonen

回答:


16

ジミー23013

これについては、逆に作業してみましょう。まず、数字をバイナリ表現に変換します。からVW626206555675126212043640270477001760465526277571600601に行きVW++__+_++__+____++_+_++_++_+++_++++_+__+_+_++__+___+_+____+___++++_+______+_+++___+__++++++________++++++____+__++_+_++_+_+_++__+_+++++++_++++__+++_______++______+ます。次に、我々はの逆を適用し続けるDCW:W+DW:W_なるまで、私たちはすべてのシンボルをクリアします。私たちの結果は今VDCDCDDDCDDCDCDDDCDDDDDCDCDDCDDCDCDDCDCDDCDCDCDDCDCDCDCDDCDDDCDDCDDCDCDDDCDDDDCDDCDDDDDCDDDDCDCDCDCDDCDDDDDDDCDDCDCDCDDDDCDDDCDCDCDCDCDCDDDDDDDDDCDCDCDCDCDCDDDDDCDDDCDCDDCDDCDCDDCDDCDDCDCDDDCDDCDCDCDCDCDCDCDDCDCDCDCDDDCDCDCDDDDDDDDCDCDDDDDDDCWです。次に、この文字列を一致させVD+C+Wます。つまりD、すべてのをすべてのの左側に移動しますC。これは、を逆にすることで実行できますDCC:CD。これを行うには、次のアルゴリズムを繰り返します。

  1. sのDブロックの右側にある最初のものを見つけますC
  2. Dをそのブロックの左側に移動します。
  3. Cs の数を2倍にします。

いくつかの計算を通じて、123 D秒と4638704741628490670592103344196019722536654143873 C秒になると判断できます(これはSEの回答に当てはまらないことに正しかったです...地球のすべての原子の状態として保存されている場合、これは当てはまらないでしょう結合:P)。

の逆を適用し続けるとV:VD、すべてDのを今すぐ取り除くことができるので、を取得しVCCC.......CCCWます。Vバックをに変換しYZます。今、私たちは持っていYZCCC.......CCCWます。

すべてのを取り除き、Cそれを次の形式にしたいと考えていますYAAA...AAABBB...BBBZW。幸いなことに、これは次の方法で行うことができます。まず、YB:Y587912508217580921743211回逆適用してを取得しYBBB.......BBBZCCC.......CCCWます。次に、次の一連の手順を繰り返します(ここで、[?*]は任意の数のを意味し?、必ずしもゼロより大きいわけではありません)。

  1. CZ:ZC取得するには587912508217580921743211回の逆適用Y[A*]BBB.......BBBCCC.......CCCZCCC.......CCCW
  2. CB:BC取得するために何度も逆適用Y[A*]BCBCBC.......BCBCBCZCCC.......CCCW
  3. 逆に適用AZ:ZしてAB:BCA何度も取得するY[A*]ABBB.......BBBZCCC.......CCCW

誘導を通じて、我々は我々が移動できることを確認BZ(前を除いてすべての道の端に組み合わせてW)、その後の数Asが数の587912508217580921743211分の1であるC7890127658096618386747843で私たちを残して、秒A秒。私たちは今持っていYAAA.......AAABBB.......BBBZWます。変換ZWに背中をU、その後、逆適用U:BUのみの2保つために多くの時間をB秒してから変換BBUするTと、あなたが今持っていますYAAA.......AAAT。次に、s の数が5の倍数よりも3大きかったため、T:AAAAAT何回も逆適用して取得できます。YAAATA

挑戦してくれてありがとう!


それはどこかに記載されていますか、それともデフォルトで逆適用が許可されていますか?
Weijun Zhou

2
@WeijunZhou Iの平均値は、適用した場合A:BABC与えBBC、それは逆の適用ことは明らかだA:Bとすると、BBC与えることができますABC。許可されていることは特に明記されていませんが、手順を簡単に逆にして「従来の」解決策を講じることができます。IMOに戻るのが簡単なだけです。
HyperNeutrino 2018年

たとえば、ルールが1つしかA:Bなく、逆適用が許可されていると記載されていない場合は、からBBCに移動できないと思いますABC。この特定のケースは異なる場合があり、別の方向に進むためのいくつかの方法があります。後で確認します。
Weijun Zhou 2018

2
@HyperNeutrino ^^
Weijun Zhou

1
これを因数分解するためにどのプログラムを使用しましたか、そしてどのくらいの時間がかかりましたか?
user202729 2018年

9

ボボクォック

与えられた文字列に対して、すべての文字(a = 0、b = 1、c = 2)を取り、それらを合計して、モジュロ3を取ります。次に、書き換えルールのいずれもその値を変更しません。ソース文字列の値は1で、ターゲット値は2です。したがって、ルールの組み合わせによってソース文字列がターゲット文字列に変換されることはありません。


9

Feersum

これは倉庫番パズルです。開始位置は次のとおりです。

          ___#
#___####_____#
#_#_#_##_#_!##
##______##_###
##__####_#_###
###__###__

終了位置は次のとおりです。

          ___#
#___####_____#
#_#_#_##_#_###
##____!__#_###
##__####_#_###
###__###__

次のキーシーケンスを使用して解決できます。

←←→↓↓←↑←←←←←←↓↓→↑←↑↑↑←←↓→↑→↓↓→→→→→→↓→↑↑↓↓←↓←↑→↑←←← ←↑←←↓→→→→→↓→→↑↑→↑↑←↓←←↓↓→↑←↑→→↑→→↓←↓←←↓↓→↑←←←←←←←↑ ↑←←↓→→↓→↓↓←↑←↑→↑↑←←↓→↑→↓↓←↓→↑→→→→→→↓↓←↑→↑←←←←←←→→→ →→→↑↑←↓→↓←↑↑→→↑→→↓←↓←→↑↑←↓←↓↑→→↓←↑←←↓↓↓→→↑↑↓↓←←↑↑→ ↓↑↑→↑→→↓←↓←↓←←↑↑→→↑→↓←↓↓←←←←↑←←↓→→→→→←←←←←↑↑←←↓→→ ↓↓←↑→→→→

以下は、キーシーケンスをsedコマンドに変換して適用するbashプログラムです。sedコマンドには、警官の回答で定義された書き換えルールを使用した置換コマンドと、文字列を変更しないラベル付けおよび分岐コマンドのみが含まれています。書き換えルールのみを使用してターゲット文字列を取得できることを確認します。

s="___##___####_____##_#_#_##_#_!####______##_#####__####_#_######__###__"
input=

while
    printf '\n%80s\n' "$s"|fold -w14
    read -n 1
    [ "$REPLY" = $'\e' ]
do
    read -n 2
    case "$REPLY" in
    [A)
        s="$(sed '
s:!:wLW_:
        :a
s:L:<<<<<<<<<<<<<:
s:#w<:w#:
s:_w<:w_:
s:_<:<_:
s:#<:<#:
s:#wW:wLX!:
s:_W:W_:
s:#W:W#:
s:_wW:!:
s:_X:X_:
s:#X:X#:
s:_wX:#:
        ta' <<<"$s")";;
    [B)
        s="$(sed '
s:!:_VRv:
        :a
s:R:>>>>>>>>>>>>>:
s:>v#:#v:
s:>v_:_v:
s:>_:_>:
s:>#:#>:
s:Vv#:!URv:
s:U_:_U:
s:U#:#U:
s:Uv_:#:
s:V_:_V:
s:V#:#V:
s:Vv_:!:
        ta' <<<"$s")";;
    [C)
        s="$(sed '
s:!#_:_!#:
        te
s:!_:_!:
        :e' <<<"$s")";;
    [D)
        s="$(sed '
s:_#!:#!_:
        te
s:_!:!_:
        :e' <<<"$s")";;
    esac
    input="$input${REPLY:1}"
done

echo "$input"

オンラインでお試しください!

オンラインで試してみてください(エスケープコードは削除されています)。

アップとダウン、!:wLW_または!:_VRvそれに応じて1回適用され、関連するルールが!再び表示されるまで繰り返し適用されます。右では!#_:_!#、およびのいずれか!_:_!が適用されます。左の場合、_#!:#!_およびのいずれか_!:!_が適用されます。

各移動後の位置については、リンクの出力を参照してください。


6

xnor

ルール1 x:xn ルール2 no:oon ルール3 nr:r ルール4ooooooooooo:

[X,Y]Y Xの実行を示すために使用します

からxn[o,A]r

  1. ルール2を適用したら x[o,2]n[o,A-1]r
  2. ルール2をもう一度適用する x[o,4]n[o,A-2]r
  3. まで適用oの間だnr0になり、私たちは持っていますx[o,2*A]nr
  4. ルール3を適用したら x[o,2*A]r
  5. 一度ルール1を適用しますxn[o,2*A]r

したがって、からxn[o,A]rを生成するアルゴリズムがありますxn[o,2*A]r

から始まる xnor = xn[o,1]r、アルゴリズムを10回繰り返します。ただし、10番目のループを除いて、ステップ4で停止しx[o,1024]rます。

ルール4を適用すると、これは1023 = 11 * 93 o秒をクリアし、を残しxorます。


2

VortexYT

F他の文字を作成/使用せずにを削除する方法はありません。したがって、使用する必要がありますI:Fターゲットに到達するための最後のステップとして。ルールは、I他の不要な文字なしで単一を与えないため、ターゲット文字列に到達できません。

同様に、ソースから逆方向にマッピングしようとすると、オプションがなくなるまでからFにしか到達できませんI


痛い、それは痛い。ただし、別の解決策があります...
VortexYT 2018年

@VortexYTああ、本当にありますか?うーん、知りませんでした。しかし、ええ、ターゲットは複数のステップをマップすることはできません。これは、おそらくこれを意図したよりも簡単にしました:P
HyperNeutrino

2倍正確に
VortexYT 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.