创建自己的较大版本的程序(五变量)


109

您将要编写一个程序,该程序将输出

  1. 比原始程序大(明智的选择)
  2. 运行时将打印比自己更大的另一个程序(即,新程序也是对此挑战的有效答案)

这是代码高尔夫球,所以最短的答案会获胜。


4
@Kevin,定义是递归的。输出应该是一个程序,其输出大于自身,并且是该问题的答案。所以输出的输出应大于产出,输出的输出的输出应该更大,等等
ugoren

8
我认为您应该阐明规则。一方面,这种程序输出的任何其他代码“显然是无用的”。另一方面,输出中的所有其他代码都是“有用的”,因为它进一步促进了应对这一挑战的目标。
杰森C

5
很抱歉破坏您的挑战。:^)
贾斯汀

2
我认为,这次挑战赛比一场打码高尔夫要好得多。它将带来更多的创造力!
corsiKa 2014年

30
自然,这样的程序应称为奎宁。
Jonathan Van Matre 2014年

Answers:


89

GS2(8636bd8e),0个字节



这将打印单个换行符,其中将打印两个换行符,其中将打印三个换行符,等等。

在线尝试!


3
因为gs2比挑战还要新,所以这在技术上不具有竞争力吗?
DJMcMayhem

24
这个提交比挑战早一个半月。我刚刚对其进行了测试,它可以按预期工作。
丹尼斯

1
这怎么不是漏洞???
Mama Fun Roll

14
@MamaFunRoll为什么会这样?这与空的Retina程序打印1,空的Jelly程序打印0或空的Stuck程序打印Hello,World没什么不同
丹尼斯

2
@Cyoce碰巧换行符在GS2中输出了另一个换行符。
硕果累累

299

H9 +:1个字符

9

那就对了。一个字符。将歌词输出到99瓶啤酒中,这是一个有效程序。所有无关数据都不算在内,但是里面有很多9

输出的程序的输出是对99瓶啤酒的歌词59次。

这个函数给出了运行程序n次数时歌词输出的次数(如果我的计算正确的话):

f(n) = 59n-1

32
给定语言的0字符程序,如果该程序有效,则可能会输出0个字符。而且由于任何有限值x的0 * x = 0,我可以断言我输出的程序实际上比源代码大9999999999999999倍。
nitro2k01 2014年

39
@JohannesH。对于所有(可解决)问题,都有一种编程语言可以以0个字符解决问题。
Cruncher

15
我仍然感动我们将其命名为“ Cruncher定理”,除非它已经被发现。
Erty Seidohl 2014年

22
一个有趣的功能是2*59^n-2,由于“ the”中的“ h” ,它还将包含“ Hello,world!”的实例。
AJMansfield'3

8
看起来你被打败了。
PyRulez '16

118

GolfScript,9个字符

{.'.~'}.~

此代码输出:

{.'.~'}{.'.~'}.~

输出:

{.'.~'}{.'.~'}{.'.~'}.~

输出:

{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~

等等。

我相信这是到目前为止“真正的”图灵完备的编程语言中最短的答案。

说明:

基本上,上面的原始代码是一个“ quine-layer”:它输出一个普通的quine,然后跟随其自身。

在GolfScript中,任何代码块文字(例如{foo})(如果在堆栈上都保持原样)都是一团。因此,{.'.~'}就像其他任何代码块一样,仅输出自身即可。

所述.~的代码的末尾采取最后一个码块中的堆栈上,复制它,并执行该副本。执行时,.'.~'代码块内的代码将复制堆栈上最顶层的项目(即其自身的副本),并追加字符串.~

在程序结束时,GolfScript解释器将对堆栈中的所有内容进行字符串化并输出,在这种情况下,堆栈由{.'.~'}比输入多的一个块以及字符串组成.~

奖金:

在第一个]之前添加一个.(将堆栈中的所有代码块收集到一个数组中,然后再复制它们)会使它呈指数增长:

{].'.~'}.~

输出:

{].'.~'}{].'.~'}.~

输出:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

输出:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

等等。


196
{].'.~'}.~︵ ┻━┻
nitro2k01 2014年


2
@ nitro2k01我的第一个想法完全是:D
Songo

1
是因为HQ9 +不是真实的,还是因为GolfScript不是真实的,或者两者都是引号中的“真实”?
罗杰·佩特

1
@thepiercingarrow源代码类似于
Rod

108

Java 7:0个字符



另存为文件Blank.java。如果将其另存为其他文件,请Blank使用适当的文件名替换任何实例。

然后,首先通过命令行在命令行中运行,然后运行。如果编译失败,请停止。

我将其列为Java 7,因为对于不同版本的Java,它的输出可能会有所不同。

前几个输出(输出到stderr):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
“您将编写一个将输出源代码的程序”该输出可以说不是源代码。而且,根据输出的定义(输出是否必须明确来自stdout),实际上什么也不会输出。
nitro2k01 2014年

43
@ nitro2k01我引用相同的内容:“您要编写一个将输出源代码的程序 ”。一切都是源代码。但是只有一些东西是有效的源代码。另外,没有指定什么是输出,因此在那里我有自由。
贾斯汀

15
@PyRulez是的。我利用了你的规则。您无需接受此答案。当我发布这篇文章时,我知道将会有一场争论,并伴随着许多上下投票。我认为这是值得的。
贾斯汀

29
您确定程序本身会打印输出吗?不仅仅是编译器吗?该程序永远不会被编译,并且本身不会被解释或执行,因此它无法产生任何输出。
VX

12
@ blabla999我不同意-人们不要尝试这些挑战,因为别人做了一些疯狂的事情。我们只是挑战自己,以其他方式做到这一点。正如马克·罗斯沃特(Mark Rosewater)所说,“限制会激发创造力”
corsiKa 2014年

79

HQ9 +,HQ9 ++等,2个字符

QQ

这是输出:

QQQQ

36
我看到了这一点,心想:“哦,不,没有人能战胜这个。” 我开始尝试提出一些建议,然后让我震惊。所以我发布了答案。
贾斯丁

1
@Quincunx Bravo,支持您的回答。
Victor Stafusa 2014年

4
@Quincunx不,我想是的2^2^n,这里的初始程序是第0代。长度递归m -> m^2
Vortico 2014年

3
@Vortico好点。即使我说错了,我的意思是:在代码长度处n,输出变为n^n。但是,那是错误的。当代码长度为时n,输出的长度为n^2
Justin 2014年

2
但是,这很有趣,因为即使前两个迭代也是该问题的可能竞争者。
PyRulez 2014年

29

红宝石27

版本的一个非常细微的修改(通过):

puts <<3*3,3
puts <<3*3,3
3

puts-line的打印次数呈指数增长。

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
受皇帝酋长启发的答案
本·杰克逊

25

Lambda微积分-29

一个简单的lambda术语

(λu.(u u)(u u))(λu.(u u)(u u))

通过减少一个beta的收益来降低这个条件

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

等等等等。这是经典的一个简单变体,(λu.u u)(λu.u u)在lambda演算中是一个quine,在这里双重自我应用意味着我们得到两倍的输出。


7
我认为在lambda演算中,“运行” lambda术语意味着要计算其正常形式,而不是执行一次beta缩减。同样,一个术语可以包含多个redex,因此“减少单个redex”是一个模棱两可的操作。
PetrPudlák2014年

2
您是对的,但是由于该术语没有常规形式,因此在减小步长方面进行讨论是有意义的。由于lambda演算缺少任何固有的集合评估,因此我可以定义“运行”它来减少具有按名称调用语义的单个redex 顶级 redex。
jozefg 2014年

3
好吧,没有正规形式的术语对应于非终止程序。顶级redex的问题在于,一个术语可以有两个redex,一个都不是另一个的子术语。您可以选择要减少的一些标准,但是我要说的是,您与标准的lambda微积分语义之间的距离很远。(无论如何,我
都很

2
(λx.xxx)(λx.xxx):20
Fabio F.

2
(λx。xx)(λx。xxx)缩小为一个步骤
Ben Millwood 2014年

23

SH脚本,9

cat $0 $0

以指数速度增长。

运行为sh whatever.sh或将其设置为可执行文件。

Windows版本在这里


2
在我写此评论时,Quine Wiki页面说从文件系统读取内容是作弊行为。
拉特勋爵16年

3
@LordRatte另一方面,挑战不是写一根奎因。
杰森C

20

直流11

非常简单:

6579792
dfP

每一代重复第一行:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

最后一行由以下指令组成:d复制堆栈上的最后一个值(6579792)(以便每次运行时再获得一个副本),f打印整个堆栈(一堆相同的数字),然后P将数字(6579792)打印为字节流,显示为dfP


16

redcode(递归解决方案)

这是用著名的Imp 编写的redcode中最简单的战士的代码:

MOV 0, 1

执行后,代码将其单条指令的副本写入内存中的下一个地址。然后执行它,等等。


15

Python 3-55

print(open(__file__).read())
f=lambda:print('f()')
f()

通过使用单个字符文件名替换__ file__并将文件保存为该文件,可以使此过程更短,但是我觉得这个答案更符合问题的实质。一轮迭代后,它输出:

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
这不是奎因。参见定义
PetrPudlák2014年

14
@PetrPudlák这个问题也不是任何程序。这是一个奎因变量问题,而不是严格的奎因。
AJMansfield 2014年

6

小话,125 61 57

高尔夫版本看起来几乎不可读,因此我将首先进行解释(并使用真实的标识符)。

这是“最奇怪的产生堆栈溢出方式”自修改方法的一种形式。

该方法打印出一个hello消息及其当前源(仅用于演示)。然后,修改代码以输出更长的字符串并安装。最后,新代码被递归调用。

为了保护自己免受立即失控的侵害,它允许用户在每个周期中进行确认。

在对象中编译:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

通过向任何对象发送“ eatMe_alice”来开始表演;零将做:

nil eatMe_alice

一个不错的变体是不递归地调用新代码,而是通过展开调用栈并重新进入新方法来迭代地调用。这样做的好处是不会导致递归异常。为此,将递归调用(“ self eatMe_alice”)替换为:

thisContext resend

打高尔夫球:

显然,不需要打印和自叫,所以最简单的(对于高尔夫)是简单地在我自己的来源后面添加评论并返回。副作用是,它还会在下一次通话时安装...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

SH脚本,12 8 7

用以下方式存储文件

sed p *

在其自己的空目录中,然后使用sh [file]或设置可执行文件从该目录运行。


具有8个字符的旧替代方法,但不需要自己的目录。用以下方式存储文件

sed p $0

并使用sh [file]或设置可执行文件运行。

12个字符的旧替代方法:

sed -i- p $0

这实际上将输出到程序文件本身,但是未指定输出位置。以指数速率复制自己。


1
您可能仍然有使用机会ed,不想浏览其手册页...
Jens Erat 2014年

4

JavaScript,41个,40个字符

function f(){console.log(f+"f(f())")}f()

第一次运行它时,它将最终输出自身;f()。输出的后续运行导致每个“输入”源打印两次。

alert会短一些,console.log但我不认为多个警报对话框是“ the”输出,而在控制台中调用多行作为输出似乎是合理的。


您可以节省一个字节,"f(f())"而不是"f();f()"
Hedi

这似乎对我不起作用……
破坏的柠檬

4

J,1个字节

'

在线尝试!

显然,开放报价给出了开放报价错误:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

请注意,根据J解释器的性质,错误将打印到STDOUT而不是STDERR。

当以上代码作为代码运行时,将输出:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

然后

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

等等。每次代码运行时,第二行都用四个字节左填充|   ,从而满足了这一挑战的要求。

J,适当的quine变体,25字节

echo,~'echo,:~(,quote)'''

在线尝试!

产出

echo,:~(,quote)'echo,:~(,quote)'

然后,它在单独的行上两次输出自身:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

然后

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

等等。

第一个输出是标准J quine的简单变体。所添加的,:~元素在垂直方向上串联起来,在其中将生成的2D数组打印为同一字符串的两行。



3

网状,11字节,无竞争

"'34'coo1o;

这是标准的quine框架,不同之处1在于每次迭代后都会打印一个额外的内容。在线尝试!

前几个输出:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Microscript II,6个字节

非竞争性语言推迟了挑战。

"qp"qp

第一次迭代会qp在末尾添加一个额外的内容,而每个后续迭代会在开始时添加此原始程序的一个额外副本。



2

EcmaScript 6(51字节):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

它产生一个较长的自身版本,可以产生一个较长的自身版本,可以产生一个较长的自身版本,等等。


2

PHP,38

<?echo fgets(fopen(__FILE__,'r')).';';

它将在每次运行时添加一个分号。


分号是无用的代码吗?
贾斯汀

3
@Quincunx是的,你是对的。但是,您认为有用的代码是什么?
ComFreek 2014年

也许你可以放进去';'。然后,您将获得更长的输出。
贾斯汀

1
为什么不<?=fgets(fopen(__FILE__,'r')).';';呢?
Ismael Miguel

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013 2014年

2

ECMAScript 6(38个字符)

(f=_=>'(f='+f+')();(f='+f+')();')();

哪个输出:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

编辑

您可以这样做(28个字符):

(f=_=>'(f='+f+')();'+f())();

但是,它将无限递归,并且永远不会返回任何内容……但是可以通过执行以下操作(42个字符)来解决:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

将输出:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=表情符号+1
TuxCrafting's

2

普通Lisp,16个字符

(print `(or ,-))

当然,它仅是交互式的,但是能够引用当前的顶级表单可能是最小化满足规格要求的非平凡程序的唯一最佳方法。

真正有趣的是炸毁最快的东西。也许像

(print `(progn ,@(loop repeat (length -) collect -)))


+1对于普通Lisp。在我看来就像你可以跳过`,
daniero 2014年

@daniero如果不带引号,它只会打印原始程序,并且永远不会增长。到那时,您也可以省略or(print -)
Stuart Olsen 2014年

2

朱莉娅66个字符

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

输出(134个字符):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

执行结果的结果(268个字符):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

下一个结果(536个字符):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

下一个结果(1072个字符):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

我希望这是按照规则进行的。

它产生更大的输出,并且输出本身是有效的源代码,再次产生更大的输出。


输出运行后会产生有效的条目吗?
PyRulez 2015年

在第一个示例中,输出为有效代码。这是一个包含5个句点的字符串文字。在第二个示例中,输入julia提示本身不会执行任何操作。我只是想通过按回车键给repl实际上提供换行符会比输入产生更长的输出。
ML 2015年

“ .....”会产生更大的形式吗?
PyRulez

啊,现在我明白了。我只是注意到它必须是递归的……是时候解决我的问题了。感谢您的提示。
ML 2015年

1
我猜代码是按照规则了。
ML 2015年

2

05AB1E,15字节,无竞争

0"DÐ34çý"DÐ34çý

在线尝试!

打印0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
其中打印0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
等等


的两个实例DD都可以替换为Ð
Emigna '16

1
为什么不竞争?
MD XF

2

Evoloop,9×9矩形(81个单元)

Golly随附Evoloop细胞自动机支持以“ 类似奎尼 ”的方式复制自身的模式。具体来说,这些模式每个都包含一个“程序”。通过首先执行程序(创建子程序的“身体”),然后将程序复制到子程序中,图案便会自我复制。

上面的方法适用于更著名的“ Langton's Loops”细胞自动机以及Evoloop,但是Evoloop有一个有趣的区别,那就是很容易创建在每个后代中增长的模式。

(在我看来,有趣的是Evoloop是一个简单的细胞自动机,其中包含可自我复制并以逼真的方式进化的模式!我认为,唯一能做到这一点的细胞自动机就是Evoloop及其后代然而,Evoloop的一个缺点是存在一个特定的“最佳”基因组;进化最终最终会收敛到这一基因组。)

现在,此提交有两个缺点。一个是不清楚细胞自动机的“输出”是什么。但是我认为,一个自我复制的自动机“足够接近”成一团。这当然也同样有趣!另一个缺点是这些模式不仅创建了它们自己的单个副本,而且还创建了一个副本。原始模式的每个副本都试图创建自己的无限多个副本,这些副本最终以破坏性的方式彼此交互。因此,我认为我已经在精神上满足了这项挑战的要求,但没有达到要求。

事不宜迟,此模式为:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

这是模式,它的格式可以复制并粘贴到Golly中:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

好的,但是看起来像什么?看起来像这样:

细胞自动机中的一种模式,可产生越来越多的自身副本。

在上面的动画中,您可以看到初始模式创建了一个更大的女儿,该女儿创建了一个更大的孙女,然后是一个更大的曾孙女,最后是一个更大的曾孙女,开始构造一个更大的孙女。孙女。如果您长时间运行此模式,它将永远持续这种状态(或者它们最终将被能够更快繁殖的进化生物所取代;我不确定)。


1

批量,26

将此代码放在任何.bat文件中,它将继续执行(无限循环),并且文件也会增长。

echo echo %0 ^>^> %0 >> %0

这不是很有效,%0是用于调用脚本的命令,可能没有.BAT扩展名。您可以%~nx0用来获取批处理文件的完整文件名。
杰森C

@JasonC AFAIK,不需要.bat执行。如果文件名是execute.bat,则可以输入executeexecute.bat。两者都会起作用。
ub3rst4r 2014年

文件本身需要有一个.bat扩展来执行,但是当你执行它,你可以离开拓客(当你键入命令不带扩展名,Windows会尝试.com.exe,然后.bat按顺序)。如果文件名是hello.bat>> %0则将写入名为的文件hello,该文件不是原始文件hello.bat(无法执行)。
Jason C


1

OIL,83个字节

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

它首先打印两行中的零,然后将每行与第1行进行比较(如果它们相等)(文件耗尽时就是这种情况),我们将打印单元格26中的内容。结果输出将看起来像一样,除了添加了33,它什么都不做。下次,将添加另一行,依此类推。


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.