전주 , 120 순열, 2045 2035 바이트
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+9409-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-5809-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-992++87993++96+209-9-9-9-9-9-9-1-99+58992++96+99+09-9-9-3- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-594+993+09-9-9-9-9-9-9-1-109-9-9-9-9-9-9-1-99+96+609-9-9-9-9-9-9-1-992++909-9-9-9-9-9-9-1-49197+09-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-595+96+09-9-9-9-9-9-9-1-99+58992++96+95+109-9-9-9-9-9-9-1-41809-9-9-9-9-9-9-1-99+5992++991++9991++09-9-9-9-9-9-9-1-991++909-9-6- (9+9+9+9+9+9+9+9+9+9+6+!)
9-9-9-9-9-9-9-9-9-5-97+993++09-9-9-9-9-9-9-1-8992++96+209-9-9-9-9-9-9-1-94+58992++09-9-9-9-9-9-9-1-92+95+199+409-9-9-9-9-9-9-1-58991++09-9-9-9-9-9-9-1-09-9-9-9-9-7-992++993++95+96+396+309-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-95+909-9-9-9-9-9-9-1-594+993+09-9-9-9-9-9-9-1-58992++09-9-9-9-9-9-9-1-992++993++97+09-9-9-9-9-9-9-1-5809-4- (9+9+9+9+9+9+9+9+9+9+6+!)
이것은 결국 Prelude와 CJam이 아이가 필요하다는 것을 확신시켜주었습니다. Prelude의 매우 제한된 명령어 세트가 아니라면 CJam을 이길 수 없다면이 제출물은 실제로 매우 경쟁적 일 것입니다.
기본 아이디어는 다음과 같습니다
"push line 4" print
"push line 1"print
"push line 3" print
"push line 2" print
"push line 5" print
Prelude에서 각 라인은 자체 스택이있는 자체 "음성"이며 이러한 음색은 병렬로 실행됩니다. 즉, 전체 프로그램에서 각 줄은 개별적으로 문자열을 구성하고 끝에 인쇄합니다. 그러나 print 문의 오프셋으로 인해 행 순서는 출력 순서에 전혀 영향을 미치지 않습니다. 실행은 위에서 아래가 아니라 왼쪽에서 오른쪽이기 때문입니다.
자, 왜 선이 길어요? Prelude는 스택에 숫자 만 저장합니다. 또한 한 번에 한 자리 숫자 만 푸시 할 수 있으므로 더하기와 빼기에서 더 큰 숫자를 구성해야합니다 (곱셈이나 다른 산술도 없음). 따라서 코드의 가장 큰 부분은 단순히 올바른 문자 코드를 계산하고 푸시하는 것입니다. 이것을 조금 짧게하기 위해로 오프셋을 설정합니다 96
. 마지막으로 인쇄하려면 스택이 비어있을 때까지 (즉, a 0
가 발견 될 때까지) 반복 하고 각 번호에 96을 더한 다음 인쇄합니다.
문자열은 마지막 문자에서 첫 문자로 인쇄되므로 문자열이 반대로 바뀝니다.
이것은 가정 파이썬 인터프리터 와을 NUMERIC_OUTPUT = False
(어떤 방법 사양을 정의 I / O).
다음 CJam 코드를 사용하여 문자열 구성을 생성했습니다.
"Brother bought a coconut, he bought it for a dime
"W%{i96-_0<{zLa*9/:,'-*'-+0\+}{La*9/:,_,'+*W<}?}%
마지막으로, 재미를 위해서 Prelude에 문자열 개념이 있다면 왜 이것이 짧을 것이라고 생각합니까?
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emid a rof ti thguob eh ,tunococ a thguob rehtorB"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
"emil a rof ti diap ehs ,eno rehtona dah retsis siH"N+!
"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"N+!
이제 인쇄 문 !
은 올바른 순서로되어 있으므로 오프셋 할 필요조차 없습니다. 나는 이것을 언젠가 구현할 것이라고 생각한다.