정상 및 시각적 문자열 복귀


17

고양이 프로그램의 역할을하는 코드를 작성하십시오. 즉, 문자열을 입력하여 그대로 출력합니다. 그러나 코드의 정상적인 복귀는 입력 문자열의 정상적인 복귀를 출력해야합니다. 그리고 코드의 시각적 복귀는 입력 문자열의 시각적 복귀를 출력해야합니다.

정상적인 복귀는 문자열의 역순 문자 시퀀스입니다. 시각적 복귀는 문자 ()[]{}<>)(][}{><각각 대체 된 정상적인 복귀입니다 .

문자가 있고 코드 ()[]{}<>를 정의하기 위해이 챌린지 전에 게시 된 모든 코드 페이지를 사용할 수 있습니다 . 모든 코드에 대해 동일한 코드 페이지를 사용해야합니다. 이 코드 페이지에서 원본 코드가 유효해야하며 그 반대의 코드를 적용하면 자체 코드가 생성됩니다.

이것은 바이트 단위의 , 가장 짧은 코드입니다.

문자열의 AB(XY)경우 정상 및 시각적 복귀는 각각 )YX(BA(YX)BA각각입니다.

(가상 언어) 코드 인 경우 AB(XY), 그 코드 )YX(BA(YX)BA출력해야 각각 입력 문자열의 정상 시각이 복귀. 그리고 AB(XY)고양이 프로그램으로 행동해야합니다.


입력 문자열에 줄 바꿈이 포함될 수 있습니까?
Digital Trauma

@DigitalTrauma 그것에 대해 생각하지 않았다 ... 프로그램은 사용하는 입력 루틴이 반환 할 수있는 모든 것을 지원해야합니다 (문자열을 반환하는 한). 그리고 원래 코드 자체에서 작동해야합니다.
jimmy23013

답변:


9

05AB1E , 16 바이트

05AB1E에는 상수가 사전 정의되어 "()<>[]{}"있으며 시각적 복귀에 영향을 미치지 않습니다.

암호:

,q‡"}{][><)("užR

설명:

,                 # Pop and print the input.
 q                # Quit.
  ‡"}{][><)("užR  # This part is ignored.

온라인으로 사용해보십시오!


역전 :

Ržu"()<>[]{}"‡q,

설명:

R                 # Reverse the input.
 žu               # Short for "()<>[]{}".
   "()<>[]{}"     # Push this string.
             ‡    # Transliterate (no-op, since everything is transliterated to itself).
              q   # Quit and implicitly print.
               ,  # This part is ignored.

온라인으로 사용해보십시오!


시각적으로 반대 :

Ržu")(><][}{"‡q,

설명:

R                 # Reverse the input.
 žu               # Short for "()<>[]{}".
   ")(><][}{"     # Push this string.   
             ‡    # Transliterate (giving the visually reversed string).
              q   # Quit and implicitly print.
               ,  # This part is ignored.       

온라인으로 사용해보십시오!

CP-1252 인코딩을 사용합니다 .


6

CJam, 21 바이트

qe#ere$_"}{][><)("%Wq

여기에서 테스트하십시오.

정상적인 복귀 :

qW%"()<>[]{}"_$ere#eq

여기에서 테스트하십시오.

시각적 복귀 :

qW%")(><][}{"_$ere#eq

여기에서 테스트하십시오.

설명

먼저 정상적인 코드 :

qe#ere$_"}{][><)("%Wq

이것은 간단합니다. q모든 입력을 읽고 e#프로그램의 나머지 부분을 주석 처리 한 다음 입력을 암시 적으로 인쇄합니다.

이제 정상적인 복귀 :

q            e# Read all input.
W%           e# Reverse it.
"()<>[]{}"   e# Push this string.
_$           e# Duplicate and sort it. However, the string is already sorted
             e# so we just get two copies of it.
er           e# Transliteration (i.e. character-wise substitution). But since the
             e# source and target string are identical, the reversed input
             e# is left unchanged.
e#eq            Just a comment...

그리고 마지막으로 시각적 복귀 :

q            e# Read all input.
W%           e# Reverse it.
")(><][}{"   e# Push this string.
_$           e# Duplicate and sort it. This gives us "()<>[]{}", i.e. the
             e# same string with each bracket pair swapped.
er           e# Transliteration (i.e. character-wise substitution). This
             e# time, this toggles all the brackets in the reversed input
             e# completing the visual reversion.
e#eq            Just a comment...

나는이 코드를 정확히 가지고 있었다.
jimmy23013

6

하스켈, 124 바이트

앞으로:

f=id
--esrever.q pam=2>1|esrever=2<1|f;x=x q;')'='(' q;'('=')' q;']'='[' q;'['=']' q;'>'='<' q;'<'='>' q;'}'='{' q;'{'='}' q

일반 역전 :

q '}'='{';q '{'='}';q '>'='<';q '<'='>';q ']'='[';q '['=']';q ')'='(';q '('=')';q x=x;f|1<2=reverse|1>2=map q.reverse--
di=f

시각적 반전 :

q '{'='}';q '}'='{';q '<'='>';q '>'='<';q '['=']';q ']'='[';q '('=')';q ')'='(';q x=x;f|1>2=reverse|1<2=map q.reverse--
di=f

각 버전은 기능을 정의합니다 f 문자열을 받아서 리턴하는 를 합니다. 정방향 모드 f에서는 identity 함수 id이고 나머지 코드는 주석입니다. 정상 리버스 모드에서 가드 1<2f되고 True, 이렇게 reverse적용됩니다. 시각 반전 모드에서 <가로 전환되고 >가드가 False입니다. 두 번째 가드는 다른 방법과 True시각적 모드이므로 q"() <> {} []"스위치가 추가 로 적용됩니다.

f|1<2=reverse|1>2=map q.reverse      -- normal reverse mode
f|1>2=reverse|1<2=map q.reverse      -- visual reverse mode

게다가 <>가 엉망이 될 수 있도록 경비에, 내 코드는 브래킷을 사용하지 않습니다.


6

배쉬 + 일반적인 리눅스 유틸리티, 51

  • @ jimmy23013 덕분에 2 바이트 절약
  • @AdamKatz 덕분에 2 바이트 절약
#'><}{][)(' `P5BD706D5AC79E196iFe- cd` rt|ver|
\cat

정상적인 복귀 :

tac\
|rev|tr `dc -eFi691E97CA5D607DB5P` '()[]{}<>'#

시각적 복귀 :

tac\
|rev|tr `dc -eFi691E97CA5D607DB5P` ')(][}{><'#

여기서 주요 요령은 ()[]{}<> 이 691E97CA5D607DB5 (기본 15)로 인코딩된다는 것입니다. 결과 dc명령은 두 종류의 복귀 후에도 동일한 결과를 산출합니다. 그러나 '()[]{}<>'문자열 리터럴은 반전 유형에 민감합니다.

tac입력 행의 순서를 반대로하려면 rev각 행의 문자를 반대로해야합니다. 모든 ASCII 입력이 허용되어야합니다.


5

MATL, 26 24 22 16 바이트

앞으로

DPEXSt'><}{][)('

온라인으로 사용해보십시오!

설명:

                % Implicitly grab the input as a string
D               % Pop the top of the stack and display it
P               % Tries to flip the top element on the stack but errors out
                % because the stack is empty. Program terminates.
EXSt'><}{][)('  % Not executed

정상적인 복귀 :

'()[]{}<>'tSXEPD

온라인으로 사용해보십시오!

설명:

            % Implicitly grab input as a string
'()[]{}<>'  % String literal (search string)
tS          % Duplicate and sort to create the replacement string: '()[]{}<>'
XE          % Replace all entries in the input using the search and replacement strings. 
            % Corresponding characters in the strings are used for the replacement.
            % Effectively a no-op
P           % Flip the string
D           % Explicitly display result

시각적 복귀 :

')(][}{><'tSXEPD

온라인으로 사용해보십시오!

설명:

            % Implicitly grab the input as a string
')(][}{><'  % String literal (search string)
tS          % Duplicate and sort to create the replacement string: '()[]{}<>'
XE          % Replace all entries in the input using the search and replacement strings. 
            % Corresponding characters in the strings are used for the replacement. 
P           % Flip the result
D           % Explicitly display the result

시각적 복귀는 문자 가 각각 대체 된 정상적인 복귀 입니다 . ()[]{}<>)(][}{><
Outgolfer Erik

@ ΈρικΚωνσταντόπουλος 업데이트되었습니다.
Suever

3

GolfScript, 32 28 바이트

#%{=1-[=-\7?@.`{[(<>)]}.}%1-

온라인으로 사용해보십시오!

정상적인 복귀 :

-1%}.}])><([{`.@?7\-=[-1={%#

온라인으로 사용해보십시오!

시각적 복귀 :

-1%{.{[(<>)]}`.@?7\-=]-1=}%#

온라인으로 사용해보십시오!

일치하지 않는 것이 }GolfScript에서 프로그램을 종료 한다는 사실 은 이것을 매우 간단하게 만들었습니다. 그러나 대괄호를 바꾸는 코드가 아직 최적이 아니라고 확신합니다.


0

파이썬 2.7, 208 바이트

앞으로

import sys#
print''.join(sys.stdin)#
#0:tpecxe
#"]1-::[)nidts.sys(nioj.'' tnirp"cexe:yrt
#0:tpecxe
#"(('<>{}[]()','><}{][)(')snartekam.s)etalsnart.[1-::](nidts.sys)nioj.'' tnirp"cexe:yrt
#s sa gnirts,sys tropmi

정상적인 복귀

import sys,string as s#
try:exec"print''.join)sys.stdin(]::-1[.translate)s.maketrans)'()[]{}<>',')(][}{><'(("#
except:0#
try:exec"print''.join(sys.stdin)[::-1]"#
except:0#
#)nidts.sys(nioj.''tnirp
#sys tropmi

https://eval.in/574639

시각적 복귀

import sys,string as s#
try:exec"print''.join(sys.stdin)[::-1].translate(s.maketrans(')(][}{><','()[]{}<>'))"#
except:0#
try:exec"print''.join)sys.stdin(]::-1["#
except:0#
#(nidts.sys)nioj.''tnirp
#sys tropmi

https://eval.in/574638

stdin에서 EOF까지 모든 방향을 읽습니다.

슈퍼 영리한 것은 없습니다. 후행 주석은 순방향 코드와 역방향 코드 만 실행 한 다음 exectry 블록 의 명령문은 두 가지 다른 버전의 구문 오류를 포착합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.