做个差不多


12

我想给他一个愚弄的朋友奎因几乎工作,但变得更模糊和更模糊。

创建一个程序,该程序在运行时将输出该程序,但只输出一个字符。可以添加,删除一个字符或同时添加两个字符(更改一个字符)。但是只有一个字符。

您的分数将是(length of your program) / floor(sqrt(number of times the program almost quines))/ 0无穷大)

number of times the program almost quines是程序在标准输出中只更改一个字符时运行的次数。您的程序可能不接受输入。它还可能不打印已经打印的程序。

您也可能不会添加以前添加的字符,也可能不会从同一索引中删除字符。例如,如果您之前添加1过,然后1又添加了,那么这就是number of times the program almost quines停止的地方。如果删除第一个字符,则不能再次删除第一个字符。如果将第三个字符更改为2,则不能添加2或删除第三个字符。


什么是藜?
2015年

@ Agawa001 quine是可自行打印的程序。

Answers:


7

果酱,0.000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

在此, 表示代码点为128的不可打印字符。请在线尝试。

理念

此方法将代码点在U + 4000000和U + 7FFFFFFF之间的所有UCS字符(原始规范)附加到代码块后的最初为空的字符串中。

我们选择UTF-8,它使用6个字节的字符串对每个字符进行编码,如下所示:

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

因此,我们可以通过计算底数为64的6个最低有效数字,然后将252加到最高有效位并将128加到剩余的有效位数,来对第n个字符进行编码。

计分

2 ** 31 = 2,147,483,648UTF-8字符为6个字节,原始代码的长度为39,所以得分为39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806

怎么运行的

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

我接受这个是因为您的第一(较低)分数。我会允许的。

6

CJam,46字节,65504添加,65505 del,得分0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

在这里测试。

基本形式是标准的通用CJam奎因。对于“几乎是quine”,e#在quine块的末尾有一个注释,我可以在其中自由添加字符而不会影响代码。请注意,注释最初包含一个空格。

程序继续在注释的前面添加字符,从!ASCII值开始,然后按ASCII值的顺序排列。CJam的字符代码在2 16之后回绕,因此在某些时候,这将添加一个空字节。一旦发生这种情况,程序将开始从注释末尾删除字节(以使被删除字符的位置始终不同),直到注释为空。


5

CJam,19字节,65536添加,0 del,得分0.074219

"a"{\)_)++`\"_~"}_~

越简单越好。

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.