Quines di interruzione del segnale


12

Quining ha una lunga storia - se non ne hai mai sentito parlare, fai clic sul tag e leggi un po 'su di esso.

Il tuo compito

Emette una serie infinita di 1s (senza altre spaziature [newline, spazi, ecc.]) FINO A SIGINT (in genere CTRL-C) viene chiamato. Quando viene chiamato, genera l'origine del programma.

Regole

  • Deve essere un quine valido:
    • Nessuna fonte di lettura dal disco.
    • Vedi tutte le altre lacune standard relative alle quines.
  • Puoi usare qualsiasi lingua.
  • Poiché si tratta di un codice golf, vince la risposta più breve!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ In realtà è davvero fantastico. Non sono sicuro che lo accetterei, perché alla fine non emette la fonte, smette semplicemente di diffondere la fonte.
Addison Crump,

1
Come fai a sapere che l'ultimo personaggio non è il programma che emette la sua fonte? : P (È una risposta scherzosa, comunque)
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
¯ \ _ (ツ) _ / ¯ API, forse?
Addison Crump,

Risposte:


4

Python 3, 76 byte

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

Si noti che il conteggio dei byte include una nuova riga finale. Questo viene utilizzato anche -printper errori dopo il quining.


4

Pyth, 25 byte

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

Una modifica dello standard Pyth quine per aggiungere una funzione try-tranne.


Usando # funzionerebbe per questo? Si risparmierebbe 2 byte.
Mike Bufardeci,

@MikeBufardeci L'ho provato, ma non sono riuscito a lavorare. Prova tu stesso.
isaacg,

3

AutoIt , 488 429 362 byte

Mi fa male il cervello, questo è troppo meta.

$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))

Questo è abbastanza interessante nel modo in cui compila un processo figlio che a sua volta continua a inviare 1 all'API ToolTip fino a quando non viene premuto ESC. Se si preme ESC, il processo figlio si uccide e il genitore (questo quine) riprende l'esecuzione e ne scarica la fonte negli appunti . Devi eseguirlo dall'editor.

A proposito: questo crea un file ausiliario 'a' sul tuo disco.


2
File ausiliari! \ o /
Addison Crump

3

C, 239 221 206 172 byte

Sicuramente potrebbe essere molto più breve, ma ho dovuto postare qualcosa sul PPCG alla fine .

*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);}

Compila con gcc 5.2.1 (con vari avvisi).


1

Haskell, 206 byte

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 byte

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

Bel trucco - grazie @ LegionMammal978
Stephan Schinkel,

Inoltre, delegatepuò essere sostituito con ()=>. Perché non è kuna variabile locale?
LegionMammal978,

1

Perl 5.10+, 64 byte

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

Richiede Perl 5.10+ per say, che può essere abilitato con -M5.010o -E.

Come funziona

Questa è l'ennesima variante del seguente quine, che mi sembra di usare su ogni quine challenge:

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

Suddiviso:

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
'

Oops, inizialmente stava stampando le 1s separate da nuove righe. Risolto al costo di 2 byte.
ThisSuitIsBlackNon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.