도전
이 과제에서는 소스 언어 S 와 대상 언어 를 지정합니다 T. 당신의 임무는 P언어로 다음 프로그램을 작성하는 것 S입니다. Q언어로 된 유효한 프로그램이 에 대한 T입력으로 제공 P되면 입력 및 출력을받지 않는 R언어로 T된 유효한 프로그램 Q(R), 즉 Q의 소스 코드에 적용된 프로그램이 출력 됩니다 R. 또한 답안으로 사소한 예제 프로그램 Q(더 흥미롭고 더 나은 점수를 얻지 만 더 우수합니다), 결과 프로그램 R및의 결과를 제시해야 R합니다. 이것은 코드 골프이므로 P승리를 위한 가장 짧은 코드입니다 .
다시 말해, 이것은 임의의 유형의 일반화 된 퀴를 생성 할 수있는 "유니버설 퀴 생성자"를 작성하는 것에 대한 도전입니다.
설명
- 소스 언어와 대상 언어가 동일 할 수 있습니다.
- 프로그램
P은 모든 출력 프로그램에서와 같이 하나의 문자열을 입력 (STDIN 또는 이와 동등한 것)으로, 하나의 문자열 (STDOUT 또는 동등한 것)을 출력해야합니다R. - 입력 프로그램
Q도 문자열을 다른 문자열로 변환해야하지만 형식이 더 유연합니다. 문자열 대 문자열 함수, 특정 이름으로 변수를 수정하는 코드 스 니펫, 대상 언어 인 경우 데이터 스택을 수정하는 스니 펫일 수 있습니다.Q예를 들어 주석이 포함되어 있지 않을 수도 있음을 명시 하여의 형식을 추가로 제한 할 수 있습니다 . 그러나 계산 가능한 문자열 대 문자열 함수를 입력 프로그램으로 구현할 수 있어야하며Q, 함수가 작동하는 방식과 추가 제약 조건을 명시 적으로 명시 해야 합니다. - 출력 프로그램
R은 실제로 (일반화 된) 퀴인이어야하며, 그렇지 않으면 입력 (사용자 입력, 파일 등)을 읽지 않아야합니다Q. - 표준 허점 은 허용되지 않습니다.
예
소스 언어로 Python을 선택하고 대상 언어로 Haskell을 선택하고 입력 프로그램 String -> String이라는 함수 의 한 줄 정의 여야한다고 가정합니다 f. 문자열 역전 프로그램을 주면
f x = reverse x
내 파이썬 프로그램에 대한 입력으로 P다른 Haskell 프로그램의 소스 코드를 출력합니다 R. 이 프로그램은의 소스 코드를 STDOUT에 인쇄 R하지만 반전됩니다. 경우 P신원 기능을 부여
f x = x
입력으로, 출력 프로그램 R은 quine입니다.