Quines สัญญาณขัดจังหวะ


12

การควินนิ่งมีประวัติอันยาวนาน - หากคุณยังไม่เคยได้ยินให้คลิกที่แท็กและอ่านข้อมูลเล็กน้อย

งานของคุณ

เอาท์พุทชุดอนันต์ของ1s (โดยไม่มีการเว้นวรรค [บรรทัดใหม่เว้นวรรค ฯลฯ ]) UNTIL SIGINT (โดยทั่วไปคือ CTRL-C) ถูกเรียก เมื่อมันถูกเรียกออกโปรแกรมแหล่งที่มา

กฎระเบียบ

  • ต้องเป็นควินินที่ถูกต้อง:
  • คุณสามารถใช้ภาษาใดก็ได้
  • เนื่องจากนี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดชนะ!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ มันยอดเยี่ยมมากจริงๆ ฉันไม่แน่ใจว่าฉันจะยอมรับหรือไม่เพราะท้ายที่สุดแล้วมันไม่ได้เอาท์พุทของแหล่งที่มา
Addison Crump

1
คุณจะรู้ได้อย่างไรว่าตัวอักษรตัวสุดท้ายไม่ใช่โปรแกรมที่ส่งสัญญาณออกมา? : P (มันเป็นคำตอบตลกแล้ว)
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
¯ \ _ (ツ) _ / ¯ API ได้ไหม
Addison Crump

คำตอบ:


4

Python 3, 76 ไบต์

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

โปรดทราบว่าจำนวนไบต์รวมถึงการขึ้นบรรทัดใหม่ นอกจากนี้ยังใช้-printเพื่อข้อผิดพลาดหลังจาก quining


4

Pyth, 25 ไบต์

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

การปรับเปลี่ยนของ Pyth Quine มาตรฐานเพื่อเพิ่มฟังก์ชั่นลองยกเว้น


จะใช้ # work สำหรับสิ่งนี้หรือไม่ มันจะประหยัด 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))

สิ่งนี้ค่อนข้างน่าสนใจในวิธีการที่รวบรวมกระบวนการลูกซึ่งในทางกลับกันจะส่งออก 1 ไปยัง ToolTip API จนกว่าจะกด ESC หาก ESC กดกระบวนการเด็กฆ่าตัวเองและผู้ปกครอง (ควินนี่) ดำเนินการต่อการดำเนินการและการทิ้งแหล่งที่มาของมันไปยังคลิปบอร์ด คุณต้องเรียกใช้จากตัวแก้ไข

BTW: สิ่งนี้จะสร้างไฟล์เสริม 'a' บนดิสก์ของคุณ


2
ไฟล์เสริม! \ o /
Addison Crump

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

Haskell, 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);}}}

Nice Trick - ขอบใจ @ LegionMammal978
Stephan 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

มันทำงานอย่างไร

นี่เป็นอีกรูปแบบหนึ่งของควินดังต่อไปนี้ซึ่งฉันดูเหมือนจะใช้กับความท้าทายทุกประการ:

$_=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
'

อ๊ะเริ่มแรกกำลังพิมพ์1s คั่นด้วยบรรทัดใหม่ แก้ไขที่ราคา 2 ไบต์
ThisSuitIsBlackNot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.