Напишите программу для печати суммы кодов программы ascii

14

Ваша задача - написать программу для вывода суммы ASCII-кодов символов самой программы. Вам не разрешено открывать какие-либо файлы (любые входные данные, такие как аргументы командной строки, стандартный ввод или файлы запрещены).

Программа, которая печатает наименьшее число (то есть имеет наименьшую сумму кодов ASCII), побеждает.

Вот пример (не самый короткий) такой программы, написанной на C:

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

(нет новой строки после })

Александр
источник
4
Было бы интересно увидеть решение quine: то, которое производит и суммирует свои собственные байты.
Джои Адамс
1
Не очень сложно имхо. Это может быть тривиально, особенно для языков, которые просто сбрасывают токены, таких как PowerShell, Golfscript и т. Д.
Joey
2
Я понизил голосование, и комментарий дает причину, почему. Как я уже отмечал ранее, я не считаю количество ответов показателем качества . Тот факт, что его легко решить, не делает это интересной или даже сложной задачей. Мое мнение, по крайней мере.
Джои
5
Подождите. Какая? С одной стороны, вы жалуетесь на то, что вопрос простой и не интересный, а затем вы меня отрицаете (-2 для меня). С другой стороны, вы публикуете 25% ответов на этот вопрос (+70 для вас).
Александру
4
Так вы видите это как битву за репутацию? Хорошо, я могу легко изменить свои ответы на CW. В некотором смысле большое количество ответов было чем-то вроде протеста и показало, что набрасывать множество ответов тривиально. Сравните это, например, с задачей, в которой алфавит требовался четыре раза. Кроме того, мое автоответчик (привязанный к спецификациям задачи) и комментирующий себя (в надежде улучшить общее качество сайта) часто довольно разные. Во всяком случае, счастливее, теперь, когда я их удалил? Они все еще были действительными ответами, все же.
Джои

Ответы:

10

туалет, печать 0

Кто-то сказал "кошачьи языки", так что ...

Пустой файл:



Выполнить с wc -c file.wc. При 0 байтах я думаю, что это победитель в категории «не совсем язык программирования».

Также

кот, отпечатки 80 (база 13)

80

Не завершающий перевод строки, число 80 13 эквивалентно 104 в десятичном виде. Вы можете пойти короче с 60 17 (102 декабря), но я подумал, что «база 13» будет стоить больше очков гиков.

РЕДАКТИРОВАТЬ: Новый wcпример, этот можно запустить как программу.

#!/usr/bin/wc
ÿÿzw17

(Как закодировано в Latin-1 - ÿ является байтом со значением 255)

Сумма байтов составляет 2223, вывод:

  2  2 23 ./w
Random832
источник
Но wc должен прочитать файл, содержащий 0 байт, чтобы получить число 0, а не пустой. Пусто не ноль.
пользователь неизвестен
user: Можно утверждать, что сумма значений в пустом множестве по-прежнему равна 0. Тем не менее, wc -cв любом случае это запрещено в вопросе.
Джои
1
Единственное предложение, которое, по-видимому, делает это: «Любой ввод, такой как аргументы командной строки ... запрещен», поэтому не указывайте параметр -c, затем он печатает 0 0 0(если файл, передаваемый как файл, запрещает это, тогда все языки сценариев также запрещено)
Random832
2
+1 для wc, -1 для базовой измены, +1 для шуток в базе 13.
Я бы сказал wc, это приложение, а не язык.
Томас Эдинг
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]]
Джои Адамс
источник
Я думаю, что это самый короткий.
Александру
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
Тим: выигрывает самое маленькое число, а не самая короткая программа. В любом случае, я не думаю, что ¤это обман, так как это обычный комментарий.
Джои
Вы получаете более низкий балл, вычитая немного больше: ----. ␦
Хелена
8

Javascript, печать 9432 6902

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

Пока что это первое решение для Quine, если я не правильно понял Haskell .

Питер Олсон
источник
Этот код на Haskell просто ищет наименьшее число, которое будет равно сумме кодов ASCII его цифры. Я думаю, что большинство ответов здесь были сделаны грубой силой.
Джои
Может быть дополнительно уменьшено с 89 до 86 байт с помощью:(function a(){b="("+a+")()";for(i=c=0;i<b.length;i++)c+=b.charCodeAt(i-0);alert(c)})()
WallyWest
6

Perl 500

say     500

Есть две вкладки между sayи 500. :)

(Запускать как однострочник perl -E, насколько я могу судить, это в правилах)

swilliams
источник
1
Мне нравятся 2 вкладки
Стив П
5

Рубин, принты 380

p (380)

После закрывающей скобки нет завершающего символа новой строки.

Ventero
источник
5

PowerShell

(230)

отпечатки 230, очевидно.

детеныш
источник
5

J 150

?!6

С оговоркой, что это будет правильно только 1 / 720th времени.

mellamokb
источник
3
Случайный на факториале 6? Хммм, я так не думаю, Тим.
MPelletier
4

Питон, печать 781

print  781

Два пробела.

FogleBird
источник
1
Мне особенно нравятся 2 пробела.
Стив П
3

Элемент, 220

Это язык моего собственного творения, и он задокументирован в моем ответе на другой вопрос здесь .

220`!

Вот пошаговое руководство о том, как это работает: 220помещает это число в стек. Затем `` outputs the top element of the stack. The! `Затем выполняет логическое не в стеке управления (отдельный стек), устанавливая его в 1.

PhiNotPi
источник
2

PHP, печать 4440

<?php
for($x=0;$x<15000;$x++)if($x==4440){printf($x);exit;}
rintaun
источник
2

PowerShell, печать 3902

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

Просматривает текущую строку и суммирует значения кодовых точек.

детеныш
источник
2

ИНТЕРКАЛ, 1572

Я не могу поверить, что никто еще не сделал INTERCAL!

DOREADOUT#1572


DOGIVEUP

(Включает завершающий перевод строки.) Эта программа выводит MDLXXII.

Хлебница
источник
1

Perl, печать 690

die 690 . $/

Или, если мы можем опубликовать однострочники ( perl -E)

say(570)

Отпечатки 570.

(Нет завершающих строк)

swilliams
источник
1

JavaScript, 1750 900 860 790

alert(790)

(Возврат каретки (CR, \rили \x0D) после или перед программой)

Эти программы найдены путем перебора.

Большие значения:

alert(860)%0
alert(900)&&6
document.write(1750)
JiminP
источник
1

Java-128

Я знаю, что читать 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

Существует пространство и вкладки между pи 300. Нет завершающего перевода строки.

Lowjacker
источник
1

Пакетные файлы, 500

ECHO  500

Также обратите внимание на два пробела между «ECHO» (заглавными буквами) и «500».

Альфа
источник
1

С, 1700

Странно - еще никто не опубликовал решение C (исключая пример из вопроса).

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

Нет новой строки в конце.

ugoren
источник
1

К ( 923 796 795 746 513)

Я не уверен, что это противоречит правилам или нет. Он не использует stdin, он открывается как вектор байтов и сумм.

+/1:.z.f

Использование:

q scriptname.k

редактировать 2012.05.08 - не нужно hsym дескриптор файла 2012.05.09 - сохранено 1 балл путем преобразования в байт вместо int

2012.05.17 - Можно сохранить загрузку точек, считывая файл в виде потока, а не текста:

skeevey
источник
1

J, 198

33*6

и

6*33

Нашел это грубой силой. В J нет 1 или 2-символьных решений, и единственное 3-символьное решение есть 150. За исключением каких-либо ошибок в моем поиске, также нет других 4-символьных решений.


На IRC-канале #jsoftware у нас тоже было <.%:10!20429, а +/a.i.2#(,{:)'+/a.i.2#(,{:)'''в 1706 - счетный счетчик .

AlliedEnvy
источник
0

до н.э. 1160

вызывается с эхом и пробелами, вся строка, включая 7 пробелов, 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, которое является суммой значений ascii ее символов (которые являются символами табуляции, пробела, перевода строки, здесь обозначены T, S, L соответственно):

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="
AardvarkSoup
источник
0

Brainf * ck, 253 (или 252)

Незначительное улучшение решения Питера Олсона:

---.H

При условии, что недопечатаемые файлы разрешены, их можно еще улучшить, добавив -и заменив Hкод ASCII 26.

Pontus von Brömssen
источник
0

Scala 1090

println (1090)

Пользователь неизвестен
источник
0

Питон, 5440

Самый высокий балл побеждает, верно?

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

Я просто подумал, что выложу это в любом случае, потому что это наполовину готовое решение.

Джоэл Корнетт
источник