이것은 sokoban 퍼즐입니다. 시작 위치는 다음과 같습니다
___#
#___####_____#
#_#_#_##_#_!##
##______##_###
##__####_#_###
###__###__
끝 위치는 다음과 같습니다.
___#
#___####_____#
#_#_#_##_#_###
##____!__#_###
##__####_#_###
###__###__
다음 키 순서를 사용하여 해결할 수 있습니다.
←← → ↓↓ ← ↑ ←←←←←←← ↓↓↓ → ↑ ← ↑↑↑ ←← ↓↓ → ↑ → ↓↓ →→→→→→→→→ ↑↑ ↓↓ ← ↓ ←← →→ ↑ ←←← ← ↑ ←← ↓ →→→→→→→ ↓ →→ ↑↑ → ↑↑↑ ← ↓ ←← ↓↓ →→ ←← ↑ →→ ↑ →→ ↓ ← ↓ ←←← ↓↓ → ↑ ←←←←←←←←← ↑ ↑ ←← ↓ →→ ↓ → ↓↓ ← ↑ ← ↑ → ↑↑↑ ←← ↓ → ↑ → ↓↓ ← ↓ → ↑ →→→→→→→→ ↓↓ ← ↑ → ↑ ←←←←←←←← →→→ →→→ ↑↑ ← ↓ → ↓ ←← ↑↑ →→ ↑ →→ ↓ ← ↓ ← → ↑↑ ← ↓ ← ↓↓↓ →→ ↓ ← ↑ ←← ↓↓↓↓ →→ ↑↑ ↓↓ ←←← ↑↑ → ↓ ↑↑ → ↑ →→ ↓↓ ← ↓ ← ↓ ←← ↑↑ →→ ↑ → ↓ ← ↓↓ ←←←←←←←←← ↓↓ →→→→→ ←←←←← ↑↑ ←←← ↓ →→ ↓↓ ← ↑ →→→→
다음은 키 시퀀스를 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
해당하는 경우 한 번 적용되며 관련 규칙이 !
다시 나타날 때까지 반복적으로 적용 됩니다. 권리 중 하나 !#_:_!#
와이 !_:_!
적용됩니다. 왼쪽 중 하나 _#!:#!_
와_!:!_
가 적용됩니다.
각 이동 후 위치에 대한 링크의 출력을 참조하십시오.