Лайки, що перебивають сигнал


12

У Quining довга історія - якщо ви ще не чули про нього, натисніть на тег і прочитайте його трохи.

Ваше завдання

Виведіть нескінченний ряд 1s (без інших інтервалів (нові рядки, пробіли тощо)) UNTIL SIGINT (зазвичай CTRL-C). Коли він викликається, виведіть джерело програми.

Правила

  • Це повинно бути дійсною квиною:
  • Ви можете використовувати будь-яку мову.
  • Оскільки це кодовий гольф, найкоротша відповідь виграє!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ Це насправді чудово. Я не впевнений, чи прийму я це, оскільки він не видає джерело в кінці, він просто перестає виводити джерело.
Аддісон Кримп

1
Звідки ви знаєте, що останній символ - це не програма, яка виводить своє джерело? : P (Так чи інакше, це відповідь)
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
¯ \ _ (ツ) _ / ¯ API, можливо?
Аддісон Кримп

Відповіді:


4

Python 3, 76 байт

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

Зауважте, що кількість байтів включає прохідний новий рядок. Це також використовується -printдля виправлення помилок після відкладання.


4

Pyth, 25 байт

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

Модифікація стандартної Pyth quine для додавання функції "випробування".


Чи використовуєте для цього # роботу? Це дозволило б заощадити 2 байти.
Майк Буфардечі

@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 в API ToolTip, поки не буде натиснуто 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
'

На жаль, спочатку було надруковано 1розділені новими рядками. Виправлено вартістю 2 байти.
ThisSuitIsBlackNot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.