生成尺寸越来越大的程序


21

在这个挑战中,您将编写一个程序,该程序输出的程序是原始程序长度的两倍。输出的程序应长度两倍的程序输出一个新程序。

例子

如果我的程序是a

< a
> aa

< aa
> aaaa

< aaaa
> aaaaaaaa

规则

  • 没有内置奎因
  • 原始程序必须至少一个字节
  • 该序列理论上应该无限工作
  • 您的程序不允许读取任何内容(文件,stdio)

您的分数是原始程序的大小。


通过读取自身/访问包含代码的位置来访问文件如何?
Conor O'Brien

@CᴏɴᴏʀO'Bʀɪᴇɴ是不允许的,因为这会违反我认为的规则。
Downgoat

2
标签维基建议使用@Doᴡɴɢᴏᴀᴛquine规则,但不会自动应用
Martin Ender


Answers:



8

JavaScript,62 61 37字节


感谢@Doᴡɴɢᴏᴀᴛ的帮助!


原始的[37个字节]:

f=_=>'f='+'_'.repeat((10+f).length)+f

子[74个字节]:

f=______________________________________=>'f='+'_'.repeat((10+f).length)+f

孙子[148字节]:

f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f


备用(通过打印到控制台,并作为完整程序):

原始的[61字节]:

f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

子级[122字节]:

f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

孙子[244字节]:

f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()



怎么运行的!

1.   f=_=>   将函数f定义为console.log(...)

2.   ;f()   运行功能f。

3.   (在功能f中)  

  • console.log(...)   打印以下内容:

    • f=   文字“ f =“
    • ${'_'.repeat((0+f).length+5)   重复f长度的“ _”,以解决不包含在f字符串化中的字符的问题
    • +f}   函数f的字符串化
    • ;f()   文字“; f()”

笔记

  • console.log是必要的,而不是alert因为alert它似乎不能很好地处理长字符串(至少在我的机器/浏览器配置中)
  • _'插入功能f的(未使用)参数的名称中,以确保将它们包含在f的字符串化中。
  • console.log与第一种解决方案相比,第二种解决方案的主要改进(除了摆脱):10在函数中添加而不是将0其强制转换为字符串会使它增加一个字节,从而省去了随后在长度上加1的麻烦,从而节省了一个字节。

0+f还应该将函数转换为字符串
-Downgoat

48个字节:(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Downgoat

@Doᴡɴɢᴏᴀᴛ忘记返回结果通常是可以接受的。将更新。
jrich

@Doᴡɴɢᴏᴀᴛ实际上,由于通常将答案作为函数编写,因此解决方案甚至必须调用该函数吗?
jrich '16

当然,你可以做
Downgoat

6

Minkolang 0.1519 14个字节

"66*2-rIDdr$O.

原来的孩子孙子

说明

"66*2-      $O.    Standard quine formulation

      r            Reverse stack
       I           Push length of stack
        D          Pop n and duplicate top of stack n times
         d         Duplicate top of stack
          r        Reverse stack

rs 之间的位的作用是将结束时间重复足够的次数,以满足倍增准则。.是“停止程序”字符,因此最后的许多句点除了在那里都无济于事。


3

CJam,12个字节

{"_~"1$1$}_~

运行时,将打印

{"_~"1$1$}_~{"_~"1$1$}_~

依次将打印

{"_~"1$1$}_~{"_~"1$1$}_~{"_~"1$1$}_~{"_~"1$1$}_~

等等。

在线尝试!


2

Python 3,51个字节

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

这包括尾随换行符。

哪个输出:

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)
x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

2

GolfScript,11个字节

{: ".~"]}.~

在线尝试!

源代码如何工作

{: ".~"]}.~

{       }    Define and push a code block.
         .~  Push a copy and execute it.
 :           Save the code block in the space character.
             Every subsequent space will now execute the code block.
   ".~"      Push that string.
       ]     Wrap the entire stack in an array.

如果上述源代码执行一次,则堆栈将最终显示为

["" {: ".~"]} ".~"]

其中开头的空字符串对应于堆栈的初始状态(空输入)。

源代码的两个副本将保留最终状态

[["" {: ".~"]} ".~"] {: ".~"]} ".~"]

等等。

接下来发生什么

执行源代码后,解释器将执行以下操作:

  1. 它将整个堆栈包装在一个数组中,然后将该数组压入堆栈。

    对于源代码的单个副本,堆栈现在包含

    ["" {: ".~"]} ".~"] [["" {: ".~"]} ".~"]]
    
  2. 执行该命令puts的目的是打印包裹的堆栈,然后换行。

    puts被定义为{print n print},因此执行以下操作。

    1. print打印堆栈的包装副本而不检查它(即,不将其转换为字符串表示形式)。这发送

      {: ".~"]}.~
      

      到STDOUT并从堆栈顶部弹出堆栈副本。

      堆栈现在包含

      ["" {: ".~"]} ".~"]
      
    2. 执行我们之前定义的代码块。

      :首先保存["" {: ".~"]} ".~"]空格字符,然后压入".~"自身并将]堆栈包装成数组。

    3. n 推送由单个换行符组成的字符串。

      堆栈现在包含

      [["" {: ".~"]} ".~"] ".~"] "\n"
      
    4. 再次执行。但是,当我们第一次调用它时已重新定义它,现在它包含一个数组,而不是代码块。

      实际上,它推动["" {: ".~"]} ".~"],将堆栈保留为

      [["" {: ".~"]} ".~"] ".~"] "\n" ["" {: ".~"]} ".~"]
      
    5. 最后,print在不检查的情况下打印最上面的堆栈项目,然后发送

      {: ".~"]}.~
      

      到STDOUT。


1

𝔼𝕊𝕄𝕚𝕟,26个字符/ 36个字节

⟮ô`\u27ee⦃ᶈ0}\u27ef
`ď2)⟯

Try it here (Firefox only).

请注意,后面有换行符。

说明

标准奎因: ⟮ⒸⅩ222+ᶈ0

修改内容:

  • 使用ô函数输出所有结果,而不是最后结果(使用隐式输出完成)
  • 使用\u27ee⦃ᶈ0}\u27ef\n并关闭复制块,以防止与以后的复制块发生冲突。
  • 使用ď2以重复串两次。
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.