대답이 ‘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???
답변 : bacon
및scrambled eggs
답변
Brainfuck (437 자)
이 프로그램이 실제로 의미있는 일을하는 최초의 brainfuck 프로그램이라고 고백해야합니다. 이 프로그램은 4 개의 메모리 위치 만 사용하므로 메모리 부족 시스템에 최적화되어 있습니다.
의문: What are the two main groups of trees?
답변 : conifers
및broadleafs
-+[[++++++++++++++++++++++[+>++++++[+>++++++++++++<>-+]+>+-+.++++++<+<+-+]+>+++++.+>++.+-..------.-<--..-+-+-+..->.-+-+-+.+<+++.+-+-+-+-+.++++.+++.+<.+>-+++-+++-+++-++.->]]++-+[[+-+-[[+++++++++++++++[>++>+++++>+++++++<<<-]>-->>---<++.+++++++++++++++++.-------.>.<<.>.>--.<++++.<.>>++.<+++.---.<.>>.+++.<++++++++++.<.>--.------------.++++++++.+++++.<.>-------.>-----.<++++++++.>+++.<+.>--.<<.>-.---------.<.>>+.--.<-..>+.<<[<++>-]<-.<]]]]
메인 루프
이 프로그램은 메인 루프 (모든 [] 블록이 한 번만 실행되므로 실제로 루프가 아님)와 두 개의 섹션으로 구성됩니다.
-+[[ // 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]]}}
-
프로그램을 수정하지 않으면 모래 시계 솔루션 입니다.
-
홀수 문자 만 가져 와서 실행 하면 99 개의 맥주시를 인쇄합니다.
-
짝수 문자 만 로마 숫자 변환 을 약간 수행 합니다.
누구든지 자신이 선택한 언어로 해당 프로그램을 작성하고 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?
-> Unicorns
및Rainbows
테스트:
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')