당신이 너트에 코드를 넣고 모두 흔들어


10

하나의 프로그래밍 언어를 사용하여 5 개의 단일 라인 프로그램을 작성하십시오. 각 라인은 개별적으로 실행될 때 Harry Nilsson의 1972 년 노래 " Coconut "에 첫 번째 구절의 다른 라인을 출력합니다 .

형제는 그가 한푼도 그것을 구입, 코코넛을 구입 한
그녀는 라임을 위해 지불, 그의 여동생이 또 하나 있었다
그녀는 코코넛에 라임을 넣어, 그녀는 모두 최대를 마셨다
그녀는 코코넛에 라임을 넣어, 그녀는 위로 둘 다 마셨다
그녀 코코넛에 라임을 넣고 둘 다 마셨어

( 가사 )

마지막 3 줄은 가사가 같으므로 마지막 3 줄도 마찬가지입니다.

이 5 개의 단일 라인 프로그램을 단일 5 라인 프로그램에서 라인 당 하나씩 배열 할 수있는 5 가지 요인 또는 120 가지 방법이 있습니다. 가능한 한 많은 120 개 조합에 대해 5 줄 프로그램 이 위에 표시된대로 정확한 순서로 전체 절을 출력하도록 한 줄 프로그램을 최적화해야합니다 .

가장 간단한 답변은 5 개의 단일 행 인쇄 명령문을 가지며 마지막 3 개는 동일합니다.

print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')

첫 두 개의 단일 라이너가 올바른 위치에있는 한 5 줄 프로그램의 출력은 올바른 순서로 구절이됩니다. 120 개의 가능한 배열 중 6 개만이 작업을 수행합니다.

채점

120 번의 승리 중 가장 많은 사례를 제출 한 작품. 타이 브레이커는 누적 바이트 수가 가장 적은 프로그램 세트로 이동합니다 (개행은 계산되지 않음). 예는 309 바이트입니다.

세부

  • 프로그램이 자체 소스 코드를 읽지 못할 수 있습니다. 또한 다른 외부 파일을 읽거나 네트워크 연결이 필요하지 않습니다.

  • 표준 출력 또는 가장 가까운 대안으로 출력. 선택한 이름의 파일로 출력 할 수도 있습니다.

  • "한 줄 프로그램"은 줄 종결 자를 제외한 모든 문자를 포함하는 문자열입니다 ( 바꿈 만 걱정하면됩니다).

  • 단일 라이너를 5 개의 라이너로 구성 할 때는 인접한 각 단일 라이너 쌍 사이에 정확히 4 개의 개행을 추가해야합니다. 선택적으로 후행 줄 바꿈을 추가 할 수 있습니다.


"각각 다른 라인을 출력하는 5 개의 프로그램을 작성하십시오 ..."가 불가능하지 않습니까?
feersum

@feersum 이 다릅니다. 그중 세 개는 동일한 텍스트를 가지고 있습니다.
Calvin 's Hobbies

각각 main메소드 가있는 5 개의 클래스를 포함하는 Java 파일이있는 경우 어떻게 합니까? 그렇다면 프로그램을 실행할 때 어떤 것을 실행해야합니까?
feersum

@feersum 컴파일러는 무엇을 하는가? 동일한 파일의 여러 클래스에 둘 다있을 때 Java가 무엇을하는지 잘 모르겠습니다 main.
Calvin 's Hobbies

2
내가 이것을 기억하는 방법은 그들이 코카콜라 광고에서 그들이 "코크스에 석회를 넣는"광고라는 것입니다.
Joe Z.

답변:


9

CJam, 120 유효한 순열, 334 299 290 바이트

"She put the lime in the coconut, she drank them both up"N+
"Brother bought a coconut, he bought it for a dime"N+]$~
"She put the lime in the coconut, she drank them both up"N+
"His sister had another one, she paid it for a lime"N+]$~
"She put the lime in the coconut, she drank them both up"N+

아주 간단한 논리 :

  • 노래의 각 줄을 5 개의 프로그램 각각에 넣으십시오.
  • 스택의 모든 것을 배열로 감싸기
  • 배열 정렬
  • 다음 프로그램이 동일한 논리를 사용할 수 있도록 배열 랩핑 해제
  • 각 단계마다 배열에 부분 가사가 있습니다. 운좋게도, 배열을 정렬하면 가사의 정확한 순서가 나타납니다.

업데이트 : 3 개의 유사하고 노래의 끝 줄에 나타난 후에 랩 정렬 취소 랩 사이클이 필요하지 않습니다. 그 명백하지 않은 이유를 설명 할 수 있습니다. :)


8

전주 , 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+!

이제 인쇄 문 !은 올바른 순서로되어 있으므로 오프셋 할 필요조차 없습니다. 나는 이것을 언젠가 구현할 것이라고 생각한다.


7

루비, 120 개의 유효한 순열, 430 바이트

$*[1]='His sister had another one, she paid it for a lime';a||=at_exit{puts($*-[p])}
$*[0]='Brother bought a coconut, he bought it for a dime';a||=at_exit{puts($*)}
$*[2]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}
$*[3]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}
$*[4]='She put the lime in the coconut, she drank them both up';a||=at_exit{puts($*-[p])}

어떤 순서로 또는 개별적으로 작동합니다. 각 줄은 전역 상태를 수정 한 다음 후크가 설정되어 있지 않으면 프로그램 끝에서 실행되도록 후크를 설정합니다.


이 질문에는 "5 개의 단일 라인 프로그램"이 있습니다. 이것은 각 라인이 별도의 프로그램에 있어야한다는 것을 의미하지 않습니까? 모두가 아닌가?
bacchusbeale

1
서식 문제입니다. 각 라인은 자체 프로그램으로 작동합니다.
histocrat

6

> <> , 120 개의 순열, 703 바이트

<    /a"emid a rof ti thguob eh ,tunococ a thguob rehtorB"0a.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
<   / a"emil a rof ti diap ehs ,eno rehtona dah retsis siH"09.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
<  /  a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"08.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
< /   a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"07.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"
</    a"pu htob meht knard ehs ,tunococ eht ni emil eht tup ehS"06.#.!50padpacpabpaapa9pa8pa7p97p87p77p67p57p95p84p73p62p51"/////\\\\\>l0=?;o"

한 줄짜리 제한은 2D 언어에서 매우 어려웠으므로 .텔레포트 교육 을 최대한 활용할 수있는 방법을 찾아야했습니다 .

초기 <는 프로그램 흐름을 왼쪽으로 이동시키고 감싸고 실행합니다.

"o;?=0l>\\\\\\/////"15p26p37p48p59p75p76p77p78p79p7ap8ap9apaapbapcapdap

이것은 p보드가 다음과 같이 보일 때까지 문자를 넣는 일련의 (put) 명령어입니다.

<    /<lyrics1>0a.#.!50<blah>
<   / <lyrics2>09.#.!50<blah>
<  /  <lyrics3>08.#.!50<blah>
< /   <lyrics4>07.#.!50<blah>
</    <lyrics5>06.#.!50<blah>
 /     \
  /    \
   /   \
    /  \
     / \
       >l0=?;o

그런 #.!50다음 5 행으로 건너 뛰기 전에 프로그램 흐름을 다시 오른쪽으로 뒤집습니다.

  • /라인 5 의 거울을 따라 가면 가사 5가 스택으로 밀려납니다. 그런 다음 6 호선으로 순간 이동합니다.
  • /라인 6 의 거울을 따라 가면 가사 4가 스택으로 밀려납니다. 그런 다음 7 호선으로 순간 이동합니다.
  • /7 호선을 따라 가면 3 번 가사가 나온다

이것은 가사 1을 푸시 할 때까지 발생하며,이 시점에서 우리는 10 행으로 순간 이동합니다. 이것은 전체 스택이 비어있을 때까지 인쇄하는 루프입니다.

프로그램의 한 줄만있는 경우 \미러는 각 가사 라인의 텔레포트와 동일한 작업을 수행합니다.

프로그램이 스크램블 된 경우에도 위의 설명이 여전히 적용되므로 모든 순열에 대해 프로그램이 작동합니다!

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