이 과제에서는 문자열을 입력으로 사용하여 두 가지 가능한 값 중 하나를 출력하는 프로그램이나 함수를 작성해야합니다. 우리는 다음 값 중 하나를 호출합니다 truthy 한 falsy을 . 실제로 진실 하거나 허위 일 필요는 없습니다 . 답변이 유효하려면 네 가지 추가 기준을 충족해야합니다.
-
프로그램을 자신에게 전달하면 진실한 가치가 출력 됩니다.
-
이전 답변에 입력으로 프로그램을 전달하면 (전달중인 프로그램의) 진실한 출력을 출력 해야합니다 .
-
이전 답변을 입력으로 답변에 전달하면 (프로그램의) 잘못된 출력을 출력 해야합니다 .
-
챌린지에 대한 모든 답변 (신규 답변 포함)에서 진실한 결과로 평가되는 무한한 문자열이 있어야합니다 .
이것이 할 일은 체인의 다른 프로그램이 체인의 앞뒤에 있는지 여부를 결정할 수있는 응답 체인을 천천히 작성하는 것입니다.
이 과제의 목표는 연속적인 답변에 적용되는 소스 제한 목록을 작성하여 각각을 이전보다 더 어렵게 만드는 것입니다.
예
체인 (하스켈로 작성)은 다음과 같이 시작할 수 있습니다.
f _ = True
더 오래된 프로그램이 없기 때문에 기준이이 답변에 적용되지 않으므로 가능한 두 값 중 하나만 출력하면됩니다.이 경우 항상 출력 True
됩니다.
다음에 답이 될 수 있습니다.
f x=or$zipWith(==)x$tail x
문자열의 어딘가에 한 행에 문자가 두 번 있다고 주장합니다. 첫 번째 답변에는이 속성이 없지만 두 번째 답변에는이 속성이 없습니다 ==
. 따라서 이것은 유효한 다음 답변입니다.
특별 규칙
-
원하는 횟수만큼 원하는 언어를 자유롭게 사용할 수 있습니다 (무료로 구현 가능).
-
마지막으로 답변 한 사람인 경우 새 답변을 게시하기 전에 7 일 이상 기다려야합니다.
-
프로그램이 자체 소스를 읽지 못할 수 있습니다.
-
4 번째 규칙은 암호화 기능이 관련되어 있는지 검증하기가 매우 어렵 기 때문에 이러한 기능은 허용되지 않습니다.
득점 기준
답변을 추가 할 때마다 체인의 위치만큼 많은 점수를받습니다. 예를 들어 5 번째 답변은 작가 5 점을 얻습니다. 목표는 가능한 많은 점수를 얻는 것입니다. 마지막 답변은 답변자 -∞ 점을 얻습니다. 도전을 “승리”하기보다는 자신의 점수를 극대화하려고하면 더 재미있을 것입니다. 나는 대답을 받아들이지 않을 것이다.
답변
14. X86 어셈블리 (gcc 6.3), 324 바이트
.TITLE "a"#"a" ELTIT.
.data
i:.fill 25,1,0
s:.string "%25[^\n]"
t:.string "->Hi, Retina!"
f:.string "Bye Retina!"
.global main
main:
pushl $i
pushl $s
call scanf
addl $8, %esp
pushl $i
call strlen
addl $4, %esp
sub $21, %eax
jz y
pushl $f
call printf
addl $4, %esp
jmp en
y:
pushl $t
call printf
addl $4, %esp
en:
ret
참고 : 이 됩니다 종료 코드가 0이 아니기 때문에 런타임 오류를 반환합니다. 이데온 에디터에서 이것을 실행하면 프로그램의 결론에 관계없이 모든 표준 출력이 표시됩니다.
- 확실한 출력 :
"->Hi, Retina!"
- 잘못된 출력 :
"Bye Retina!"
만족합니다 :
- 첫 번째 문자는입니다
.
. - 이 포함되어 있습니다
e
. - 길이는 짝수입니다.
- 길이는 완벽한 정사각형입니다.
- 이 포함되어 있습니다
a
. >
문자 가 포함되어 있습니다 .- 정확한 문자열을 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 처음 두 유니 코드 코드 포인트의 합은 5의 배수입니다.
- 10 번째 문자는입니다
"
. - 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 첫 번째 줄은 길이> 5의 회문입니다.
- 첫 번째 줄의 길이는 정확히 21 자입니다 (줄 바꿈 제외).
향후 답변 :
- 첫 번째 문자는입니다
.
. - 길이는 완벽한 정사각형입니다.
- 정확한 순서를 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 두 번째 문자의 유니 코드 코드 포인트 인 mod 5는 4입니다.
- 10 번째 문자는입니다
"
. - 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 첫 번째 줄은 길이 = 21의 회문
답변
9. 레티 나 , 16 바이트
.->0`Hi, Retina!
자체 프로그램을 사용하려면 두 개의 줄 바꿈으로 구분하여 입력 필드에 추가하면됩니다. (프로그램에 두 개의 줄 바꿈이 포함 된 경우 모든 프로그램과 TIO 헤더에서 구분 기호를 변경해야합니다.)
만족합니다 :
- 첫 번째 캐릭터는
.
- 그것은 포함
e
- 길이는 짝수
- 길이는 완벽한 광장입니다
- 그것은 포함
a
- 그것은
>
문자를 포함 - 정확한 문자열을 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
.
죄송 합니다만, 길이 16으로 패딩하도록 강요했습니다.
중복 요구 사항이없는 경우 :
- 첫 번째 캐릭터는
.
- 길이는 완벽한 정사각형입니다.
- 정확한 순서를 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
.
설명
시작 .
은 괜찮습니다. Retina의 암시 적 출력을 억제한다는 것을 의미합니다 (첫 번째 줄에는 구성이 있지만 두 줄 프로그램은 원하지 않습니다). 즉, 명시적인 출력이 필요하지만 옵션은입니다 >
. 운이 좋았습니다. 는 -
이 아무것도하지 않기 때문에 그것의 앞에 갈 수 있습니다.
이제 우리는 프로그램 자체에 접근 할 수 있습니다. 가장 간단한 방법은 리터럴 문자열을 일치시키는 것입니다. 그것은 우리의 프로그램에 나타나도록 보장되어 있으며, 우리는 그것이 기존 프로그램의 일부가 아닌지 쉽게 확인할 수 있으며 결과적으로 우리에게 숫자를 제공합니다. 그러나 잠재적으로 1보다 큰 수 (두 개 이상의 다른 값)를 반환 할 수 있습니다. 0
-limit를 사용하여 이것을 방지합니다. -limit는 첫 번째 일치 만보고 존재하는 경우 계산합니다. 따라서 0
출력은 항상 0
또는 1
입력이 리터럴 문자열을 포함하는지 여부에 따라 달라집니다.
리터럴 문자열에 관해서는 … 글쎄, 우리는 여전히 e
and 를 포함 a
해야하며 문자열은 11 자 이상이어야하므로 길이 요구 사항 (짝수 자릿수)을 일치시켜야합니다. Hi, Retina!
이러한 요구 사항을 충족시키기 위해 발생합니다.
답변
13. Perl 5 , 64 바이트
.1;";1.
\"Hi, Retina!->";$_=<>;chop;print y///c>5&&reverse
eq$_;
만족합니다 :
- 첫 번째 문자는입니다
.
. - 이 포함되어 있습니다
e
. - 길이는 짝수입니다.
- 길이는 완벽한 정사각형입니다.
- 이 포함되어 있습니다
a
. >
문자 가 포함되어 있습니다 .- 정확한 문자열을 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 처음 두 유니 코드 코드 포인트의 합은 5의 배수입니다.
- 10 번째 문자는입니다
"
. - 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 첫 번째 줄은 길이> 5의 회문입니다.
향후 답변 요약 :
- 첫 번째 문자는입니다
.
. - 길이는 완벽한 정사각형입니다.
- 정확한 순서를 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 두 번째 문자의 유니 코드 코드 포인트 인 mod 5는 4입니다.
- 10 번째 문자는입니다
"
. - 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 첫 번째 줄은 길이가 5보다 큰 회문 ( 문자 )입니다.
답변
25, 옥타브 , 196 바이트
새로운 요구 사항 : 탭 대 공백 토론을 피하기 위해 탭을 더 이상 들여 쓰기에 사용할 수 없습니다. 각 줄에는 여전히 탭이 필요하지만 줄의 첫 번째 문자는 될 수 없습니다.
.6;%+->?|" "|?>-+%;6.
f=@(x)1&&cellfun(@(C)any(C==' ')&1&&find(C==' ')>1,strsplit(x,char(10)));
%
%
%
%
%
%
%Henry Jams?Hi, Retina!
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
% ~
만족합니다 :
- 첫 번째 문자는입니다
.
. - 이 포함되어 있습니다
e
. - 길이는 짝수입니다.
- 길이는 완벽한 정사각형입니다.
- 이 포함되어 있습니다
a
. >
문자 가 포함되어 있습니다 .- 정확한 문자열을 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 처음 두 유니 코드 코드 포인트의 합은 5의 배수입니다.
- 10 번째 문자는입니다
"
. - 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 첫 번째 줄은 길이> 5의 회문입니다.
- 첫 번째 줄의 길이는 정확히 21 자입니다 (줄 바꿈 제외).
- 포함합니다
?
. - 포함합니다
|
. - 을 포함합니다
+
. - 길이는 28 줄 이상입니다.
- 다음 문자는 총 5 번 사용됩니다
!"#$.[\]
. 두 번째 문자의 코드 포인트는 60보다 작습니다. Henry Jams?
연속 하위 문자열로 포함합니다 .- 마지막 문자는
~
입니다. - 그것은 포함
C
- 각 줄에는 탭 문자가 포함됩니다.
- 아홉 번째 줄에는 줄 바꿈을 제외한 22 자 이상이 포함됩니다.
- 탭 문자는 줄의 첫 번째 문자가 될 수 없습니다
향후 답변 :
- 첫 번째 문자는입니다
.
. 그리고 21 번째 문자도 있습니다 (고장 법). - 10 번째 문자는
"
이므로 12 번째 문자 (고장 법)입니다. - 첫 번째 줄은 길이 21의 회문입니다.
- 두 번째 문자의 유니 코드 코드 포인트 인 mod 5는 4 이고 해당 코드 포인트는 60보다 작습니다 (인쇄 가능 항목
',1;6
및 탭). - 마지막 문자는
~
입니다. - 길이는 완벽한 정사각형입니다.
- 길이는 28 줄 이상입니다.
- 9 번째 줄은 줄 바꿈을 제외하고 22 자 이상이어야합니다.
- 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 정확한 문자열을 포함
->
,Hi, Retina!
하고Henry Jams?
. - 그것은 포함하고
|
,+
하고C
. - 각 줄에는 적어도 하나의 탭 문자가 포함되지만 줄의 첫 번째 문자는 될 수 없습니다.
- 각 프로그램은 이제 2 허용
.
하고 2"
첫 줄을, 그리고!
에Hi, Retina!
. 이 문자는을 사용하지 않고 다른 곳에서는 사용할 수 없습니다#$[\]
.
설명:
실제로 각 줄마다 많은 바이트가 필요하기 때문에 이것을 196 바이트로 유지하는 것은 약간 어려웠습니다.
첫 번째 줄은 출력되지 않은 스칼라이며 주석이 이어집니다. 두 번째 줄은 문자열 x
을 입력으로 사용하여 다음 작업을 수행 하는 익명 함수입니다 .
strsplit(x,char(10)) % Split at newlines. Can't use a literal newline, or [10,''] due to previous rules
cellfun(@(C) ... ) % Perform the following operation on each line:
any(C==' ') % Make sure there is at least one tab character
1&&find(C==' ')>1 % Make sure the index is higher than 1
1&&cellfun( ... ) % Check that this is true for all lines.
단락 작업 &&
이 우선권을 &
가지며 1&&find
괄호가 필요하지 않은 것이 운이 좋습니다. 그렇지 않으면 나는 이것을 196 바이트로 골프를 칠 수 없습니다.
답변
5. 파이썬 3 , 64 바이트
.012
import sys
print(len(sys . stdin . read()) ** 0.5 % 1 == 0)
온라인으로 사용해보십시오!
입력 길이가 완벽한 정사각형인지 확인합니다.
여러 줄의 입력을 지원하기 위해 18 개의 답변이 제공 될 때 업데이트되었습니다.
업데이트는 체인을 손상시키지 않습니다.
만족합니다 :
- 로 시작
.
- 포함
e
- 짝수 길이
- 완벽한 정사각형 길이
답변
11. JavaScript (ES6), 36 바이트
.11&&(s=>"Hi, Retina!->"&&s[9]=='"')
만족합니다 :
- 첫 번째 문자는입니다
.
. - 이 포함되어 있습니다
e
. - 길이는 짝수입니다.
- 길이는 완벽한 정사각형입니다.
- 이 포함되어 있습니다
a
. >
문자 가 포함되어 있습니다 .- 정확한 문자열을 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 처음 두 유니 코드 코드 포인트의 합은 5의 배수입니다.
- 10 번째 문자는입니다
"
.
향후 답변 :
- 첫 번째 문자는입니다
.
. - 길이는 완벽한 정사각형입니다.
- 정확한 순서를 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 두 번째 문자의 유니 코드 코드 포인트 인 mod 5는 4입니다.
- 10 번째 문자는입니다
"
.
답변
23, Literate Haskell , 196 바이트
새로운 요구 사항 : 들여 쓰기가 훌륭하므로 각 줄에는 적어도 하나의 탭 문자가 포함되어야합니다.
.1+C->| " " |>-C+1.
> main = interact test
> test s = show (check (lines s))
> check = all (elem tab)
> tab = toEnum 9
Henry Jams?
Hi, Retina!
~
만족합니다 :
- 첫 번째 문자는입니다
.
. - 이 포함되어 있습니다
e
. - 길이는 짝수입니다.
- 길이는 완벽한 정사각형입니다.
- 이 포함되어 있습니다
a
. >
문자 가 포함되어 있습니다 .- 정확한 문자열을 포함합니다
->
. - 정확한 문자열을 포함합니다
Hi, Retina!
. - 처음 두 유니 코드 코드 포인트의 합은 5의 배수입니다.
- 10 번째 문자는입니다
"
. - 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 첫 번째 줄은 길이> 5의 회문입니다.
- 첫 번째 줄의 길이는 정확히 21 자입니다 (줄 바꿈 제외).
- 포함합니다
?
. - 포함합니다
|
. - 을 포함합니다
+
. - 길이는 28 줄 이상입니다.
- 다음 문자는 총 5 번 사용됩니다
!"#$.[\]
. 두 번째 문자의 코드 포인트는 60보다 작습니다. Henry Jams?
연속 하위 문자열로 포함합니다 .- 마지막 문자는
~
입니다. - 그것은 포함
C
- 각 줄에는 탭 문자가 포함됩니다.
향후 답변 :
- 첫 번째 줄은 길이 21의 회문입니다.
- 첫 번째 문자는입니다
.
. 그리고 21 번째 문자도 있습니다 (고장 법). - 10 번째 문자는
"
이므로 12 번째 문자 (고장 법)입니다. - 두 번째 문자의 유니 코드 코드 포인트 인 mod 5는 4 이고 해당 코드 포인트는 60보다 작습니다 (인쇄 가능 항목
',1;6
및 탭). - 마지막 문자는
~
입니다. - 길이는 완벽한 정사각형입니다.
- 길이는 28 줄 이상입니다.
- 비어 있지 않은 마지막 줄에는 중복 문자가 없습니다.
- 정확한 순서를 포함합니다
->
. - 정확한 문자열
Hi, Retina!
과를 포함합니다Henry Jams?
. - 그것은 포함하고
|
,+
하고C
. - 각 줄에는 탭 문자가 포함됩니다.
- 각 프로그램은 이제 2 허용
.
하고 2"
첫 줄을, 그리고!
에Hi, Retina!
. 이 문자는을 사용하지 않고 다른 곳에서는 사용할 수 없습니다#$[\]
.