自计分程序


15

要输出您自己的分数,我们遇到了挑战,但似乎所有答案都只是对输出进行了硬编码,这很无聊1。因此,让我们面临新的挑战。您的程序必须输出自己的长度(以字节为单位),后跟字符串" bytes",但如果要防止硬编码的解决方案(如果我们通过删除任何一个字节来减小其大小),则新程序还必须输出其新的字节数,其后仍为" bytes"。输出不必区分大小写。您也可以选择输出尾随换行符。

您的答案将以字节计分,而字节数越少越好。


1:我实际上很喜欢那里的一些答案。


也许您可以将挑战的名称更改为“自我评分可修改程序”或类似的名称。
dylnan '18

您可以使用合规语言还是仅解释语言?
Logern

@Logern您可以使用任何一个。
发布Rock Garf Hunter '18

2
啊 我花了半个小时来制作六角解决方案,但是当我去测试它时,去掉字节使六角形收缩:(
Jo King

1
@WW我的意思是“ 1 bytes在技​​术上是错误的语法,但是假设语言没有内置的输出来以<= 2个字节输出字符串“ bytes”,则程序将长于3个字节,因此它不会重要”-无论如何都没关系。
user202729

Answers:


16

反手40 36 29字节

vv""sseettyybb  ""jjHHOO]

在线尝试! 验证!

如有疑问,请加倍处理。这利用了Backhand一次移动多个步骤来实现冗余的能力。不可打印对象的字节值均为28。

说明:

非辐照程序:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

辐照程序:

如果删除了任何字符,则其后的每个字符都会下移。

vv"sseettyybb
v " s e t y b     The same instructions are still executed

但是,]它没有跳到,而是从程序的结尾反映出来并落在了该代码上O

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code

3

符文附魔,47字节

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

在线尝试!

这或多或少是我的Geiger Counter答案的端口,但是具有不同的输出(它本身就是Klein答案的端口)。

>>yyLLRunic需要生成(至少)一个IP,合并两个IPS并向左反射,以便所有变化都可以生成一个向左移动的IP。可以替换为,yy<<但不保存任何字节。

右侧的反射器将IP推到左下角的字符串,因此移除右上角之一可使IP进入右上角的字符串。沿顶行移去其他任何字节,将顶部反射器调整为位于L上方(使程序进入右下角)。沿底部删除一个字节会调整该反射器(或将其删除),以便最后一个字符隐式地填充一个空格,这使IP可以从右上方反射器的两侧弹跳到右上方字符串中。

不过,多余的空间令人失望。但是所有减少它们的尝试都导致了更大的程序,相同大小的程序,或者不是100%防辐射的程序。此处的Klein和> <>答案都使用了Runic中不可用的功能。


2

> <>43 39字节

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

在线尝试! 验证!

在未辐照的程序中,我们将0加到'(39),在辐照的程序中,我们将跳过0并添加-1到它。如果从顶行删除了某些内容,我们将移至底行,然后输出38 bytes


2

六边形,71字节

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

在线尝试! 验证!

我花了很长时间试图将其变成5号六角形,但是我不得不选择6号以下的标准:(

展开:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

我最初是用)较低的一行制作的,事实证明,这恰恰是5号和6号六角形之间的分度。这意味着当删除一个字节时,大小都会向下移动并破坏路径。我绝对确定5号是可行的。


如果我正确地理解了这一点,您能不能把)一行放低一点,然后在它后面放一个空号,以便它是6号六角形?
EdgyNerd

@EdgyNerd如果你把一个无操作后比它可以被删除,而不影响程序
乔金

2

克莱因 000,41个字节

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

在线尝试! JoKing的验证者

我认为这个答案类似于 JoKing的> <>答案,但我没有阅读> <>,​​因此无法确定。

这里有4种不同类型的字节删除

  1. 从的第一行中删除一个字节/ 在这种情况下,斜杠有效地向左移动了一个空格,将其偏转到底行并阻止了代码的修改部分被执行。这导致我们运行代码("40 bytes"@,输出40 bytes

  2. 第一/从第一线除去。 在这种情况下,我们运行代码"0"+"4"$" bytes"@,这是一种复杂的方法或打印40 bytes

  3. 换行符被删除。这使我们从第二行的末尾开始,结果代码(除去noops)为1("40 bytes"@,仅打印40 bytes

  4. 从最后一行删除一个字节。 这会导致1第一行末尾的左移,并防止当指针偏移时将其添加到堆栈中/"0"+出于这个原因,代码将推送0而不是1,其余代码将0转换为40 bytes

Klein 001,41个字节

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

在线尝试! JoKing的验证者

这是使用其他拓扑的答案。大小相同,但我认为仍有改进的空间。


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.