信号中断クイン


12

Quiningには長い歴史があります。聞いたことがない場合は、タグをクリックして少し読み上げてください。

あなたのタスク

の無限級数を出力します 1 sを(他のスペース[改行、スペースなど]なし)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]

try-except関数を追加するための標準のPyth quineの修正。


#を使用するとこれに対応しますか?2バイト節約できます。
マイクブファルデシ

@MikeBufardeci私はそれを試してみましたが、仕事をすることができませんでした。自分で試してみてください。
isaacg

3

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

これは、ESCが押されるまでToolTip APIに1を出力し続ける子プロセスをコンパイルするという点で非常に興味深いものです。ESCが押されると、子プロセスはそれ自体を強制終了し、親(このクイン)は実行を再開し、そのソースをクリップボードにダンプしますます。これはエディターから実行する必要があります。

ところで:これは、ディスク上に補助ファイル「a」を作成します。


2
補助ファイル!\ o /
アディソンクランプ

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

ナイストリック-ありがとう@ LegionMammal978
ステファンシンケル

また、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+ forが必要です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改行で区切られたs を印刷していました。2バイトのコストで修正されました。
ThisSuitIsBlackNot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.