задача
Создайте калькулятор, который берет любую строку из файла, стандартного ввода или чего-то еще и суммирует все значения символов.
пример
Input
Hello World!
Output
1085
правила
Калькулятор должен принимать только кодировку ASCII.
Самый короткий код выигрывает.
Примечания
Что касается комментария m.buettner, я должен сказать, что я не думал о многобайтовой части.
Поэтому я оставляю это как бонусную вещь.
Калькулятор должен работать как написано, поэтому нет необходимости изменять перед компиляцией или интерпретацией.
бонус
Благодаря Synthetica , вот еще один бонус,
Программа , которая имеет самый низкий выход при использовании его в качестве кода входных
выигрышейполучает звезду.
Я не хочу изменять это полностью.
Если вы напишите это дополнительно для вывода (правого) значения в UTF-8, вы получите звездочку.
Код, который выполняется быстрее всего на моем ноутбуке (Lenovo Yoga 13 Intel Core i5 3317U 1,7 ГГц, 8 ГБ ОЗУ, 128 ГБ SSD, Intel HD 4000, Windows 8) получает звезду.
Веб-коды будут запускаться сначала в IE11 с чакрой, а затем в FireFox 29.0.1 с SpiderMonkey.
Код Linux будет работать на Raspberry Pi с Raspbian.
Тестовая строка это:
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
Веселого программирования :)
Bonusscoring
Я планирую забить в эту субботу, поэтому 07.06.14, все ответы после этой даты не получат бонусных баллов;)
Вы можете скачать код, который я собираюсь использовать для тестирования здесь, не стесняйтесь, чтобы раскошелиться и улучшить его :)
Небольшое обновление из-за бонуса, мой ноутбук частично сломан, поэтому я сделаю это, вероятно, в следующие выходные, мне очень жаль :(
Hello World!
использование двух разных языков для значений ASCII на моем компьютере.Ответы:
GolfScript, 4 символа
Просто использует оператор сгиба (
*
), чтобы сложить все символы.Если он должен работать с пустой строкой, 9 символов:
Спасибо @PeterTaylor за предоставление альтернативной 6-символьной версии, которая работает с пустой строкой:
источник
0\{+}/
поддерживает пустую строкуAPL (8)
Объяснение:
+/
сумма⎕UCS
значения Юникода⍞
ввод символовисточник
Hello World!
?1085
. Было бы неправильно, если бы он дал другой вывод. Суммирует значения кодовых точек Unicode символов.⍞
означает;)⍞
означает чтение строки с клавиатурыHaskell 36
источник
$ printf "Hello World!" | ./charsum
ECHO "Hello World! | ghci charsum.hs
interact
иshow
вместоgetContents>>=print
:main=interact$show.sum.map fromEnum
Инструменты Shell + GNU, 29 байт
Принимает ввод от стандартного ввода:
Собственный счет: 2385
с, 52 байта
Скомпилируйте с (выдано несколько предупреждений):
Принимает ввод от стандартного ввода:
Собственный счет: 4354
источник
od
команде?od -AntuC
не делает так же, какod -An -tuC
.od-An-tuC
илиod -An-tuC
Javascript ( ES6 ) 51
источник
...
доprompt
? Это новая вещь ES6 или предварительная ES6?[...prompt(x=0)]
приглашение со значением по умолчанию, равным 0 (которое позже будет использовано в сумме), и применили этот ввод в виде массива символов ... ? Что технически будет так же, какprompt(x=0).split("")
, верно?prompt(x=0)
означает «установить x в 0, вызватьprompt
со значением установки x в 0», то есть 0. Это было бы эквивалентно записи(x=0,prompt(x))
gs2 , 1 байт
d
(0x64
/sum
), конечно, суммирует все байты в стандартном вводе.источник
Python 3 - 28 байт
Пример выполнения:
Получает входные данные от stdin,
map
sord
функция к нему, чтобы получить значение ASCII каждого символа,sum
s it иprint
s.источник
print sum(map(ord,raw_input()))
map(ord,input())
наinput().encode()
. Байтовые объекты все еще могут суммироваться, и он остается той же длины.Сборка 8086 (16 бит) -
4741 байтСодержимое
test.com
файла:Фактическая работа выполняется в первых 11 байтах; Мне нужно остальное, чтобы напечатать результат в десятичной записи.
Исходный код (предоставить в качестве входных данных для
debug.com
ассемблера DOS ):Некоторые примечания по коду:
источник
CJam, 3 байта (сумма 260)
Вы можете попробовать это онлайн .
Спасибо jimmy23013 за помощь отрубить 2 персонажа :)
Объяснение:
источник
q1b
корочеBefunge98, 6 байтов, сумма: 445
Любой переводчик должен быть в порядке. Я использую CCBI .
Используйте следующим образом:
Работает для многобайтовых символов и пустых строк.
объяснение
2j
- перепрыгнуть через две следующие инструкции (@
и.
- см. ниже)~
- положить следующий символ в стек+
- добавить значение кода нового символа к текущей сумме. Указатель инструкции переносится на начало, и цикл повторяется~
встречает EOF, он меняет направление указателя, и выполняются две «скрытые» инструкции:.
- напечатать сумму@
- выходисточник
Рубин,
1312 байтsum
это встроенная функция, которая суммирует символы строки. Вычитает 10 для учета новой строки в концеgets
возвращаемого значения.(Отредактировано 4 года спустя, чтобы изменить
x-10
на~9+x
... значение~9
is-10
, но оно позволяет нам убрать пробел междуp
и его аргументом, сохраняя байт.)источник
p
это метод для вывода значения отладки чего-либо в строке.PowerShell - 27
пример
источник
[char[]]"$args"|measure -s
пока есть только одна запись $ arg.Юлия -
117 символов, результирующая сумма =+943536Поскольку вопрос позволяет вводить данные из любого источника, который вы хотите, я выбираю существующую переменную. Предположим, что
A
содержит строку, которую мы хотим оценить.Как оказалось, вы можете суммировать строку напрямую, и она будет вычислять ... однако, из-за способа обработки суммирования символов, если в строке будет нечетное количество символов, она выведет символ, а не целое число любого рода. Таким образом, мы заставляем его приводить к int умножением на 1.
Старая версия:
Будет выводиться в шестнадцатеричной записи (если сумма меньше 256, то будет
0x??
, иначе будет 8 байт0x????????
). Если он используется в коде, где используется результат, он будет работать так же, как и любое другое число (именно так Джулия отображает целые числа без знака).Чтобы увидеть значение результата в десятичном виде, заключите вышеуказанное в
int()
, как вint(sum(A.data))
.Для любого, кто не знает Джулию, вы назначаете
A
точно так же, как вы делаете другие назначения для переменных. ТакA="Hello World!"
илиA="sum(n.data)"
. В случае, когда вам нужно ввести"
или'
символы, есть несколько опций, самый простой из которых (потому что это устраняет необходимость в знании нюансов строковых литералов Julia)A=readline()
, сопровождается простым вводом строки в STDIN (won ' t обрабатывать переводы строк, хотя). Как обычно, escape-последовательность для новой строки\n
, но я не верю, что вы можете использовать это с readline ().источник
n
? Я совсем не знаю Юлию;)n
на,A
чтобы уменьшить результирующую сумму с 988 до 943..data
; но поскольку они являются символами, они дают символьный результат для нечетного числа символов. Умножение на 1 исправляет это.K5, 2 байта (функция), 5 байтов (программа)
функция
программа
Не уверен, был ли K5 создан до или после публикации этого задания. Независимо от ... ЭТО УДИВИТЕЛЬНО !!
В K5, если вы выполняете арифметические операции со строками, он преобразует символы в их ASCII-коды. Так что это просто использует оператор суммы
+/
(на самом деле, это плюс + более).источник
Matlab / Octave 4 байта (бонус: 405)
Этот код является анонимной функцией, которая выполняет свою работу, принимает строку и возвращает требуемое число.
источник
gs2
ответе, но, по крайней мере, с тем же подходом, что и в ответе Юлии, я все равно должен написатьsum(A)
. Я думаю, чтоsum
один не в порядке (даже не будет действительным кодом =).Go (59 символов)
Все в Go по умолчанию является utf8. Кодовый текст в `delimeters, проходящем через себя, дает вывод: 5399.
источник
math.Sum
использованияmap
или подобногоДжольф, 2 байта (неконкурирующий)
Попробуй это здесь!
Хм ... я не знаю, что еще сказать.
источник
Gol> <> , 4 байта (не конкурирующие)
Примечание: этот язык новее, чем вызов.
источник
Javascript ES6, 41 байт
Спасибо @ETHproductions за 2 байта сэкономлено!
источник
_=>[..._].map(y=>x+=y.charCodeAt(),x=0)|x
?Python, 24 байта
Это короче, чем любое решение на Python: анонимная функция без имени, которая принимает строку в качестве аргумента и возвращает сумму.
Попробуйте онлайн!
Во-первых,
x.encode()
превращает его вbytes
объект. Затемsum
добавляет значения кодов символов. Поскольку это лямбда-функция, возвращается значение implicity.Кроме того, можно было
lambda x:sum(map(ord,x))
тот же счетчик байтов.источник
SML,
4236Просто добавив другой язык.
Преобразует строку в массив символов, вычисляет число ASCII для каждого значения и вычисляет сумму всех чисел ASCII.
источник
;
. 36 байт: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/…С 32
источник
main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}
(107 символов), хотя он игнорирует первый символ по какой-то причине. Кроме того, коды выхода POSIX только 8 бит; в башecho $?
.D (функция: 60)
Определенно не в этом, чтобы победить.
Предполагая, что это не должна быть полная программа
Называется так
Выход:
D (программа: 133)
Не считает разрывы строк.
С большим количеством пробелов и более длинными именами переменных для удобства чтения
Чтобы поддерживать разрывы строк во вводе, я мог бы либо использовать
byLine(KeepTerminator.yes)
- правильный путь для 20 символов - или добавить'\n'
к моей строке - который разбивает однострочный ввод и может дать неправильную сумму в Windows из-за CRLF для 18 символов.источник
JavaScript (ES6) 54
5854 байта благодаря nderscore :источник
alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
Дельфы (
8783)Ungolfed
Циклы путем
S
добавленияord
значения char к результату. где х == результатРедактирование:
Спасли 4 символа, переключившись на int64 и изменив добавление к сумме.
источник
к (8 символов)
Перевод Q
Бонусное значение:
источник
J (7)
Так близко, но пока так ... О, хорошо, я думаю, 7 достаточно прилично, так как этот ответ также принимает пустые строки. (Я использую переменную в качестве входных данных для фразы
from a file, stdin or whatever
)Объяснение:
a.
содержит все символы ASCII.x i. y
похож на питона[x.index(i) for i in y]
.Для этого
a. i. y
преобразуетy
в массив значений ASCII+/
это какsum
:+/1 2 3 4 5 6
означает1+2+3+4+5+6
Все это в действии
Для бонуса:
Не плохо, наверное.
Ну, черт возьми.
Спасибо @algorithmshark
Спасибо @marinus
источник
b
кA
результатам со счетом 449.R,
35 символов (сумма 3086)26 байтов (сумма 2305)readline()
на один символ длиннееscan(,"")
ноscan
по умолчанию разделяет ввод на пробелы.Использование:
источник
Japt , 6 байт (не конкурирует)
Этот ответ не является конкурирующим, поскольку Japt был создан после публикации этого запроса.
Довольно просто Попробуйте онлайн!
Как это устроено
источник
¬
какое-то отрицание?url/interpreter.html#new=1
); все, что без него, использует старый набор символов, а все, что с ним, использует новый набор символов.PlatyPar , 2 байта (не конкурирует)
Попробуйте онлайн !
u
генерирует массив всех значений charcode во входной строке иs
находит их сумму.При запуске на себя возвращается
232
.Это похоже на ответ Джона Конора , за исключением того, что я использую байт для преобразования строки в массив кодов символов (который неявно присутствует в Jolf), тогда как он использует байт для получения ввода (что неявно в PlatyPar).
источник