Các tín hiệu ngắt tín hiệu


12

Quining có một lịch sử lâu dài - nếu bạn chưa từng nghe về nó, hãy nhấp vào thẻ và đọc một chút về nó.

Nhiệm vụ của bạn

Xuất ra một chuỗi vô hạn 1(không có khoảng cách khác [dòng mới, dấu cách, v.v.)) UNTIL SIGINT (thường là CTRL-C) được gọi. Khi nó được gọi, xuất nguồn chương trình.

Quy tắc

  • Nó phải là một câu hỏi hợp lệ:
    • Không có nguồn đọc từ đĩa.
    • Xem tất cả các sơ hở tiêu chuẩn khác liên quan đến quines.
  • Bạn có thể sử dụng bất kỳ ngôn ngữ.
  • Vì đây là một mã golf, câu trả lời ngắn nhất sẽ thắng!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ Thật sự rất tuyệt. Tôi không chắc chắn liệu tôi có chấp nhận hay không, vì cuối cùng nó không xuất ra nguồn, nó chỉ dừng đưa ra nguồn.
Addison Crump

1
Làm thế nào để bạn biết nhân vật cuối cùng không phải là chương trình xuất nguồn của nó? : P (Dù sao đó cũng là một câu trả lời đùa)
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 6/11/2015

1
¯ \ _ () _ / ¯ API, có thể?
Addison Crump

Câu trả lời:


4

Python 3, 76 byte

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

Lưu ý rằng số byte bao gồm một dòng mới. Điều này cũng sử dụng -printđể lỗi ra sau khi khai thác.


4

Bình thường, 25 byte

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

Một sửa đổi của quine chuẩn Pyth để thêm chức năng thử ngoại trừ.


Sẽ sử dụng # làm việc này? Nó sẽ tiết kiệm 2 byte.
Mike Bufardeci 6/11/2015

@MikeBufardeci Tôi đã thử nó, nhưng không thể làm việc. Hãy tự bắn nó.
isaacg

3

Tự động , 488 429 362 byte

Não tôi đau, cái này quá 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))

Điều này khá thú vị theo cách nó biên dịch một tiến trình con mà đổi lại tiếp tục xuất 1 cho API ToolTip cho đến khi ESC được nhấn. Nếu ESC được nhấn, tiến trình con sẽ tự giết chết chính nó và cha mẹ (quine này) tiếp tục thực thi và đưa nguồn của nó vào bảng tạm . Bạn phải chạy cái này từ trình soạn thảo.

BTW: Điều này tạo ra một tệp phụ 'a' trên đĩa của bạn.


2
Tập tin phụ trợ! \ o /
Addison Crump

3

C, 239 221 206 172 byte

Chắc chắn có thể ngắn hơn rất nhiều, nhưng cuối cùng tôi đã phải đăng một cái gì đó lên 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);}

Biên dịch với gcc 5.2.1 (với các cảnh báo khác nhau).


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

Thủ thuật hay - cảm ơn @ LegionMammal978
Stephan Schinkel

Ngoài ra, delegatecó thể được thay thế bằng ()=>. Tại sao không phải klà một biến cục bộ?
LegionMammal978

1

Perl 5.10+, 64 byte

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

Yêu cầu Perl 5.10+ cho say, có thể được bật bằng -M5.010hoặc -E.

Làm thế nào nó hoạt động

Đây là một biến thể khác của quine sau, mà tôi dường như sử dụng cho mọi thử thách quine:

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

Hỏng:

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
'

Rất tiếc, ban đầu là in 1s cách nhau bởi dòng mới. Đã sửa với chi phí 2 byte.
ThisSuitIsBlackNot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.