Quine / Error Quine 폴리 글롯


14

귀하의 작업은 간단합니다 : 두 가지 언어로 실행할 수있는 프로그램을 작성하십시오. 언어 1의 일반 quine (자체 소스 코드를 인쇄 함)이어야하며 언어 2의 오류 quine (자체 소스 코드와 동일한 오류 메시지를 생성 함)이어야합니다.

이것은 이므로 가장 짧은 유효한 제출 (바이트)이 이깁니다.

규칙 :

  • 언어는 임의로 비슷할 수 있습니다. 수퍼 셋 / 유사 버전 / 유사한 방언은 허용되지 않습니다.
  • 오류 소멸 규칙은 오류 퀸 만들기의 규칙과 동일합니다 . .


두 가지 다른 방언이 허용됩니까?
MD XF

@MDXF STDERR로 출력하는 것을 제외하고는 정확히 동일한 동작을하는 경우 no입니다. 그렇지 않으면 그렇습니다.
Esolanging 과일

그럼 내 대답 은 유효합니다.
MD XF

@MDXF 유효합니다.
Esolanging 과일

답변:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 바이트

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

온라인으로 사용해보십시오! : Befunge-93 , C

파일 이름에 일치하는 따옴표가 필요하다는 점에 대해 randomdude999에게 감사드립니다.

filename 아래에 저장해야합니다 ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p. 여기서\n 줄 바꿈이다. 이 때문에 C 용 TIO는 의도 한대로 정확하게 실행되지 않습니다. 루 분투에서 작동하도록 테스트되었습니다.

설명 (C) :

프로그램이 컴파일에 실패하고, tcc는 오류 메시지의 일부로 파일 이름을 행복하게 출력합니다. 코드의 시작 부분에 따라 여러 가지 컴파일 오류가 발생할 수 있습니다. ^처음에는을 제공합니다. declaration expected는 짧고와 같은 문제가있는 문자를 포함하지 않습니다 ". 다른 한편으로, gcc와 clang 개발자는 매우 비관적이며 여러 오류를 한 번에 출력하기로 선택했습니다. 그리 좋지는 않으므로 컴파일러를 사용하지 않습니다.

설명 (Befunge-93) :

Befunge는 "문자열 모드를 토글 하는 명령 덕분에 코드를 문자 데이터로 활용할 수 있다는 점에서 Quies에 편리 합니다. 처음에는 쓸모없는 스택 작업을 수행 한 다음 p(put 명령)을 실행하여 NUL 문자를 (0, 1)에 배치합니다. 그런 다음 명령 포인터를 왼쪽에 반영하고 모든 것을 문자열로 읽습니다. 스택의 LIFO 특성으로 인해 왼쪽으로 수행해야합니다. "캐릭터를 감싸고 다시 도달 하면 문자열이 끝납니다. NUL 문자는$ 문자 하여 문자열 중간에 구분 기호를 만듭니다. 그런 다음 3 개의 숫자를 스택에 넣고 NUL 위로 뛰어 넘습니다 (불행히도 명령으로 실행될 때 인터프리터를 중단시키기 때문). 오류 메시지의 정적 부분은 여기서 실행해야합니다. 대부분의 문자는 홉이 아니지만 p명령은 세 가지 인수를 사용하므로 (왜 우리는 3 개의 숫자를 밀었습니까? 그렇지 않으면 문자열의 일부를 여기에서 먹을 것입니다) :& 1문자는 총 4 개의 값을 스택에 푸시합니다. A를 p하고,$(팝 앤 폐기) 명령. 그런 다음 ASCII 코드를 푸시하기 위해 일부 산술이 수행 ^"\n>#001p#"되고 마지막으로 루프는 NUL 문자를 찾아 종료 할 때까지 스택의 모든 값을 문자로 인쇄합니다.


이러한 파일 이름을 지원하는 OS를 찾아서 나열해야합니다. Windows가 지원하지 않는다는 것을 알고 있습니다.
mbomb007

@ mbomb007 리눅스는 일반적으로를 제외한 파일 이름에 인쇄 가능한 문자를 허용합니다 /. 나는 지금 그것을 스스로 테스트 할 수 없습니다.
부정 7 7

1
어떤 버전의 tcc를 사용 했습니까? Arch repos에서 0.9.27-3을 사용하고 있는데 오류는 <define>:1: error: missing terminating " character입니다.
randomdude999

1
좋아, 나는 TIO에 사용 된 정확한 버전의 tcc를 찾았고 파일 이름의 따옴표가 일치하는 경우에만 동일한 오류 메시지가 나타납니다. 이 답변이 작동하려면 따옴표가 일치하지 않아야합니다. 도움이 될만한 것이있다 : 리눅스는 또한 파일 이름에 개행을 허용한다. 파일 이름 끝에 줄 바꿈과 따옴표를 추가 할 때의 tcc 출력 : (long gist link) . 따라서 줄 바꿈과 두 번째 줄에 내용을 인쇄하는 방법을 찾아야합니다.
randomdude999

감사합니다. 이를 설명하기 위해 솔루션을 업데이트했습니다. 타의 추종을 불허하는 인용이 그러한 문제를 야기한다는 것은 매우 흥미로운 사실입니다.
negative seven

0

Applesoft BASIC / Commodore LCD 기본 , 13 바이트

?SYNTAX ERROR

Apple] [에뮬레이터에서 RESET키를 눌러 기본 모드로 들어갑니다.
Commodore LCD 에뮬레이터 RightArrowEnter에서 BASIC 응용 프로그램을 시작하십시오.
두 가지 ?SYNTAX ERROR모두 대문자로 자동 입력 되므로 모든 대문자를 입력하지 마십시오 .


2
경쟁하지 않는 상태는 챌린지 후에 작성된 언어로 제출하도록 예약되어 있습니다. 규칙에 따라 유효하지 않은 경우 삭제하십시오. 이것이 유효해야한다고 생각하기 때문에 OP의 확인을 먼저 기다리십시오 (작동한다고 가정).
HyperNeutrino

@HyperNeutrino 감사합니다. 편집했습니다.
MD XF

1
그렇다면 이것도 의심해야 할 것입니다. 이 질문은 보이는 것보다 오히려 더 잔인합니다 ...
Ørjan Johansen

1
@ ØrjanJohansen 글쎄, 이것에 대해 잘 모르겠습니다. 기술적으로 Commore LCD에는 표준 오류 바이트 스트림이 없었으므로 실제로 오류가 발생합니까?
MD XF

1
@ ØrjanJohansen ? 이것이 유효한지 아닌지를 말하기는 불가능하다는 것을 의미한다고 생각합니다. OP로부터 확인을 기다릴 수 있습니까?
MD XF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.