输出您的分数!


54

挑战:

这个概念很简单:编写一个完整的程序以输出其自己的代码高尔夫球得分!

输出应仅是程序的字节数和结尾 bytes

但请等待 ...有一个限制:

  • 您的源代码不能包含字节数中的任何数字
  • 因此,如果您的分数是186 bytes,则您的程序不能包含,或字符168

示例输出:

315 bytes
27 Bytes
49 BYTES

附加规则:

  • 源代码中禁止使用不必要的字符,空格和换行符,但是在输出中完全可以接受结尾的空格和换行符
  • 数字和bytes输出之间应该有一个空格
  • 字母不区分大小写
  • 无需自我检查或阅读源代码
  • 不允许出现标准漏洞

  • 这是,所以

以字节为单位的最短代码胜出!


6
是否需要quine标签,或者代码可以自检?
亚当

3
@Dat,考虑到单词的格式,bytes我怀疑这样做的意图是该计数应包括打印文本所需的字节:bytes
Jeff Schaller

2
输出中的前导空格是否可以接受?
rafa11111

3
如果我的代码长1个字节,我应该输出1 bytes还是1 byte?(请记住,已经有了41个答案,尽管我认为没有任何影响)
Outgolfer的Erik

1
@JoKing很好,我没有在规则中提及大小写,但是如果以某种方式使用大写字母会降低您的分数,那么我一定很想看看您的想法。我说去吧!
X1M4L

Answers:



34

Perl 5,16个字节

还有很多其他方法可以获取,16但这是我的

say afpbytes^PPP

在线尝试!


1
这是如何运作的?
Caird coinheringaahing

9
@cairdcoinheringaahing在Perl中,你可以离开了琴弦上的报价,如果他们看起来像一个文字,不与关键字冲突(并且是非常过时,但我们不关心高尔夫),二元运算符& | ^~也可以应用到串并工作在他们喜欢的ASCII值的列表(当且仅当在两个侧面的字符串)。对于|和一样,^它的作用是将短路字符串扩展为\0。在那之后,您可以轻松地找到与所需输出异或的字母组合,
Ton Hospel

25

7,23个字符,9个字节

54340045141332401057403

在线尝试!

对于完全由数字组成的语言来说,这是一个相当艰巨的挑战,但是我设法做到了……

这只是7编码中的9个字节。(严格来说,这是8个字节(23××-¼,因为可以省略最后两个尾随的1位)),但是对于PPCG来说,第一次要求舍入到整数个字节实际上是一个优势,因为这意味着多余的尾随1位是必需的,因此不受问题的限制。)可逆的十六进制转储:

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

用7编写该程序的主要挑战是将其压缩到10个字节以下(因为不使用01很难编写7 )。其使用与标准“ Hello world”程序相同的结构:

5434004514133240105 7 403
5434004514133240105命令0-5将文字追加到数据空间
                   7      开始数据空间的新部分
                    403将另一个文字附加到数据空间
                         {隐式:将最后一部分评估为命令}
                    4个     交换第一个和第二个部分,并在6个之间有一个空白部分,从而
                         重构将创建第一个部分3   输出的命令
                       (+一些我们不在乎的效果)

换句话说,我们从创建数据空间的两个部分开始;我们有两个文字,每个文字在那里推送一系列命令。第二部分(它们被推入堆栈式,因此第一次推入=最后弹出)是一个相当随意的命令序列,但是使用命令序列来推入5434004514133240105(因此产生数据序列5434664574733246765;在文本中讨论7时,我通常使用普通字体(用于推送文字的命令,对于对应的结果文字,则为粗体)。使用命令序列推入第一部分403,产生463。然后将第一部分复制回程序(隐式行为7)。

463现在由立即做一些事情,而不是(非粗体)命令,只是把文字(粗体)命令。4重新排列这些部分,以使我们的“字符串文字”进入第一部分。然后0执行7最著名的操作:获取一部分数据空间,并重建最有可能创建它的命令序列。在原来的命令序列是所有的情况下0- 5这是100%准确的(毫不奇怪,因为这些命令纯粹推送数据,从而留下他们做了什么明显的证据),所以我们得到了我们原来的顺序5434004514133240105回来。最后,3打印它。

因此,剩下要看的就是字符串的编码。这具有自己的特定领域语言:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(“数字和公共符号”字符集中没有“选择字符集:小写字母”,您必须首先使用其他字符集,因此,我需要使用大写字母使其足够短,以适合有效的10个字符字节限制。)






6

R,16字节

cat(4*4,"bytes")

在线尝试!


是不是因为缺少空间才17?
PmanAce

@PmanAce“输出应仅是程序的字节数和结尾bytes”。该程序为16个字节。
朱塞佩

cat默认情况下,在其输入之间添加一个空格。
朱塞佩

object.size以正确的格式输出(bytes默认情况下包含)。烦人,我能找到最短的是17: object.size(0)-39TIO
罗宾·赖德

1
显然,在Hadley的版本中,长度为1的向量的长度为48,因此必须存在R的版本,该16字节代码可在其中运行:object.size(0)/3
罗宾·赖德

5

Stax,5 个字节

╗↑╞ô╝

运行并调试

打开包装,看起来像这样。压缩源模式使这种琐碎而无趣的事情成为可能。

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

如果您不想使用打包源模式,则6^p`5l@可以使用7个字节。


1
我对这个答案不满意,因为我认为使用打包模式虽然是一种节省字节的聪明方法,但感觉最糟糕的是作弊(并非如此),而充其量却是创意。与其继续对所有Stax 受限来源的答案大加赞赏,我将把这张大票留给所有类似的答案。
caird coinheringaahing'Apr 11'18

1
我当然同意这是没有创造力的。但是我认为错误在于概念restricted-source,而不是语言。这实际上是"5 bytes"使用Stax 进行生产的最直接方法。
递归

我不同意,有一个与挑战(所以为什么我downvoted一个问题),但我还是不喜欢这个答案。不过请不要删除它(只是先发注意),它没有任何问题
Caird coinheringaahing


5

05AB1E,6个字节

₂¤“ÿ¡Ï

在线尝试!


₂      # [26]        | Pushes 26 (many other alternatives).
 ¤     # [2, 6]      | Split out tail.
  “ÿ¡Ï # ['6 bytes'] | ÿ = "Interpolate top of stack.", ¡Ï = "bytes" (compressed)

替代方案₂¤包括:5>₁¤


5
太糟糕了,不起作用。
魔术

5

Bash,21个字节

“阅读您自己的源代码”显然不是这里的胜利者,但是没有其他人提交了,所以这太麻烦了。

echo `wc -c<$0` bytes

在线尝试!


5

视网膜,15字节


 bytes
*>w`..+

该程序计算字符串“ bytes”中至少包含两个字符的子字符串的数量,然后打印此计数和字符串本身。

在线尝试!


5

PHP + HTML,16字节

&#49;&#54; bytes

是的,这已经非常接近漏洞滥用,但是我认为这需要发布。PHP的使用意味着该答案从技术上讲用图灵完备的编程语言编写的。当然,任何其他类似的HTML模板语言也可以使用。

现场演示(无PHP):

&#49;&#54; bytes


击败我吧!和; 通常可以省略!
wedstrom

啊,但是那将是14/15字节
wedstrom





4

Petit Computer BASIC,11个字节

?9+2,"bytes

在打印语句中使用逗号会将光标移至当前选项卡大小的下一个倍数。在SmileBASIC中,默认情况下为4,因此将输出11 bytes(2个空格),但是PTC BASIC使用3,因此输出具有正确的间距。


4

APL(Dyalog Unicode),12个字节

完整程序隐式打印到STDOUT。

'bytes',⍨3×4

在线尝试!

,⍨ 是将字符串追加到乘法结果中。APL的默认混合类型数据显示在数字和后续文本之间放置一个空格。


我可能是错的,但是您的字节数和程序中没有2吗?3 * 4应该没问题
Fyrepenguin 18-3-29

@fyrepenguin嘿,您当然是。我真傻
亚当

4

百叶草,100字节

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

在线尝试!

输出bytes全部大写的零件。((<>))刚开始时,熟悉Brain-Flak的人可能会对所有内容感到困惑,但请放心,他们只是在滥用堆栈高度nilad([]),而不会0产生任何打印出来的s。



4

空格,112字节

只是因为还没有人这样做:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




在线尝试!

由于大写字母的二进制ASCII码较短,因此大写“ BYTES”。该程序中的命令以我自己的可见符号表示为:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End

啊,没有注意到已经有一个空白答案。这是一个较短的答案104字节)。。将再次删除我的。这与添加的突出显示和说明相同。
凯文·克鲁伊森

哦,嗯。我想文字太短了,以至于实现循环实际上不仅会重复PrintChar带来更大的伤害。(我知道,我总是可以放弃最终的NNN,但我真的很喜欢没有错误。)
aschepler

4

Java 5或6,44字节(完整程序)

enum A{A;{System.out.print(0x2C+" bytes");}}

没有TIO链接,因为Java 5/6很旧。在Java 5/6中,可能有一个带代码的枚举,而不是强制性的 main -method,这使得它对于完整程序的挑战更短。

同样,java.lang.NoSuchMethodError: main\nException in thread "main"在打印到STDOUT之后,STDERR中会出现错误,根据元数据可以很好地解决此问题(但如果挑战会导致STDERR出现其他错误,System.exit(0);则可以添加(必须更新八进制数))以防止错误。

@OlivierGrégoire推荐(及其相关的Java技巧)建议。

Java 8+,74个字节(完整程序)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

在线尝试。

Java 8+,16 15字节(lambda函数)

v->0xF+" bytes"

-1个字节感谢@OliverGégoire

在线尝试。


2
从技术上来说,这不是一个完整的程序:)
OOBalance

@OOBalance糟糕,..以某种方式阅读了该内容,感谢您的纠正。XD
Kevin Cruijssen

1
37*2包含7,因此无效。您的替代解决方案也可以。
OOBalance

1
v->0xE+"bytes"v->0xF+" bytes"。无法测试,但仍然可以正常工作。没有什么说分数和“字节”必须分开。
奥利维尔·格雷戈雷18'Mar

1
@OlivierGrégoire我知道,我知道。;)当我发布完整程序时,我很想回答这个问题,因为枚举正在考虑您的技巧提示。您知道仍然支持它的任何在线编译器吗?我希望为测试答案提供一个带有测试代码的链接
。–凯文·克鲁伊森


4

Applescript,15个字节

是的,我要去那里。

9+6&”bytes”

1
但是...Your source code can not include any of the digits from your byte count
nicael

@nicael Dang,您是对的。然后一秒钟...
DonielF

如果我错了,请纠正我,但不是多字节字符(如果我没记错的话,不是3个字节的Unicode字符),所以这个多于11个字节吗?
Caird coinheringaahing

@cairdcoinheringaahing ...射击。你说得对- “为2个字节,这正在增加至15
DonielF

这还不打印11吗?
破坏的柠檬'18


3

批处理,32字节

@@echo %COMSPEC:~-10,-010% bytes

COMSPEC 通常是 %WINDIR%\system32\cmd.exe这样,所以我从结尾提取10到8个字符的子字符串。旧的16字节自引用版本:

@echo %~z0 bytes

幸运的是,字节数不是10的倍数。


@manatwork好,我还没有看到,这是一个新版本。
尼尔

3

JavaScript,16个 15字节

x=>0xf+' bytes'

_=>5*3+' bytes'
尼尔

@Neil 5在这种情况下,代码和字节数都包含一个
。–

@KevinCruijssen Bah,我不敢相信我忽略了这一点。
尼尔

提交的内容必须是完整程序“ 编写完整程序以输出自己的代码高尔夫球成绩!”
Kritixi Lithos '18

3

7压缩-90 14字节

十六进制转储:

00 75 0d 08 c0 00 0d 08 03 00 00 03 04 1d  

使用方法:

保存到名为任何名称的源文件中。

从命令行运行编译器: 7z e [source name]

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.