Входные данные:
Целое число
Выход:
Сумма самого ввода + длина входа + каждая отдельная цифра ввода.
nr + nr-length + {sum of digits} = output
Примеры:
Вход: 99
Выход: 99
(nr) + 2
(nr-длина) + (9 + 9)
(цифры) →119
Вход: 123
Выход: 123 + 3 + (1 + 2 + 3)
→132
Правила соревнований:
Входные данные также могут содержать отрицательные входные данные, которые разрешаются специальным образом. Знак
-
/ минус также+1
для длины, и является частью первогоdigit
.
Например:Вход:
-123
Выход:-123 + 4 + (-1 + 2 + 3)
→-115
- Вы можете предположить, что ни ввод, ни вывод никогда не будут выходить за пределы (32-разрядного) целого числа.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Полусвязанные: подсчитать сумму всех цифр
code-golf
number
arithmetic
integer
Кевин Круйссен
источник
источник
-123
цепочка сумм должна быть(-1 + 1 + 2 + 3)
вместо(-1 + 2 + 3)
, верно?-1 + 2 + 3
. Для этой задачи я решил объединить-
знак / минус с первой цифрой в одну отрицательную цифру, чтобы сделать ее немного интереснее.Ответы:
05AB1E,
2820188 байтовобъяснение
Попробуйте онлайн
Сохранено 10 байтов благодаря @Adnan
источник
ÐgsS'+ýO
.Python 2, 39 байт
Тестирование
Используя тот же трюк eval, что и в моем Pyth-ответе .
источник
eval
иjoin
знать , чтобы взять на себя отрицательную первую цифру для отрицательного входа? Я ожидал-123
бы стать чем-то вроде- + 1 + 2 + 3
выписанного, но, по-видимому, это не так ... (Или это так, и оно автоматически объединяется- + 1
в-1
качестве второго шага?)-123
становится"-+1+2+3"
после присоединения, что дает правильный результат, когда выeval
его. Попробуйте,eval("-+1")
например, что приводит к-1
.- + 1
->- 1
. Оператор унарный плюс существует, поэтому,- + 1
по сути, такой же, как-(+(1))
.+a
так же, какa
, для чисел.Pyth,
1110 байтСпасибо @LeakyNun за байт!
Тестирование
объяснение
источник
CJam, 18
Попробуйте онлайн
Объяснение:
источник
Брахилог ,
3532 байтаобъяснение
источник
XSLT 1.0 (без EXSLT), 673 байта
Слегка надутый:
Запустите с помощью xsltproc:
Да,
ild.xsl
передается дважды: сначала как документ XSLT, а затем как документ XML, подлежащий преобразованию. Входной документ должен присутствовать, потому что процессору XSLT обычно требуется один, чтобы начать работать. (XSLT предназначен для определения преобразования из входного документа в выходной документ; выполнение преобразования исключительно с параметрами командной строки, как я это сделал здесь, нетипично.) Для этой программы любой правильно сформированный XML-документ будет достаточен в качестве ввода и, поскольку XSLT является приложением XML, любое правильно сформированное XSLT-преобразование по определению является правильно сформированным XML-документом.источник
name="i" select="..."
например<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
т.д. Я думаю , еслиxsltproc
заботится о пробельном он не будет препятствовать неупомянут все по.MATL, 20 байтов
Попробуйте онлайн
Все тесты
объяснение
источник
Clojure, 102 байта
Анонимная функция, которая создает строку, которая выглядит
(+ -123 4 -1 2 3 )
и обличает ее. Все довольно многословно, как есть, строит строку из числа, его длины, а затем отображает каждый символ строкового представления числа, кроме минуса на себя, плюс пробел и минус, остается тем жеВы можете увидеть это работает здесь: https://ideone.com/FG4lsB
источник
Дьялог АПЛ ,
191716 байтПринимает строку и возвращает
≢
длина+
плюс#
в⍎
оценке корневого пространства имен'\d'⎕R'&+'
чисел добавления регулярных выражений со знаком плюс,,
за которым следует⊢
неизмененная строка–3 благодаря ngn
источник
Matlab,
7667 байт9 байтов сохранено благодаря @Luis Mendo
Объяснение:
источник
sum(t+1)+n
корочеsum([n numel(t) t])
постоянный ток, 57 байт
Разъяснение:
Это было намного сложнее, чем я ожидал! Хороший вызов :)
источник
10~
на aA~
!Bash + coreutils, 36 байт
Объяснение:
В sed
\B
также совпадает между двумя последовательными несловыми символами, поэтому для отрицательного числа он совпадает между «^» и «-». Обратите внимание на0$1
трюк, необходимый для того,\B
чтобы дать0-1+2+3
, например.Пример выполнения: «input.txt» содержит все контрольные примеры в формулировке вопроса
Выход:
источник
$()
. Есть два альтернативных способа сделать это с помощью обратных кавычек, но оба дают 36-байтовое решение в конце:sed 's:\B:+:g'<<<0$1
иsed s:\\\B:+:g<<<0$1
.PowerShell v4, 48 байт
Это должно работать в v2 +, но я тестировал только в v4.
Принимает участие
$n
. Создает новый массив с,
оператором, состоящим из$n
и.length
когда$n
преобразуется в строку. Объединяет с этим строку,$n
приведенную как массив символов. Затем весь этот массив-join
редактируется вместе с ним+
перед передачейiex
(аналогичноeval
). Результат остается на конвейере, а вывод неявным.Например, для ввода
-123
массив будет выглядеть так(-123, 4, -, 1, 2, 3)
, а строка после-join
будет выглядеть-123+4+-+1+2+3
. ЗатемInvoke-Expression
происходит, и результат,-115
как и ожидалось.источник
Коэффициент с
load-all
, 175 байтовНу, это не очень коротко. Особая обработка унарного минуса действительно раздражает; Я думаю, я мог бы сделать это лучше, и я буду, возможно.
Используя это регулярное выражение подстановки:
Мы можем превратить контрольные примеры OP в набор тестов Factor.
источник
C #, 118 байт
источник
1+ ++i
совершенно нелепоs[i]<46
чтобы проверить на минус++i+1
?SpecBAS - 147 байт
Создает строку, которая затем запускается. К сожалению
EXECUTE
, не работает с?
сокращением дляPRINT
, ноTEXT
сохранил 1 символ.источник
C #, 106 байт
Я бью Java мой байт, моя жизнь завершена
Ungolfed (вроде)
источник
(n)=>{....
для анонимной лямбдыn=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
увеличить его до 89 байт: хотя вам придется добавить +18,using System.Linq;
что вы также забыли в своем текущем ответе.Java 8,
1741361221071059378 байт-14 байт благодаря @LeakyNun .
-15 байт благодаря @cliffroot .
Объяснение:
Попробуйте онлайн.
источник
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
наконец, я почувствовал, как игра в гольф на Java @ LeakyNun работает ваш вариант? сначала он дает неправильные ответы, а затем вылетает.0
.38
на48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
яйPerl 6 - 30 байт
Как буквально, как это становится
Используйте это как анонимную функцию
источник
JavaScript (ES6), 38 байт
Использует старый трюк с присоединением и оценкой. Сохраните 4 байта, если я могу настаивать на вводе строки:
источник
C ++, 255 байт
источник
Perl 5 - 37 байт
Ввод в $ _
источник
Javascript (с использованием внешней библиотеки) (45 байт)
Используя библиотеку, которую я написал, чтобы привести LINQ в Javascript, я смог написать следующее:
источник
С
13211611380Функция
f()
принимает входные данные в виде строки и возвращает результат в виде целого числа. Полная версия программы (113 байт):Требуется один аргумент.
источник
Perl, 27 байт
Код 22 байта + 5 для
-paF
.объяснение
Использует
-a
опцию autosplit с пустым delimiter (-F
), создающим массив переданных цифр. Использует магическую переменную,$"
которая контролирует, какой символ используется для объединения массива, когда он интерполируется в строку (мы используем"+"
здесь), и тот факт, что список используется в скалярном контексте и возвращает длину списка (количество цифр).использование
Perl, 27 байт
Код 22 байта + 5 для
-paF
.Альтернативное решение, это гораздо более читабельно, не более байтов. Я предпочитаю другой, так как он выглядит более загадочно!
источник
постоянный ток, 56 байт
Не короче, чем у Джо, но несколько иная реализация (и та, которая принимает отрицательные числа как входные данные вместо команды вычитания). Возможно, можно играть в гольф больше, но обед длится так долго.
источник
R, 108 байт
Немного опоздал на вечеринку снова, но здесь это идет:
Чтобы обычно разбивать цифры любого числа (например, суммировать их), R требует, чтобы мы сначала преобразовали в строку, а затем разбили строку на строковый вектор. Чтобы суммировать элементы, вектор строки должен быть преобразован в числовое или целое число. Это вместе с исключением с суммой цифр отрицательного числа съедает много байтов.
Исключение может быть немного изменено (до 96 байт), если разрешены предупреждающие сообщения.
В этом случае строковый вектор преобразуется в целое число напрямую с помощью
as.integer
. Однако, для отрицательных чисел первого элемент вектора будет знаком минус:"-"
. Это вызывает некоторые проблемы, например:as.numeric(c("-",1,2,3))
вернетсяNA 1 2 3
и предупреждающее сообщение. Чтобы обойти это, удалите NA, а затем умножьте первый элемент на,-1
прежде чем брать сумму.источник
RProgN, 30 байт
Explination
Попробуйте онлайн!
источник
Perl 5 , 22 + 1 (-p) = 23 байта
Попробуйте онлайн!
источник
AWK ,
64 6361 байтПопробуйте онлайн!
Ссылка TIO имеет 6 дополнительных байтов
s=j=0;
для многострочного ввода. Это самый короткий метод, который я мог придумать. Мне любопытно, можно ли это сделать корочеAWK
.Сохранено 2 байта, спасибо Кевину
источник
$0=n+s+$0
быть в гольф$0+=n+s
(-2 байта)?