编写程序以打印该程序的ASCII码之和


14

您的任务是编写一个程序,以打印该程序自身字符的ASCII码之和。不允许您打开任何文件(禁止输入任何内容,例如命令行参数,标准输入或文件)。

打印最低编号(即ASCII码总和最低)的程序将获胜。

这是一个用C编写的程序的示例(不是最短的):

#include <stdio.h>
int main(){
printf("4950");/*i*/
return 0;
}

(后没有新行}


4
看到一种quine解决方案会很有趣:解决方案产生并求和自己的字节。
Joey Adams

1
恕我直言,不是很有挑战性。它可能是蛮力的,尤其是对于那些简单地转储令牌的语言,例如PowerShell,Golfscript等。–
Joey

2
我投了反对票,评论给出了原因,为什么。如前所述,我认为答案的数量并不表示质量。仅仅因为它很容易解决就不会使它成为一个有趣甚至挑战性的挑战。我的看法,至少。
乔伊(Joey)

5
等待。什么?一方面,您抱怨这个问题很简单且不有趣,然后您对我投了反对票(对我而言是-2)。另一方面,您在此问题上张贴了25%的答案(+70给您)。
Alexandru

4
所以您认为这是一场声誉战?很好,我可以轻松更改对CW的回答。从某种意义上说,大量的答案有点是抗议,并且表明产生很多答案是微不足道的。例如,将此与需要四次字母的任务进行比较。另外,我的回答自我(受任务规范的约束)和我的评论自我(希望改善总体站点质量)通常是相当分开的。无论如何,现在我删除它们会更快乐?但是,它们仍然是有效的答案。
乔伊(Joey)

Answers:


10

wc,打印0

有人说“像猫的语言”,所以...

一个空文件:



使用执行wc -c file.wc。在0字节时,我认为这是“不是真正的编程语言”类别的赢家。

猫,印80(以13为基)

80

没有终止换行符,数字80 13等于十进制104。您可以缩短60 17(102 dec)的时间,但我认为“基础13”将更有价值。

编辑:新的wc例子,这个可以作为程序运行。

#!/usr/bin/wc
ÿÿzw17

(按照Latin-1编码-ÿ是一个值为255的字节)

字节总数为2223,输出为:

  2  2 23 ./w

但是wc应该读取一个文件,该文件包含一个0字节以产生数字0,而不是一个空文件。空不为空。
用户未知

用户:有人可能会争辩说,空集中的值之和仍为0。尽管如此,无论如何,wc -c该问题都是被禁止的。
乔伊(Joey)

1
似乎这样做的唯一子句是“禁止输入任何输入内容,例如命令行参数...”,因此不使用-c,然后打印0 0 0(如果作为文件传递的文件禁止使用它,则所有脚本语言都是(也被禁止)
Random832

2
1为wc,-1基作弊行为,1为在基座13开玩笑

我会说wc是一种应用程序,而不是语言。
Thomas Eding

14

PHP,m4和其他类似猫的语言:150

150

使用简单的Haskell程序蛮力发现了该解决方案:

f :: String -> Bool
f s = (read s :: Int) == (sum . map fromEnum) s

main = mapM_ print [filter f $ sequence $ replicate n ['0'..'9'] | n <- [1..10]]

我想这绝对是最短的。
Alexandru

2
@Alexandru:不一定。有可能是程序,长一个或两个字符,使用一些内置的功能,请说出正确打印和像5!在J.
mellamokb

@mellamokb在ASCII字符的总和5!是86,而不是125
彼得·奥尔森

3
@Peter:的确,我展示的是一个可能小于150的解决方案类型的示例,但不是实际的解决方案。我还没有找到一个(顺便说一句,5!是120,而不是125):-)
mellamokb

12

Brainf * ck,255

-.¤

这不会打印数字255,而是打印第255个ASCII字符。

这可能被视为作弊,因为BF编译器会跳过¤。


1
蒂姆:最低的数字获胜,而不是最短的程序。无论如何,我不认为这¤是作弊,因为这只是正常的评论。
Joey

减去一些即可获得较低的分数:----。␦–
Helena

8

Javascript,打印9432 6902

(function a(){b="("+a+")()";c=0;for(i=0;i<b.length;i++){c+=b.charCodeAt(i-0)}alert(c)})()

除非我不正确地理解Haskell,否则这是迄今为止的第一个奎因解决方案。


Haskell代码只是在寻找最小的数字,该数字等于其数字的ASCII码之和。我想这里的大多数答案都是蛮力的。
Joey

可以使用以下方法从89个字节进一步减少到86个字节:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest'3


6

佩尔(Perl),500

say     500

say和之间有两个标签500。:)

perl -E据我所知,这是在规则范围之内的)


1
我喜欢的2个选项卡
史蒂夫P

5

红宝石,版画380

p (380)

右括号后没有尾随换行符。




5

J,150

?!6

请注意,只有1/720的时间是正确的。


3
阶乘6随机吗?嗯,我不这么认为,蒂姆。
MPelletier 2011年


3

元素220

这是我自己创造的语言,在我对这里另一个问题的回答中有记录。

220`!

这是它的工作方式的演练:220将数字压入堆栈。然后`` outputs the top element of the stack. The!`然后在控制堆栈(单独的堆栈)上不执行逻辑,将其设置为1。


2

PHP,打印4440

<?php
for($x=0;$x<15000;$x++)if($x==4440){printf($x);exit;}

2

PowerShell,打印3902

&{[char[]]$myinvocation.Line|%{$s+=+$_};$s}

查看当前运行的行并求和代码点值。


2

INTERCAL,1572年

我不敢相信还没有完成INTERCAL!

DOREADOUT#1572


DOGIVEUP

(包括终止换行符。)此程序将打印出MDLXXII。


1

Perl,打印690

die 690 . $/

或者,如果我们可以发布单线(perl -E

say(570)

打印570。

(没有结尾的换行符)


1

JavaScript, 1750 900860 790

alert(790)

(程序之后或之前的回车(CR \r\x0D))

这些程序是通过蛮力找到的。

更大的价值:

alert(860)%0
alert(900)&&6
document.write(1750)

1

Java -128

我知道不允许阅读stdin,但我想举一个例子说明我如何计算自己的分数。

我的代码对通过stdin传递的自身的ASCII计数求和,并打印出-128

class P{public static void main(String[]z)throws Exception{byte v=0;int b=0;while((b=System.in.read())!=-1){v+=(byte)b;}System.out.println(v);}}

没有尾随新行


我认为您的款项过多。
阿尔法,

1

红宝石,版画300

p   300

有一个空间和之间的标签p300。没有尾随换行符。


1

批处理文件,500

ECHO  500

同样,请注意“ ECHO”(故意大写)和“ 500”之间的两个空格。


1

C,1700年

奇怪-尚无人发布C解决方案(问题中的示例除外)。

main(R){puts("1700");}

最后没有换行符。


1

K(923796795746

我不确定这是否违反规则。它不使用stdin,而是将其自身作为字节和总和的向量打开。

+/1:.z.f

用法:

q scriptname.k

编辑2012.05.08-无需hsym文件句柄2012.05.09-通过转换为字节而不是int保存了1点

2012.05.17-可以通过将文件读取为字节流而不是文本来节省点负载:


1

,198

33*6

6*33

蛮力发现的。在J中,没有1或2个char解决方案,唯一的3个char解决方案是150。除了我的搜索中的任何错误外,也没有其他4字符的解决方案。


在#jsoftware IRC频道中,我们还有<.%:10!20429,还有一个自计数quine +/a.i.2#(,{:)'+/a.i.2#(,{:)'''是1706。


0

公元前1160年

用echo和blanks调用时,包括7个空格的整个String echo 1160 | bc的字节总和为1160。

echo 1160    |  bc

150也适用于不列颠哥伦比亚省:

echo "150" > 150
bc -q 150
150

0

D,9752

这实际上计算出它类似于我的奎因

enum c=q{import std.stdio;void main(){int s;foreach(d;"enum c=q{"~c~"};mixin(c);")s+=d;write(s);}};mixin(c);

0

空格,369

此20个字符的程序将打印数字369,这是其字符(分别为Tab,Space,Linefeed字符,此处分别由T,S,L表示)的ascii值的总和:

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10,有7个制表符,8个空格和5个换行符。)


0

哈斯克尔(7518)

我的奎因的一个小修改:

main=print.sum.map fromEnum$q++show q;q="main=print.sum.map fromEnum$q++show q;q="

0

Brainf * ck,253(或252)

彼得·奥尔森(Peter Olson)的解决方案有一些改进:

---.H

如果允许使用非打印件,则可以通过添加-和替换H为ASCII代码26 来进一步改进。



0

蟒蛇,5440

最高分获胜,对吧?

import sys
print sum(ord(i)for i in open(sys.argv[0]).read())

我只是以为无论如何我都会发布它,这是一个中途的解决方案。

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.