Quiny przerywające sygnał


12

Quining ma długą historię - jeśli o niej nie słyszałeś, kliknij znacznik i poczytaj o nim trochę.

Twoje zadanie

Wyprowadza nieskończoną serię 1s (bez innych odstępów [znaki nowej linii, spacje itp.]) DO WYWOŁU SIGINT (zwykle CTRL-C). Po wywołaniu wypisz źródło programu.

Zasady

  • Musi to być poprawny quine:
    • Brak źródła odczytu z dysku.
    • Zobacz wszystkie inne standardowe luki dotyczące quines.
  • Możesz używać dowolnego języka.
  • Ponieważ jest to golf golfowy, wygrywa najkrótsza odpowiedź!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳ To całkiem niezłe. Nie jestem pewien, czy bym to zaakceptował, ponieważ nie generuje on źródła na końcu, po prostu przestaje gasić źródło.
Addison Crump,

1
Skąd wiesz, że ostatni znak nie jest programem wysyłającym swoje źródło? : P (W każdym razie to żartobliwa odpowiedź)
n̴̖̋h̷̭̿a̸̡̅ẗ̵̨h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
Może _ \ _ (ツ) _ / ¯ API?
Addison Crump,

Odpowiedzi:


4

Python 3, 76 bajtów

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

Zauważ, że liczba bajtów obejmuje końcowy znak nowej linii. -printSłuży to również do błędu po quined.


4

Pyth, 25 bajtów

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

Modyfikacja standardowej Quine Pyth'a w celu dodania funkcji try-wyjątkiem.


Czy użycie # działałoby w tym celu? Zaoszczędzi to 2 bajty.
Mike Bufardeci,

@MikeBufardeci Próbowałem tego, ale nie mogłem dostać się do pracy. Spróbuj sam.
Isaacg,

3

AutoIt , 488 429 362 bajtów

Boli mnie mózg, to zbyt 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))

Jest to dość interesujące, ponieważ kompiluje proces potomny, który w zamian wysyła 1 do API ToolTip aż do naciśnięcia ESC. Jeśli ESC zostanie wciśnięty, proces potomny zabija się, a rodzic (ta quine) wznawia wykonywanie i zrzuca swoje źródło do schowka . Musisz uruchomić to z edytora.

BTW: Tworzy plik pomocniczy „a” na dysku.


2
Pliki pomocnicze! \ o /
Addison Crump

3

C 239 221 206 172 bajtów

Na pewno może być dużo krótsza, ale musiałem pisać coś na PPCG ostatecznie .

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

Kompiluje się z gcc 5.2.1 (z różnymi ostrzeżeniami).


1

Haskell, 206 bajtów

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 bajtów

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 - dzięki @ LegionMammal978
Stephan Schinkel

Ponadto, delegatemoże być zastąpiony ()=>. Dlaczego kzmienna lokalna nie jest?
LegionMammal978,

1

Perl 5.10+, 64 bajty

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

Wymaga Perla 5.10+ dla say, który można włączyć za pomocą -M5.010lub -E.

Jak to działa

To kolejna odmiana poniższego quine, który wydaje się używać przy każdym wyzwaniu quine:

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

Zepsuty:

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
'

Ups, początkowo drukowałem 1s rozdzielone znakami nowej linii. Naprawiono kosztem 2 bajtów.
ThisSuitIsBlackNot
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.