これは倉庫番パズルです。開始位置は次のとおりです。
___#
#___####_____#
#_#_#_##_#_!##
##______##_###
##__####_#_###
###__###__
終了位置は次のとおりです。
___#
#___####_____#
#_#_#_##_#_###
##____!__#_###
##__####_#_###
###__###__
次のキーシーケンスを使用して解決できます。
←←→↓↓←↑←←←←←←↓↓→↑←↑↑↑←←↓→↑→↓↓→→→→→→↓→↑↑↓↓←↓←↑→↑←←← ←↑←←↓→→→→→↓→→↑↑→↑↑←↓←←↓↓→↑←↑→→↑→→↓←↓←←↓↓→↑←←←←←←←↑ ↑←←↓→→↓→↓↓←↑←↑→↑↑←←↓→↑→↓↓←↓→↑→→→→→→↓↓←↑→↑←←←←←←→→→ →→→↑↑←↓→↓←↑↑→→↑→→↓←↓←→↑↑←↓←↓↑→→↓←↑←←↓↓↓→→↑↑↓↓←←↑↑→ ↓↑↑→↑→→↓←↓←↓←←↑↑→→↑→↓←↓↓←←←←↑←←↓→→→→→←←←←←↑↑←←↓→→ ↓↓←↑→→→→
以下は、キーシーケンスを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回適用され、関連するルールが!
再び表示されるまで繰り返し適用されます。右では!#_:_!#
、およびのいずれか!_:_!
が適用されます。左の場合、_#!:#!_
およびのいずれか_!:!_
が適用されます。
各移動後の位置については、リンクの出力を参照してください。