프로그래밍 이분법 (말 그대로) Q : 동전의 양면은 무엇입니까? A

대답이 ‘and’로 분리 될 수있는 두 개의 합리적으로 정확한 (그러나 잠재적으로 영리한) 단어 나 구를 포함하는 일반 영어로 작성된 질문을 고려하십시오.

Q : 동전의 양면은 무엇입니까? A : 머리와 꼬리

Q : 여행하는 가장 좋은 방법은 무엇입니까? A : 비행기와 제트 팩

Q : 까마귀가 책상과 같은 이유는 무엇입니까? A : 둘 다에 ‘b’가 있고 둘 다에 ‘n’이 없기 때문에

정상적으로 실행될 때 그러한 질문을 출력하는 프로그램을 작성하십시오.

두 번째 문자로 시작하여 프로그램에서 다른 모든 문자가 제거되고 결과가 다시 실행되면 결과는 답에서 ‘and’ 의 왼쪽 에 있어야합니다 .

첫 번째 문자로 시작하여 프로그램에서 다른 모든 문자가 제거되고 결과가 다시 실행되면 출력은 답에서 ‘and’ 의 오른쪽 에 있어야합니다 .

( ‘and’자체는 출력되지 않습니다.)

프로그램이

A1B2C3D4E5F6G7H8I9

그리고 그 출력은

What are the two sides of a coin?

그런 다음의 출력은 ABCDEFGHI이어야 heads하고의 출력은 123456789이어야합니다 tails.

질문과 답변에 관한 규칙

  • 당신은 나의 예시적인 질문들을 사용할 수 있지만, 나는 당신이 당신 자신의 것을 구성하도록 권장합니다.
  • 질문과 두 가지 답변 부분 :
    • 모두 분명해야한다
    • 문법적으로 의미가있는 영어 여야합니다
    • 인쇄 가능한 ASCII 만 포함 할 수 있습니다 (16 진수 20 ~ 7E)
  • 이상적으로 질문은 대문자로 표시되고 문장 부호가 표시됩니다 (그러나 답변이 반드시 필요한 것은 아닙니다).
  • 질문의 길이는 30 자 이상이어야하며 엔트로피 는 3.5 이상이어야합니다 . (문자열을 입력하고 계산 을 클릭하고 마지막 H (X)를 찾으십시오 .)
  • 두 답변 부분 ( [space]and[space]사이에 포함되지 않음 )은 각각 엔트로피가 2 이상인 5 자 이상이어야합니다.
  • ‘및’이라는 단어는 어느 부분 에나 나타날 수 있습니다.

코드에 대한 규칙

  • 3 개의 코드 스 니펫 중 어느 것도 다음을 수행 할 수 없습니다.
    • 주석 / 컴파일러 / 인터프리터가 전통적으로 무시한 내용을 포함합니다 (추가 세미콜론을 넣는 것에 대해 걱정할 필요는 없지만 의견이라고 생각되는 경우)
    • 실행 중 프로그램을 종료
  • 코드에는 유니 코드 및 인쇄 할 수없는 ASCII를 포함한 모든 문자가 포함될 수 있습니다.
  • 홀수 또는 짝수의 문자가있을 수 있습니다.
  • 출력은 stdout 또는 파일 또는 합리적인 것으로 보입니다. 입력이 없습니다.

채점

나는 골프 답변을 장려하고 싶지 않지만 영리한 답변을 더 장려하고 싶기 때문에 점수는 코드 골프와 인기 대회 사이에 있습니다.

점수 = (upvotes - downvotes) - floor((bytes in code that outputs question) / 3)

가장 높은 점수가 이깁니다.

( http://mothereff.in/byte-counter 를 바이트 카운터로 사용 하십시오 .)



답변

자바 스크립트 (148 바이트)

질문에 대해 경고 *를 생성하는 부작용으로 일부 넌센스 리터럴을 만듭니다. (분할은 비슷하지만 각 답변에 대해 경고를 만듭니다 *).

"';"+alert( 'What is the ideal breakfast???')+/ " ;apl=e"rbta(k"esnc"r.armebplleadc ee g g s(" ) + " \/)k;e"/+ ",t'hceo 'c)a;kye= ailse rat (lpi)e "

스플릿 :

";+lr('hti h da rafs??)/";p="baken".replace   (    /ke/ ,'co');y=alert(p)

'"aet Wa steielbekat?'+  alert("scrambled eggs")+"\);"+"the cake is a lie"

 

의문: What is the ideal breakfast???

답변 : baconscrambled eggs


답변

Brainfuck (437 자)

이 프로그램이 실제로 의미있는 일을하는 최초의 brainfuck 프로그램이라고 고백해야합니다. 이 프로그램은 4 개의 메모리 위치 만 사용하므로 메모리 부족 시스템에 최적화되어 있습니다.

의문: What are the two main groups of trees?

답변 : conifersbroadleafs

-+[[++++++++++++++++++++++[+>++++++[+>++++++++++++<>-+]+>+-+.++++++<+<+-+]+>+++++.+>++.+-..------.-<--..-+-+-+..->.-+-+-+.+<+++.+-+-+-+-+.++++.+++.+<.+>-+++-+++-+++-++.->]]++-+[[+-+-[[+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++.+++++++++++++++++.-------.>.<<.>.>--.<++++.<.>>++.<+++.---.<.>>.+++.<++++++++++.<.>--.------------.++++++++.+++++.<.>-------.>-----.<++++++++.>+++.<+.>--.<<.>-.---------.<.>>+.--.<-..>+.<<[<++>-]<-.<]]]]

메인 루프

이 프로그램은 메인 루프 (모든 [] 블록이 한 번만 실행되므로 실제로 루프가 아님)와 두 개의 섹션으로 구성됩니다.

-+[[        // let answers enter
            * SNIP interleaved answer sections *
]]
++-+[[      // let odd answer and question enter
    +-+-[[  // let question enter
            * SNIP question section *
    ]]
]]

섹션을 독립적으로 테스트하려면 기본 루프를 고려해야합니다. 위치 0은 짝수 답변에 -1, 홀수 답변에 1, 질문 섹션에 2를 포함합니다.

답변 섹션

심지어 대답 (홀수 지침 제거) :

// location 0 contains minus 1 from main
// set location 1 = 10 * 10 minus 1 = 99 (c)
+++++++++++[>++++++++++<-]>-. // c
++++++++++++.-.     // on
-----.---.          // if
-.+++++++++++++.+.  // ers
<                   // goto 0 (which contains 0)
+-+-+-+-+-          // padding to match length of odd answer

이상한 답변 (지시 된 지침조차 제거됨) :

// location 0 contains 1 from main
// set location 1 = 16 * 6 plus 2 = 98 (b)  location used for characters below 'l'
// set location 2 = 16 * 7 plus 2 = 114 (r) location used for 'l' and above
+++++++++++++++[>++++++>+++++++<<-]>++.>++. // br
---.<               // o
-.+++.              // ad
>---.<              // l
+.----.+++++.       // eaf
>+++++++.           // s
>                   // goto 3 (which contains 0)

질문 섹션

다른 문자와 값이 크게 다르기 때문에 공간을 별도의 위치에 저장하기로 결정했습니다. 이것으로 간단히 공간을 인쇄 할 수 있습니다 <.>.

// location 0 contains 2 from main
// set location 1 = 17 * 2 minus 2 = 32 (space)
// set location 2 = 17 * 5 plus 2 = 87 (W)   location used for characters below 'r'
// set location 3 = 17 * 7 minus 3 = 116 (t) location used for 'r' and above
+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++. // W
+++++++++++++++++.  // h
-------.>.<         // at
<.>                 // (space)
.>--.<++++.         // are
<.>                 // (space)
>++.<+++.---.       // the
<.>                 // (space)
>.+++.<++++++++++.  // two
<.>                 // (space)
--.------------.    // ma
++++++++.+++++.     // in
<.>                 // (space)
-------.>-----.     // gr
<++++++++.>+++.     // ou
<+.>--.<            // ps
<.>                 // (space)
-.---------.        // of
<.>                 // (space)
>+.--.<-..>+.       // trees
<<[<++>-]<-.<       // ? (value_of_space * 2 minus 1)

최종 업데이트

최종 업데이트에서 최소 지시 사항이 사용되도록 곱셈을 최적화했습니다. 또한 홀수 답변 섹션에 ‘l’을 두 번째 문자 그룹으로 포함하면 크게 개선되었습니다. 홀수 답변의 단일 문자 절약은 기본적으로 전체 프로그램의 두 문자를 의미합니다. 짝수 답변의 패딩도 감소하기 때문입니다. 또한 여기에서 불필요한 명령 몇 개를 제거했으며 더 이상 코드를 최적화 할 수 없다고 생각합니다.


답변

배치-84

이 것을 아주 자랑스럽게 생각합니다

정식 프로그램 : 동전의 양면은 무엇입니까? (콘솔)

echo What are two sides of a coin?  2>>xx  2>>cc&&eecchhoo  hteaaidlss  2>>xx  2>>cc

짝수 만 : 헤드 ( ‘c’파일)

eh htaetosdso  on 2>x >c&echo heads 2>x >c

승률 만 : 꼬리 ( ‘x’파일)

coWa r w ie faci? >x 2>c&echo tails >x 2>c

두 경우 모두 오류 출력을 파일로 리디렉션하여 작동합니다.


답변

파이썬 -104 96 (골프 : 76)

내 솔루션은 다소 간단하고 읽을 수 있습니다.

"";print 'What is the color of a zebra?' ;""
paraianat= "' b l a c k '"
aparaianat="'w h i t e'"

산출:

What is the color of a zebra?
black
white

솔직히 bitpwner의 답변에서 첫 번째 줄에 대한 아이디어를 찾았습니다.


더 읽기 쉬운 대안 : -113 105 97

"";print 'What is the color of a zebra?' ;""
"p r i n t ' b l a c k '" ;"p r i n t ' w h i t e '"

더 짧은 대안 : -86 76

"";print'What is the color of a zebra?';""
"""";;pprriinntt''bwlhaictke''"""


답변

Rebmu : 79 자 OR (37 + 길이 (p1) + 2 * 최대 (길이 (p2), 길이 (p3)))

먼저 어떤 언어를 배워야하는지 묻는 79 자 솔루션을 제공합니다. (엔트로피 4.0, 30 글자 제외 ?) 및 Rebol 및 [Red] 의 제안을 제공합니다 .

DD  11  DD :do dd {dd  {p{Which languages must you learn?}qt}} pp{{[RReebdo]l}}

다른 언어가 아닌 여기에서 사용할 수있는 독특한 전술은 중괄호가 비대칭 문자열 구분 기호이며 법적으로 중첩 될 수 있다는 사실을 활용하는 것입니다.

my-string: {"It's cool," said {Dr. Rebmu}, "for MANY reasons--like less escaping."}

이스케이프 시퀀스를 사용하지 않는 모든 프로그램에서 쉽게 작동 할 수있는 일반화 된 솔루션을 만들 수 있습니다. 79 자 버전은 바로 가기에 충분하지만 프로그램 p2 및 p3에 대한 임의의 프로그램 소스를 올바르게 포함하려면 전체 템플릿이 필요합니다. 우리가 그것을 사용했다면 87 자였습니다.

DD  11  DD :do dd {dd  {p{Which languages must you learn?}qt}} ddoo{{pp{{[RReebdo]l}}}}

이 일반적인 형태를 사용하는 패턴은 가변 길이의 연속 문자의 세 가지 소스 텍스트가있는 경우 (의이 같은 예를 사용할 수 있도록한다는 것입니다 AAA, BBBBB, CCCCCCC당신의 라인을 따라 뭔가로 인코딩 할 수 있습니다)

DD  11  DD :do dd {dd  {AAAqt}} ddoo{{BCBCBCBCBC C C}}

(참고 : 이스케이프 문자를 사용하는 프로그램 에서이 패턴을 조정하지 않으면 작동하지 않지만 치명적인 결함은 아닙니다. 중괄호로 구분 된 문자열에서 비교할 수없는 왼쪽 괄호를 얻으려면 다음과 같은 것이 필요 {Foo ^{ Bar}하지만 … 대체 문자열 표기법 "Foo { Bar"및 결합 된 사례는 이스케이프되지 않은 문자열의 혼합을 함께 붙여서 관리 할 수 ​​있습니다.)

그래서 … 어떻게 예를 들어? 일반적인 형식을 사용할 수있게되면이 573 개의 문자 프로그램은 3 개의 이전 코드 골프 솔루션에서 몇 분만에 조립되었습니다.

DD 11 DD : do dd {dd {rJ N 0 % rN Wa1m2j S {\ x /} D00 Hc & [u [Ze? Wa Qs ~ rpKw [isEL00c [skQd2k] [eEV? kQ [tlQ]] pcSeg–b00 [ eZ 1 5] 3] prRJ [si ~ dSPscSqFHs] eZ 1 [s + dCa + wM2cNO]]] Va | [mpAp2j] prSI ~ w { } Ls2w Wl h01tiVsb01n -1 chRVs { } hLceVn01qt}} ddoo { CrdSz [sn [{N sbeo [tIt0l1eV} 0e5gXN1 01L {5s0} C {1} 0 {0 Do5f0 0bMe1e0r0} 0]] tMw9C9 Numz Jl [paN + [KperlCJBn [[ba sWS {B noJn ln]] {K, j} b P {. } lf EZ–n [N m {G를 더 많이 구입하고 더 구입}] {T akeonedownandpassitar ound} c B w P lf]]}}

누구든지 자신이 선택한 언어로 해당 프로그램을 작성하고 573을 이길 수 있다고 생각되면 알려주십시오. 선택하신 언어가 Rebmu가 아니라고 가정하면 해당 프로그램이 최소가 아니라는 것을 알고 있기 때문에 나는 당신에게 많은 명성을 얻게 될 것입니다. 🙂

p2와 p3의 길이가 불균형 할 때 마지막에 나오는 “폐기스러운”간격이 발생합니다. 그러나이 경우 3 개의 프로그램 모두 크기가 다르므로 p2 / p3에 대해 특히 적합한 페어링이 없습니다. (미로 등의 입력으로 외부 데이터가 없었기 때문에 비슷한 길이의 것이 아니기 때문에 이것을 선택했습니다. 더 최적의 새로운 프로그램을 작성할 수는 있었지만 충분한 시간을 보냈습니다. 당신이 하지 않는 새로운 프로그램을 작성해야 …)

작동 원리

(참고 : 간소화되지는 않았지만보다 흥미로워 보이는보다 “창의적인”접근 방식으로 시작했습니다. 이 접근 방식을 설명하는 것은 이미 길기 때문에 블로그 항목으로 옮겼습니다 .)

여기서 중요한 것은 다른 항목들과 마찬가지로 “문자열로 eval code”속임수입니다. 비대칭 문자열 구분 기호의 트럼프 카드 만 있습니다. 먼저 80 자의 대소 문자가 어떻게 작동하는지 설명하겠습니다.

이 경우의 가독성을 위해 공백을 조정하는 “전체”프로그램은 다음과 같습니다.

DD 11                    ; assign 11 to dd (about to overwrite again)
DD :do                   ; make dd a synonym for DO (a.k.a. "eval")

; eval a string as source code that ends with QUIT (QT)
dd {dd  {p{Which languages must you learn?}qt}}

; we'll never get here, but whatever's here must be legally parseable
pp{{[RReebdo]l}}

여기서는 DD를 DO (일명 “eval”)의 동의어로 설정합니다. 그러나 속임수는 절반이 줄어든 프로그램이 실행될 때 D를 무해한 리터럴 1로 정의하는 유일한 효과를 갖는 실행 코드를 감추는 것입니다.

홀수 문자 코드로 공백을 다시 조정 한 내용은 다음과 같습니다.

D 1                      ; assign 1 to d
D d                      ; assign d to itself, so it's still 1
d                        ; evaluates to integer, no side effect
{d pWihlnugsms o er?q}   ; string literal, no side effect
p {Rebol}                ; print "Rebol"

그리고 짝수 문자 코드는 다음과 같습니다.

D 1                      ; assign 1 to d
D:od                     ; URL-literal (foo:...), no side effect
d                        ; evaluates to integer, no side effect
{{hc agae utyulan}t}     ; string literal (well-formed!), no side effect
p {[Red]}                ; print "[Red]"

실제로 절반이 아닌 프로그램의 경우 dd {dd {(arbitrary code)qt}}원하는 코드를 실행합니다. 그러나 하나의 평가 대신 두 개의 평가 호출이 있습니다. 중첩 된 괄호는 인터리브 된 코드에서 훌륭하게 작동하지만 DO의 평가 동작을 망가 뜨리기 때문입니다. 때문에:

do {{print "Hello"}}

문자열을 프로그램으로로드하지만 해당 프로그램은 문자열 상수 인 것 {print "Hello"}입니다. 따라서 여기에서 사용하는 트릭은 DD (DO와 동일한 기능 값을 유지)를 가져 와서 두 번 실행하는 것입니다. 절반은 줄의 다른 부분을 씹지 만 내용에 대해 짝수 / 홀수가 올바른 경우 둘 다 씹지 않으며, 절반을 벗어난 후에 줄 바깥에 남은 것은 단지 정수 d이기 때문에 무해합니다.

이 패턴을 사용하면 프로그램 동작을 반으로 자르지 않아도 프로그램 동작을 작성하는 데 어려움이 없습니다. 코드의 문자 길이가 짝수 인 한 아무 것도 넣을 수 있습니다 (QT를 세는 경우 홀수). 홀수에서 짝수를 가져와야하는 경우 공백 을 넣으십시오 (p1의 홀수 프로그램 길이에 대해서는 실제로 p1에 위의 수식에 +1이 있음) . 트릭은 나중에 인터리빙 된 코드를 작성하는 것처럼 보이며 파서 반으로 떨어지지 않으면 파서를 통과해야합니다 . (QT로 인해 실행되지는 않지만 실행되기 전에 LOADable이어야합니다.)

이 경우는 사소합니다. pp정의되지 않은 경우에도 기호로 잘로드 p되고 각 반 프로그램에서 인쇄 를 위해 분할됩니다 . 그러나 문자열 리터럴을 다시 사용하여 다른 트릭을 수행 할 수 있습니다. 절반의 프로그램은 여전히 ​​DO가 정상적으로 정의되어 있으므로 다음과 같이 말할 수도 있습니다.

ddoo{{pp{{[RReebdo]l}}}}

파서가 선택하는 유일한 부분을 전체적으로 상징적 단어 ddoo와 문자열 리터럴로 만들면 해당 문자열 리터럴 내에 원하는 두 개의 프로그램을 인터리브하고 파서를 화 내지 않아도됩니다. 절반 버전은 다음과 같이 말합니다.

do{p{Rebol}}

..과…

do{p{[Red]}}

내가 말했듯이,이 부분은 프로그램을 문자열로 취급하고 평가하는 다른 솔루션에 익숙해 보입니다. 그러나 경쟁의 경우 포장하는 프로그램에 중첩 된 줄이 포함되어 있으면 렌치가 생깁니다. 여기서 문제가되는 유일한 것은 캐럿 ( ^)을 통해 탈출하는 것입니다 … 이는 쉽게 해결할 수 있습니다.


(작은 ‘속임수’참고 :이 문제에 대한 답변으로 ‘QUIT’에 QT를 추가했습니다. 실제로, 종료하기 전에 약어를 의도적으로 제거했습니다 … 어쨌든 콘솔 사용에만 적합하다고 생각했기 때문입니다. REPL에없는 경우 2 글자 공백으로, 특히이 경우에 대해 추가하지 않고 잘못되었다고 생각하기 때문에 추가하고 있습니다. 그럼에도 불구하고, 변경 전에는 2 자 이상이되었습니다. 내가 솔루션을 처음 게시했을 때 Rebmu에는 버그가 있었지만 실제로 작동하지는 않았지만 현재는 작동하지 않습니다.)


답변

186 139 135

"";print'What are the best things in life?';""&&pprriinntt("'hceraurs ht hyeo ulra meennetmaiteiso'n s   o f   t h e i r   w o m e n ")

인생에서 가장 좋은 것은 무엇입니까?

"pitWa r h ettig nlf?;"&print('crush your enemies'                 )

적을 분쇄

";rn'htaetebs hnsi ie'"&print"hear the lamentations of their women"

여자들의 애도를 들으십시오

덜 긴 답변 사용하기 :

79 72

"";print'What are my preferred weapons?';""&&pprriinntt("'smwaocredss'")

What are my preferred weapons?(30 바이트, H (X) = 3.76) swords(H (X) = 2,25) 및 maces(H (X) = 2,32)


답변

파이썬 -139 103

"";print'What are the ingredients for success?';""; ";" ;id=='"RUaniincboorwnss'";;pprriinntt  id++"'"'

What are the ingredients for success?-> UnicornsRainbows

테스트:

c="\"\";print\'What are the ingredients for success?\';\"\"; \";\" ;id==\'\"RUaniincboorwnss\'\";;pprriinntt  id++\"\'\"\'"
exec c        # What are the ingredients for success?
exec c[::2]   # Unicorns
exec c[1::2]  # Rainbows
print
print c[::2]  # ";rn'htaeteigeinsfrsces'";"";d="Unicorns";print d+''
print c[1::2] # "pitWa r h nrdet o ucs?;" ; i='Rainbows';print i+""

구 버전:

# What are the ingredients for success?
"";print(('What are the ingredients for success?'));""; ";" ;"pHrEiRnEt (C'OUMnEiSc oZrAnLsG'O)"; ";" ; "p,r iTnOtN(Y' RTaHiEn bPoOwNsY'.)"
# Unicorns
";rn('htaeteigeinsfrsces')";"";print('Unicorns');"";", TONY THE PONY."
# Rainbows
"pit(Wa r h nrdet o ucs?);" ; "HERE COMES ZALGO" ;  print('Rainbows')