不断增长的奎因序列


18

您将编写一个p1 p2 ... p10满足以下属性的10个程序的序列:

  • pK打印pK+1K从1到9
  • p10 版画 p10
  • 当第一个K程序连接在一起,产生的程序p1...pK打印p1...pK
  • 每个程序的pK字节大小必须大于以前的程序pK-1
  • 所有程序必须使用相同的语言。
  • Q允许内置的奎因功能(例如,多种语言)。

您的分数是10个程序的字节数之和。由于只有十个程序,因此您必须使代码尽可能短。祝好运。


“每个程序pK的字节大小必须大于先前程序pK-1的字节大小”-呵呵,为什么这个奇怪的要求?
nicael

6
@nicael因为这是一个不断增长的奎因序列。
科纳·奥布莱恩

为什么p10会自行打印而不打印p11?这使问题更加棘手。
SuperJedi224 '16

@ SuperJedi224因为根本没有p11。
科纳·奥布莱恩

如果内置的奎因功能被禁止,那么这一挑战将变得更加有趣。
丹尼斯

Answers:


15

严重的是,245个字节:

所有十个程序串联在一起:

Q9ucQc8<WX#dXεj0WX.Q9ucQc8<WX#dXεj0WX.
Q9ucQc8<WX#dXεj0WX.

Q9ucQc8<WX#dXεj0WX.


Q9ucQc8<WX#dXεj0WX.



Q9ucQc8<WX#dXεj0WX.




Q9ucQc8<WX#dXεj0WX.





Q9ucQc8<WX#dXεj0WX.






Q9ucQc8<WX#dXεj0WX.







Q9ucQc8<WX#dXεj0WX.









有一些不可见的字符在执行时变为可见,这是字节7F的奇怪属性。每个程序的尾随换行符都很重要。实际上,无论您是否愿意,Seriously都会在输出中自动添加换行符。这只是计算输出中的换行符数,一旦该数目超过8,它就会删除输出的最后一个字符。这样,p1..pK将为p1..pK所有K> 4 打印。

Q                                  Push source code.
 9uc                               Push \n
    Qc                             Push the number of times it appears in source code.
      8<                           Check if it appears more than 8 times.
        WX     0WX                 If so, run the included code.
          #dX                      Convert string to list, dequeue and discard a newline.
             εj                    Join list back into string.
                  .                Print and halt. (Invisible byte here.)

1
有趣!确实有可能。
科纳·奥布莱恩

7
我可以解释一下Leik wat每个char duz的解释吗
Seadrus

3
应该注意的是,它使用内置的奎因(Quining)内置功能,Q可将程序的源代码推送出去。
马丁·恩德

(并进一步指出,如果没有所述内置机制,则总长度可能会增加150字节左右。)
quintopia

内置的奎因功能可以应对这一挑战。
科纳·奥布莱恩

9

JavaScript(ES6),985

function f(x){x<0||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(0);
 function f(x){x<1||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(1);
  function f(x){x<2||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(2);
   function f(x){x<3||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(3);
    function f(x){x<4||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(4);
     function f(x){x<5||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(5);
      function f(x){x<6||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(6);
       function f(x){x<7||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(7);
        function f(x){x<8||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(8);
         function f(x){x<9||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(9);

我之前误解了规则,所以我以前的回答是错误的。

该函数使用函数提升而不是变量提升,因此它不依赖于程序10。实际上,我认为这是两个或更多串联程序的任意组合的一个提法。

免责声明:现在真的很晚,因此上面的所有内容都可能完全错误。


alert由于功能输出,我认为您不需要。
Mama Fun Roll

哦,我明白了,没关系。
Mama Fun Roll

您可以删除尾部的分号,从而节省20个字节。(请确保也更新其中的模板字符串。)
Mama Fun Roll

1
@ՊՓԼՃՐՊՃՈԲՍԼ我认为分号是连接所必需的,因为我实际上并不包括换行符。
grc

那就别再介意了。
Mama Fun Roll

9

Javascript ES6,1935字节

十个程序:

a=_=>{t=`a=${a};a()`;setTimeout(_=>alert(t.length>200?t:";".repeat(82)+'a=_=>{/*  */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\\s)+g,"$0$1"):u)};a();'))};a()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*  */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*   */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*    */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*     */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*      */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*       */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*        */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*         */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*          */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();

4
看起来很美。
科纳·奥布莱恩

4
所有这些额外的分号只是为了确保程序2比程序1长...
SuperJedi224 '16

您能否使用正则表达式(\S)+和替换项$0$1来保存一些字节?
马丁·恩德

@MartinBüttner也许我会在今天下午尝试
SuperJedi224 '16

2

𝔼𝕊𝕄𝕚𝕟2,214个字符/ 334个字节

ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
 ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
  ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
   ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
    ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
     ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
      ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
       ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
        ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
         ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)

Try it here (Firefox only).

说明

ℹ)                // quine function: get source code
  đ ⬭ď9)          // are there 9 spaces in a row anywhere in the source?
        ?ℹ):      // if so, pass the source itself to implicit output
            ⬭+ℹ) // otherwise, add a leading space to the source and pass to implicit output

该程序对连续9个空格的搜索进行计数,这是第10个程序中前导空格的数量。如果找到匹配项,则输出源代码。否则,输出以空格开头的源代码。


您正在使用哪种编码?在ISO 8859-1编码上似乎是284个字节。在这里进行
Downgoat

我正在使用UTF-8。
Mama Fun Roll

我忘记了它是ESmin 2,因此我将字符计数读为“ 2,214个字符”:P
Conor O'Brien
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.