Напишите программу для печати суммы кодов программы 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

Но 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, насколько я могу судить, это в правилах)


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

5

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

p (380)

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




5

J 150

?!6

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


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


3

Элемент, 220

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

220`!

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



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.

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


1

JavaScript, 1750 900 860 790

alert(790)

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

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

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

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

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. Нет завершающего перевода строки.


1

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

ECHO  500

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


1

С, 1700

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

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

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


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 - Можно сохранить загрузку точек, считывая файл в виде потока, а не текста:


1

J, 198

33*6

и

6*33

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


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


0

до н.э. 1160

вызывается с эхом и пробелами, вся строка, включая 7 пробелов, echo 1160 | bcимеет байт 1160.

echo 1160    |  bc

150 работает для до н.э .:

echo "150" > 150
bc -q 150
150


0

Пробел, 369

Эта 20-символьная программа печатает число 369, которое является суммой значений ascii ее символов (которые являются символами табуляции, пробела, перевода строки, здесь обозначены T, S, L соответственно):

SSSTSTTTSSSTLTLSTLLL

(369 = 7 * 9 + 8 * 32 + 5 * 10, есть 7 вкладок, 8 пробелов и 5 перевод строки.)



0

Brainf * ck, 253 (или 252)

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

---.H

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



0

Питон, 5440

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.