신호 방해 퀸


12

Quining은 오랜 역사를 가지고 있습니다. 들어 본 적이 없다면 태그를 클릭하고 조금 읽어보십시오.

당신의 작업

무한 1간격 의 s를 출력합니다 (다른 간격 [줄 바꾸기, 공백 등] 없음). UNTIL SIGINT (일반적으로 CTRL-C)가 호출됩니다. 호출되면 프로그램 소스를 출력하십시오.

규칙

  • 유효한 quine이어야합니다 :
    • 디스크에서 소스를 읽을 수 없습니다.
    • quine과 관련된 다른 모든 표준 허점을 참조하십시오 .
  • 모든 언어를 사용할 수 있습니다.
  • 이것이 코드 골프이기 때문에 가장 짧은 답변이 이깁니다!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 사실 꽤 좋습니다. 소스를 출력하지 않고 소스 출력을 중단하기 때문에 수락할지 확실하지 않습니다.
애디슨 크럼프

1
마지막 문자가 소스를 출력하는 프로그램이 아니라는 것을 어떻게 알 수 있습니까? : P (어쨌든 농담이다)
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
¯ \ _ (ツ) _ / ¯ API?
애디슨 크럼 10

답변:


4

파이썬 3, 76 바이트

s="while 1:\n try:print(end='1')\n except:-print('s=%r;exec(s)'%s)";exec(s)

바이트 수에는 후행 줄 바꿈이 포함됩니다. 또한 -printquining 후 오류가 발생하는 데 사용 됩니다.


4

Pyth, 25 바이트

.xf!p1)jN*2]".xf!p1)jN*2]

try-except 함수를 추가하기 위해 표준 Pyth quine의 수정.


#을 사용하면됩니까? 2 바이트를 절약 할 수 있습니다.
Mike Bufardeci

@MikeBufardeci 나는 그것을 시도했지만 작동하지 못했습니다. 직접 촬영하십시오.
isaacg

3

AutoIt , 488 429 362 바이트

뇌가 아파요. 이건 너무 메타입니다.

$1=BinaryToString
$2=Chr(34)
$s="FileWrite('a','#include<Misc.au3>'&@LF&'Do'&@LF&'ToolTip(1)'&@LF&'Until _IsPressed(Chr(49)&Chr(66))')+RunWait(@AutoItExe&' a')"
Execute($s)
$x="$1=BinaryToString\n$2=Chr(34)\n%sExecute($s)\n$x=%s\nClipPut(StringFormat($x,$1(0x223D7324)&$s&$1(0x0A0D22),$2&$x&$2))"
ClipPut(StringFormat($x,$1(0x223D7324)&$s&$1(0x0A0D22),$2&$x&$2))

이것은 ESC를 누를 때까지 1을 툴팁 API로 계속 출력하는 자식 프로세스를 컴파일하는 방식에서 매우 흥미 롭습니다. ESC를 누르면 하위 프로세스가 자체 프로세스를 종료하고 상위 프로세스 (이 quine)가 실행을 재개 하고 해당 소스 를 클립 보드에 덤프합니다 . 편집기에서이를 실행해야합니다.

BTW : 디스크에 보조 파일 'a'를 만듭니다.


2
보조 파일! \ o /
Addison Crump 10

3

C, 239 221 206 172 바이트

확실히 훨씬 짧을 수 있지만 결국 PPCG에 무언가를 게시해야했습니다 .

*s="*s=%c%s%c,r;h(s){r=1;}main(){signal(2,h);while(!r)printf(%c1%c);printf(s,34,s,34,34,34);}",r;h(s){r=1;}main(){signal(2,h);while(!r)printf("1");printf(s,34,s,34,34,34);}

gcc 5.2.1로 컴파일합니다 (다양한 경고와 함께).


1

하스켈, 206 바이트

import Control.Exception;main=catch(putStr o)e;o='1':o;e::SomeException->IO();e _=putStr(s++show s);s="import Control.Exception;main=catch(putStr o)e;o='1':o;e::SomeException->IO();e _=putStr(s++show s);s="

1

C #, 339 바이트

using d=System.Console;class c{static bool k=1>0;static void Main(){d.CancelKeyPress+=delegate{k=1<0;var s="using d=System.Console;class c{{static bool k=1>0;static void Main(){{d.CancelKeyPress+=delegate{{k=1<0;var s={0}{1}{0};d.WriteLine(s,(char)34,s);}};while(k){{d.Write(1);}}}}}}";d.WriteLine(s,(char)34,s);};while(k){d.Write(1);}}}

멋진 트릭 - 감사 @ LegionMammal978
스테판 Schinkel

또한 delegate로 교체 할 수 있습니다 ()=>. k지역 변수 가 아닌 이유는 무엇 입니까?
LegionMammal978

1

Perl 5.10+, 64 바이트

perl -E '$_=q{$SIG{INT}=sub{say"\$_=q{$_};eval";die};{print 1;redo}};eval'

에 Perl 5.10+가 필요 say하며 -M5.010또는 로 활성화 할 수 있습니다 -E.

작동 원리

이것은 다음 quine의 또 다른 변형으로, 모든 quine challenge에 사용하는 것 같습니다.

$_=q{say"\$_=q{$_};eval"};eval

세분화 :

perl -E '
    $_=q{                        # store contents of quine in $_
        $SIG{INT}=sub{           # install handler for SIGINT
            say"\$_=q{$_};eval"; # print quine
            die                  # break out of eval
        };
        {
            print 1;             # print "1"
            redo                 # restart block
        }
    };
    eval                         # eval $_, executing its contents as code
'

죄송합니다. 처음에는 줄 1바꿈으로 구분하여 인쇄했습니다 . 2 바이트의 비용으로 수정되었습니다.
ThisSuitIsBlackNot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.