Quines de interrupción de señal

12

Quining tiene una larga historia: si no ha oído hablar de él, haga clic en la etiqueta y lea un poco sobre ella.

Tu tarea

Emite una serie infinita de 1s (sin otro espacio [líneas nuevas, espacios, etc.]) HASTA QUE SE LLEGUE SIGINT (típicamente CTRL-C). Cuando se llama, genera la fuente del programa.

Reglas

  • Debe ser una quine válida:
    • No hay fuente de lectura del disco.
    • Vea todas las otras lagunas estándar relacionadas con quines.
  • Puedes usar cualquier idioma.
  • Como se trata de un código de golf, ¡la respuesta más corta gana!
Addison Crump
fuente
55
"Idioma": Máquina de la verdad Fuente:1
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ Eso es bastante bueno, en realidad. No estoy seguro de si lo aceptaría, porque no genera la fuente al final, simplemente deja de emitir la fuente.
Addison Crump
1
¿Cómo sabes que el último personaje no es el programa que genera su fuente? : P (De todos modos, es una respuesta de broma)
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
1
¯ \ _ (ツ) _ / ¯ API, ¿tal vez?
Addison Crump

Respuestas:

4

Python 3, 76 bytes

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

Tenga en cuenta que el recuento de bytes incluye una nueva línea final. Esto también se usa -printpara eliminar el error después del quining.

Sp3000
fuente
4

Pyth, 25 bytes

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

Una modificación del estándar Pyth quine para agregar una función try-except.

isaacg
fuente
¿Usaría # trabajo para esto? Ahorraría 2 bytes.
Mike Bufardeci el
@MikeBufardeci Lo intenté, pero no pude ir a trabajar. Pruébalo tú mismo.
isaacg
3

AutoIt , 488 429 362 bytes

Me duele el cerebro, esto es demasiado 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))

Esto es bastante interesante en la forma en que compila un proceso hijo que a cambio sigue enviando 1 a la API ToolTip hasta que se presiona ESC. Si se presiona ESC, el proceso hijo se suicida y el padre (este quine) reanuda la ejecución y descarga su fuente al portapapeles . Tienes que ejecutar esto desde el editor.

Por cierto: Esto crea un archivo auxiliar 'a' en su disco.

mınxomaτ
fuente
2
Archivos auxiliares! \ o /
Addison Crump
3

C, 239 221 206 172 Bytes

Definitivamente podría ser mucho más corto, pero eventualmente tuve que publicar algo en 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);}

Compila con gcc 5.2.1 (con varias advertencias).

Triston
fuente
1

Haskell, 206 bytes

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="
nimi
fuente
1

C #, 339 bytes

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);}}}
Stephan Schinkel
fuente
Buen truco - gracias @ LegionMammal978
Stephan Schinkel
Además, delegatese puede reemplazar con ()=>. ¿Por qué no es kuna variable local?
LegionMammal978
1

Perl 5.10+, 64 bytes

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

Requiere Perl 5.10+ para say, que se puede habilitar con -M5.010o -E.

Cómo funciona

Esta es otra variación de la siguiente quine, que parece usar en cada desafío de quine:

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

Desglosado:

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
'
ThisSuitIsBlackNot
fuente
Vaya, inicialmente estaba imprimiendo los 1correos separados por nuevas líneas. Corregido a un costo de 2 bytes.
ThisSuitIsBlackNot