задача
Задача очень простая. Учитывая непустую строку, содержащую цифры , прописные и строчные буквы , выведите сумму оставшихся чисел. Например:
a1wAD5qw45REs5Fw4eRQR33wqe4WE
Фильтрация всех писем приведет к:
1 5 45 5 4 33 4
Сумма этих чисел 1 + 5 + 45 + 5 + 4 + 33 + 4 = 97
. Так что выход будет 97
.
Тестовые случаи
a > 0
0 > 0
5 > 5
10 > 10
a0A > 0
1a1 > 2
11a1 > 12
4dasQWE65asAs5dAa5dWD > 79
a1wAD5qw45REs5Fw4eRQR33wqe4WE > 97
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Ответы:
GS2, 2 байта
Попробуйте онлайн!
Как это устроено
источник
Лабиринт , 8 байт
Возьми это, Пиф ...
Попробуйте онлайн!
объяснение
Обычный праймер (украден у Sp3000):
Здесь очень удобно то, что у Labyrinth есть две разные команды ввода,
,
и?
. Первый читает один байт из STDIN или-1
в EOF. Последний читает целое число из STDIN. Он пропускает все, что не является числом, а затем читает первое найденное десятичное число. Этот возвращается0
в EOF, поэтому мы не можем использовать его для надежной проверки EOF здесь.Основным циклом программы является этот компактный бит:
Когда
?
мы читаем целое число (игнорируя все буквы),+
мы добавляем его к промежуточной сумме (которая начинается как один из неявных нулей в нижней части стека). Затем мы читаем другой символ,,
чтобы проверить EOF. Пока мы не в EOF, прочитанный символ будет буквой с положительным символьным кодом, поэтому IP поворачивается направо (с его точки зрения, то есть на запад).;
сбрасывает символ, потому что он нам не нужен, и затем мы снова входим в цикл.После того, как мы в EOF,
,
толкает-1
так IP повороты налево ( на восток) вместо этого.;
снова отбрасывает это-1
,!
печатает промежуточный итог как целое число и@
завершает программу.источник
CJam, 13 байтов
Исправлена работа с вводом без чисел благодаря Денису! Также сохранен байт, заменив массив букв на массив ASCII выше кодовой точки 64. И затем еще один байт, сохраненный Денисом!
Простая транслитерация от букв к пробелам, затем eval и sum. Попробуйте онлайн .
источник
MATL , 8 байт
Попробуйте онлайн!
источник
Сетчатка ,
2211Попробуйте онлайн!
11 байтов (!) Сэкономлено благодаря Мартину!
В основном, просто десятичные в одинарные, а затем считать
1
с.источник
$0
неявным, если замена начинается с$*
. Это очень распространенная модель, и это позволило бы вам победить Пита. ;)Japt, 2 байта
Проверьте это онлайн!
Как это устроено
источник
JavaScript ES6, 35 байт
Как это устроено
Сначала мы заменим каждую строку не цифр
"+"
. Есть четыре основных способа, которыми это может закончиться:Случаи 1 и 2 уже решены. Но нам как-то нужно исправить последнее,
+
чтобы оно не вызывало ошибку. Мы могли бы удалить его.replace(/\+$,"")
, но это слишком дорого. Мы могли бы добавить0
к концу, но это повлияет на последнее число, если строка не заканчивается на+
. Компромисс состоит в добавлении.0
, которое само по себе является действительным числом и не влияет на значение других целых чисел.Вот несколько других значений, которые также будут работать:
Альтернативная версия, также 35 байтов
Другая альтернативная версия, 36 байт
источник
Pyth,
121110 байтК счастью,
s
(преобразовать в int) возвращает0
при применении к пустой строке, поэтому мне не нужно беспокоиться о том, чтоsplit("a1b", "\D+")
возвращает["", "1", ""]
. Точно так жеsplit("a", "\D+")
возвращается["", ""]
.Это даже позволяет мне разделять каждую цифру отдельно, так как
1 + 0 + 0 + 0 + 0 + 2
это то же самое, что и1 + 2
.Спасибо Томасу Ква за байт!
источник
Gol> <> , 4 байта
Так коротко, мне нужен фиктивный текст ...
источник
Perl 6 , 18 байт
Использование:
источник
Желе, 6 байт
Попробуйте онлайн!
Как это устроено
источник
Perl, 21 + 1 = 22 байта
Требуется
-p
флаг:источник
a
?0
;-)Юлия, 35 байт
Это анонимная функция, которая принимает строку и возвращает целое число. Чтобы вызвать его, присвойте его переменной.
Мы используем,
matchall
чтобы получить массив, состоящий из совпадений регулярного выражения\d+
, которые являются просто целыми числами в строке. Мы должны прикрепить 0 к началу строки, иначе для таких случаев, как"a"
, мы будем суммировать по пустому массиву, что вызывает ошибку. Затем мы применяемparse
к каждому совпадению строки, которое преобразуется в целые числа, и берем сумму.источник
parse
может стать,int
если вы не возражаете против предупреждения об устаревании.PHP, 64 байта
Запустите это как
https://eval.in/517817
источник
<?
вместо<?php
?Javascript,
3239 байтПоказать фрагмент кода
источник
Mathematica, 51 байт
Поймать неправильный конец многословных встроенных Mathematica. 1 байт с помощью @DavidC
источник
DigitCharacter ..
сэкономит 1 байтDigitCharacter
не работает как написано, потому что он удаляет все цифры, в то время как мы хотим удалить все буквы ...Total@ ToExpression@StringCases[#, DigitCharacter ..] &
R,
4643 байтаобъяснение
Пробный прогон
Изменить: Заменено
[^0-9]
на\\D
.источник
PowerShell,
2826 байтПринимает ввод,
$args
затем выполняет регулярное выражение,-replace
чтобы поменять буквы+0
, а затем направляет их кiex
(сокращениеInvoke-Expression
и аналогичноeval
).альтернативно
Если вы в порядке с каким-то посторонним выводом, вы можете сделать следующее, также с
2826 байтами:Это займет входную строку
$args
и-split
ее в массиве из-строк на нерабочих числах (удаление их в процессе). Например,1a2b33
превратится в['1','2','33']
. Мы передаем этоMeasure-Object
с-Sum
параметром. Вывод будет выглядеть следующим образом:Edit - durr, не нужно использовать
[ ]
регулярное выражение, так как я больше не указываю список возможных совпадений ...источник
Гема, 39 знаков
Образец прогона:
источник
Серьезно, 13 байтов
Попробуйте онлайн!
Объяснение:
источник
a
. Должно быть однобайтовое исправление.Java, 70 байт
источник
TI-Basic, 106 байт
Работает на калькуляторах ТИ-83/84!
источник
Clojure / ClojureScript, 35 байт
источник
R, 50 байтов
Требуется
gsubfn
установитьИспользует,
strtoi
чтобы привести к числовомуисточник
Рубин 45 байтов
(Первая попытка на работе, вернемся к этому)
источник
POSIX sh + tr + dc,
2725 байтПреобразует любой набор нецифровых чисел (включая завершающий символ новой строки) в
+
оператор, помещает два ноля в стек (в случае, если ввод начинается с нецифрового числа), добавляет их все и печатает результат. Возможно, в нижней части стека остался дополнительный ноль, но нас это не волнует.источник
Луа, 51 байт
Довольно коротко на этот раз! Даже короче, чем Java! Входные данные должны быть аргументом командной строки, чтобы он работал.
Ungolfed
источник
Утилиты Bash + GNU, 29
Если требуется поддержка ввода без номеров (например,
a
), то мы можем сделать это:Утилиты Bash + GNU, 38
1 байт сохранен благодаря @TobySpeight.
источник
a
. В настоящее время мы обсуждаем, является ли это действительным или нет.;
вместо того,||
чтобы всегда добавлять ноль, без вреда.Python 2, 70 байт
Я помещаю ответ Python просто для удовольствия.
Очень просто и использует регулярные выражения, чтобы найти все числа на входе. Попробуйте онлайн!
источник
raw_input
или переключиться на python3. Уменьшенная версия (PY3, 56 байт):import re;print(sum(map(int,re.findall('\d+',input()))))
.Oracle SQL 11.2, 105 байт
Регулярное выражение преобразует буквенные символы в символы ','
XMLTABLE создает одну строку для каждого элемента в строке, используя ',' в качестве разделителя.
Суммируйте строки, чтобы получить результат.
NVL необходим для учета строки без цифры.
источник