元保龄球高尔夫


22

您的任务是创建最短的程序(A),该程序输出另一个具有最大唯一字节的程序(B),然后又输出原始程序(A)。从本质上讲,您正在打高尔夫一对我们的羽绒带程序(又称定期重复奎因),而另一半则打保龄球。A和B可能使用不同的语言。

规则和计分

您的最终分数是<number of unique bytes in B> / <number of bytes in A>。最高分获胜。请注意,理论上的最高分数是256。

  • 程序A必须至少一个字节长
  • 程序B不能完全由无操作组成,即,至少一个字符必须以某种方式影响输出。
  • 奎因标准规则适用于这两个程序。值得注意的是,在任何情况下都不允许使用错误提示。

为了保持答案格式的一致性,请从以下类似内容开始回答:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>

为了清楚起见,我认为您将不得不澄清第二点。角色完全不操作意味着什么?
小麦巫师

唯一字节是指共享字节,还是两者之间的相似性?
KrystosTheOverlord

@KrystosTheOverlord,它将简单地位于程序B中,与程序A无关。例如,aaaaa具有一个唯一字节,并且abcde具有5个唯一字节。
Beefster

1
我正在等待程序A处于一元或多语种的程序
无知的体现

4
@EmbodimentofIgnorance程序A是根据字节数而不是唯一字节计分的。Lenguage /一元将比分可怕
乔金

Answers:


14

JaptJapt,得分:255/38 = 6.71

程序A

"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd

程序B的长度超过8kB,以至于链接断开,因此我不会粘贴整个内容。这是一个示例:

#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²

我找不到使NUL字节工作的方法,这就是为什么程序B只有255个唯一字符的原因。程序B本质上由一个程序的255个副本组成,其中每次更改单个无关字节,并且忽略前254个执行。

为了说明,我会开始这个 A的简化版,使得所得B是更易于讨论。

"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd

该程序基于具有基本有效负载能力的Japt quine。开头的字符串包含该程序其余部分的副本,iQ ²插入引号和副本以创建整个程序的字符串表示形式,然后¯23修剪自身及其后的所有内容。结果字符串是一个输出程序A的程序

"iQ ²¯23
3õ@i'#+Xd"iQ ²

我将此字符串称为U

A的最后一行重复U了一遍,每次都有很小的变化。具体地,对于每个数字X范围[1...3]其输出"#c" + U,其中c是用则charCode字符X。Japt的默认行为是输出不带引号且以逗号分隔的字符串,因此这是我们的简化A的输出(请注意,每个#和之间都有一个不可打印的字节"iQ

#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²

我们称这个简化乙

简化的B具有简单的结构,在#c和之间交替U。幸运的是,对于每个答案,每个#cU都被视为用逗号分隔,并且在这种情况下,除了最后一个U对输出没有影响之外,其他所有行为都是如此。简化B唯一会影响输出的部分是这样的:

"iQ ²¯23
3õ@i'#+Xd"iQ ²

这与U我们已经知道的输出简体A 相同。

简化A和程序A的唯一区别是[1...3]实际程序不会为范围生成副本,而是为范围生成副本[1...256]。这将导致256个版本,#c每个版本都有不同的字符,尽管最后一个版本“Ā”是一个多字节字符,因此不会添加任何唯一字节,但是除最后一个以外的所有内容都将U被忽略。


很不错的:)将这个工作38个字节?
毛茸茸的

@Shaggy 27每当保存字节时都需要调整,但除此之外似乎还可以。
卡米尔·德拉卡里

1
@Shaggy评分基于B中唯一字节的数量,并且只有256个可能的字节。据我所知,即使B的新版本也不包含Null字节。
卡米尔·德拉卡里

顺便说一句,尝试了一些使它与空字节一起工作的方法,但是都失败了。
毛茸茸的

5

程序A,Gol> <>,256/20字节= 12.8

"44XFL|r2ssl3%Q4s]|H

在线尝试!

程序B,Gol> <>

"44XFL|r2ssl3%Q4s]|H	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

在线尝试!

程序在输出自身后跟每个字节与输出自身之间交替。

说明:

"            Wrapping string literal pushes the first line to the stack backwards
 44X         Push 256
    FL|      Push the range from 0 to 255
       r                  Reverse the stack
        2ss               Push a quote
           l3%            If the stack length is divisible by 3
              Q4s]|       Only take the top 20 characters
                   H      And output the stack

1

程序A:05AB1E,得分:256/41 256/31 字节 = 8.258 ...

0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ

在线尝试。

程式B:05AB1E

0"D34çý₅Ýç'q†22ǝ"D34çýq 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÝç'q†22ǝ

在线尝试。

说明:

05AB1E 的最短是这个:0"D34çý"D34çý14个字节@OliverNi提供。我的答案是通过添加quine的修改版本₅Ýç'q†vy27ǝD}J

0            # Push a 0 to the stack
             #  STACK: [0]
 "D34çý₅Ýç'q†vDy27ǝ}J"
             # Push the string "D34çý₅Ýç'q†vDy27ǝ}J" to the stack
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J"]
  D          # Duplicate the string
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J","D34çý₅Ýç'q†vDy27ǝ}J"]
   34çý      # Join the stack by '"'
             #  STACK: ['0"D34çý₅Ýç'q†vDy27ǝ}J"D34çý₅Ýç'q†vy27ǝD}J']
₅Ý           # Push a list in the range [0,255]
  ç          # Convert each integer to an ASCII character
   'q†      '# Filter the "q" to the front
      22ǝ    # Insert it at index 22 in the string (replacing the second '₅')
             # (and output the result implicitly)

程序B到达时将立即终止q,因此实际的程序B为:

0"D34çý₅Ýç'q†22ǝ"D34çýq

之后的所有内容都将被忽略,并且堆栈的顶部(0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ)会隐式输出。

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.