파이썬의 pickle 모듈 은 직렬화에 사용되므로 나중에 재구성 할 수있는 방식으로 객체를 덤프 할 수 있습니다. 이를 위해 pickle은 간단한 스택 기반 언어를 사용합니다.
일을 단순하게하기 위해이 언어의 작은 부분 집합을 다룰 것입니다.
( Push a mark to the stack
S'abc'\n Push a string to the stack (here with contents 'abc')
l Pop everything up to the last mark, wrapping all but the mark in a list
t Pop everything up to the last mark, wrapping all but the mark in a tuple
. Terminate the virtual machine
당신의 임무는 언어의이 서브셋을 구현하는 것입니다. 참고 \n
여기에 문자 개행이며, 줄 바꿈 실제로 언어에 중요하다.
언어와 같은 CJam GolfScript 나에 대해 잘 알고, 그들을 위해 (
와 l/t
유사을 운영 [
하고 ]
각각.
입력
일을 단순하게 유지하기 위해 입력은 항상 유효합니다. 특히 입력에 대해 다음을 가정 할 수 있습니다.
- 문자열은 소문자와 공백으로 만 구성
[a-z ]
되며 항상 작은 따옴표를 사용합니다. - 모든 문자가 위에 지정된대로 외부 문자가 없습니다. 예를 들어, 줄 바꿈은 문자열 뒤에 만 발생합니다.
- 모든
l/t
것이 일치(
하기 전에 모든(
것이 일치l/t
합니다. 또한 하나 이상이있을 것(
입니다. - 정확히 하나만
.
있을 것이고 항상 마지막 캐릭터가 될 것입니다.
명령 행, STDIN 또는 함수 인수를 통해 입력을받을 수 있습니다. 원하는 경우 여러 줄 문자열 대신 줄 바꿈 이스케이프 된 단일 문자열을 사용할 수 있지만 답에이를 지정하십시오.
산출
출력은 최종 객체의 표현이어야하며 STDOUT에 인쇄되거나 string으로 반환되어야 합니다 . 구체적으로 특별히:
문자열은 예를 들어 사이에 내용이 포함 된 작은 따옴표를 열고 닫음으로 표시됩니다
S'abc' -> 'abc'
. 이 챌린지는 파이썬에서 허용 되더라도 큰 따옴표를 사용할 수 없습니다.목록은 쉼표로 구분 된 요소
[]
(예 :['a','b','c']
플 의해 둘러싸여 콤마로 분리 소자 repsented하는 동안)()
(예를 들면('a','b','c')
).- 공백은 중요하지 않습니다. 예 :
('a', 'b', 'c' )
. 괜찮습니다. - 닫는 대괄호 앞에 쉼표를 사용할 수 없습니다. 이것은 단일 언어 튜플이 표현되는 방식으로 인해 대부분의 언어에서 일을 더 쉽게 만들고 파이썬에서 목록 / 튜플을 작성하고 출력하는 것을 어렵게하기 위해 의도적으로 파이썬 구문 규칙과 다릅니다. 도전, 우리
('a')
는 반대로('a',)
).
예
위의 텍스트는 어려워 보일 수 있지만 다음 예제는 좀 더 명확해야합니다.
(l.
가능한 출력 : []
(t.
가능한 출력 : ()
(S'hello world'
l.
가능한 출력 : ['hello world']
(S'string one'
S'string two'
S'string three'
t.
가능한 출력 : ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
가능한 출력 : ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
가능한 출력 : [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
가능한 출력 : [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
규칙
- 이것은 코드 골프입니다 이므로 가장 적은 바이트의 코드가 이깁니다.
- 파이썬 피클과 함께 작동하도록 설계된 기능은 허용되지 않습니다.
보안 참고 사항 : 실제 코드에서는 신뢰할 수있는 출처에서만 선택을 해제하거나 그렇지 않으면 cos\nsystem\n(S'rm -rf'\ntR.
놀라 울 수 있습니다.
S'abc'\n
밀어abc
나'abc'
?