Создайте программу, которая суммирует все целые числа, найденные в строке, которая установлена как переменная в программе (таким образом, программе не нужно обрабатывать ввод). Целые числа разделены нечисловыми числами (все, кроме 0, 1, 2, 3 ... 9).
Примеры:
e7rde f ,fe 43 jfj 54f4sD
= 7 + 43 + 54 + 4 = 1085
= 564 545,5445-32JIFk0ddk
= 64 + 545 + 5445 + 32 + 0 = 60860ab0
= 0 + 0 = 0
Дополнительные примечания:
- Поддержка Unicode не обязательна, но разрешена
-n
(гдеn
целое число) не считается отрицательнымn
, а дефисом, за которым следуетn
.
Ответ может быть напечатан на экране (но не обязательно).
Самый короткий ответ (в символах) победит.
5a-3
(мой код пропустил-
бы, если бы он сразу следовал за числом, но не, если бы перед ним не было числа).Ответы:
Perl, 15
Ввод
$_
, сумма в$c
:источник
Ruby 1.9, 21 символ
Чтобы напечатать решение для stdout, требуется 2 дополнительных символа:
И чтобы читать из стандартного ввода вместо предопределенной переменной, необходимо использовать еще 3 символа:
Для Ruby 1.8 замените
?+
на,"+"
чтобы получить рабочее решение из 22 символов.источник
scan
короче чемsplit
. Таким образом, ваше решение становитсяeval s.scan(/\d+/)*?+
- 21 символов.scan
, спасибо!eval
и* '+'
Python (60)
источник
Рубин -
3634 символов36 символов, если вы хотите, чтобы результат был напечатан.
Предполагается, что ввод присутствует в виде строки в s.
источник
JavaScript (ES6), 30
Аннотированная версия:
источник
Windows PowerShell, 23
252931С выходом.
На самом деле, без вывода точно так же, вы просто отправили бы его куда-нибудь еще, где это необходимо.
источник
J -
4038 знаковЛенивая версия. Требуется библиотека строк.
источник
Джава
вне конкурса;)
источник
JavaScript [30 байт]
источник
Лабиринт ,
2921 байт(Отказ от ответственности: Лабиринт новее, чем этот вызов.)
Кроме того, в Лабиринте нет переменных, поэтому я выбрал обычную программу ввода / вывода.
Это было довольно просто из-за того, как работают команды ввода Лабиринта.
?
пытается прочитать подписанное целое число из STDIN и останавливается на первой не цифре. Если он не может прочитать целое число (поскольку следующий символ-
не является цифрой или любой другой не цифрой, или мы достигли EOF), он вернется0
вместо этого.,
с другой стороны читает любой последующий байт и толкает значение байта. Если этот вызывается в EOF, он вернется-1
вместо этого.Итак, вот некоторый псевдокод для решения:
Работа с отрицательными числами правильно усложняет это решение. Если бы не они, я бы получил 8-байтовое решение:
источник
PHP - 37
Без печати;
С печатью (38):
источник
Perl, 16 символов
Принимает ввод
$_
, вывод продолжается$r
. Последняя точка с запятой является излишней, но она, вероятно, понадобится, когда программа сделает больше вещей. Добавитьsay$r
для вывода.источник
wc -c
.J - 23 символа
Не победитель, но мы видим довольно редкий примитив в действии.
Разъяснение:
_"."0 y
- Для каждого символа во входной строкеy
попробуйте прочитать его как число. Если вы не можете, используйте_
вместо этого значение по умолчанию (бесконечность).,_=
- Проверьте каждый результат на равенство_
, а затем запустите последний массив из 0 и 1 в вектор. ("."0
всегда добавляет слишком много измерений к результату, поэтому мы исправим это здесь.)y,:' '
- Добавить строку пробелов под входной строкой.}
- Используется как здесь,}
называется Item Amend , и он использует список 0 и 1 слева в качестве индексов, чтобы выбрать строку для рисования в правом аргументе. Итак, что происходит, для каждого столбца с правой стороны мы берем исходный символ, если он может быть прочитан как число, а в противном случае мы берем пространство под ним. Следовательно, мы покрываем любые нечисловые символы пробелами.+/".
- Теперь преобразуйте всю эту строку в список чисел и суммируйте их.источник
gs2, 4 байта
Кодируется в CP437 ; третьи байты
E9
.W
читает все числа/-?\d+/
из строки,#Θ
отображает абсолютное значение,d
суммы.(gs2 тоже новее этой задачи, но его
read-nums
команда - полное совпадение.)источник
Smalltalk (Smalltalk / X) (51 символ)
используя регулярное выражение:
wo regex:
вход в с
источник
Р, 30
Здесь
x
имя переменной.Пример:
источник
Javascript - 43 символа
Я знаю, что это долго, но не было решения JS, так что :)
a
это строкаc
содержит ответ.источник
Tcl, 30
Предполагается, что вход находится в переменной
$a
(формально, вa
) и сохраняет ответ в результате интерпретатора. Ввод / вывод оставлен в качестве упражнения.источник
APL, 16 байт
⎕d
является встроенным, содержащим цифры (0-9).b
присваивается вектору 0/1, где 1 дается символам, которые являются цифрами.b
используется для сжатия заданного массива символов, а затем повторно используется для его расширения, который вставляет пробелы.⍎
это eval APL, который в этом случае преобразует строку в вектор целых чисел.+/
вычисляет сумму.источник
+/2⊃⍞⎕VFI⍨⎕AV~⎕D
Свифт 3, 78
где
s
строкаисточник
Perl - 24 символа
Ввод в $ _
источник
На самом деле, 14 байтов (не конкурирующих)
Попробуйте онлайн!
Это представление не является конкурирующим, потому что на самом деле это немного новее, чем этот вызов.
Эта программа поддерживает кодовую страницу CP437 для ввода.
Объяснение:
источник
С 100
Попробуйте онлайн!
Более ранняя 85-байтовая версия, которая немного обманывает путем жесткого кодирования строки внутри программы:
Чтобы фактически использовать 85-байтовую программу, вам нужно присвоить переменную следующим образом:
источник