信号中断脉冲


12

奎因(Quining)历史悠久-如果您从未听说过,请单击该标签并对其进行一些阅读。

你的任务

输出无限个1s(没有其他间隔[换行符,空格等])的序列,直到调用UNTIL SIGINT(通常为CTRL-C)。调用时,输出程序源。

规则

  • 它必须是有效的密码:
    • 没有从磁盘读取源。
    • 查看与奎因丝有关的所有其他标准漏洞
  • 您可以使用任何语言。
  • 因为这是代码高尔夫球,所以最短的答案就是成功!


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳实际上,那太好了。我不确定是否接受它,因为它最后没有输出源,只是停止输出源。
艾迪生·克伦普

1
您怎么知道最后一个字符不是程序输出其源代码?:P(不管怎么说,这是个玩笑的答案)
n̴̖̋h̷̭̿a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 2015年

1
¯\ _(ツ)_ /¯API,也许吗?
艾迪生·克伦普

Answers:


4

Python 3,76个字节

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

请注意,字节数包括尾随换行符。这也采用-printquining后报错了。


4

Pyth,25个字节

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

对标准Pyth quine的修改,以添加try-except函数。


为此可以使用#吗?它将节省2个字节。
Mike Bufardeci,2015年

@MikeBufardeci我试过了,但是无法上班。自己试一试。
isaacg 2015年

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

这很有趣,因为它编译了一个子进程,该子进程反过来一直向ToolTip API输出1,直到按下ESC。如果按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);}}}

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

怎么运行的

这是以下quine的又一个变体,我似乎在每个quine挑战中都使用了它:

$_=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 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.