Эта задача основана на этом вопросе Stackoverflow .
Если в качестве входных данных положительное число, выведите его в виде суммы каждой цифры, умноженной на представление степени 10.
вход
Число, как целое число, строка или список цифр / символов.
- Число будет строго положительным.
- Если вы примете число в виде строки или списка, оно не будет начинаться с
0
.
Выход
Строка, представляющая сумму всех соответствующих цифр base-10, каждая из которых умножается на соответствующую мощность base-10. Сумма представляется как a + b
. Вы можете использовать до одного пробела вокруг каждой стороны +
знака, если хотите. Операнды перечислены в порядке убывания.
0
никогда не может быть действительным операндом.+
Знак ( в окружении или не пробела) не может быть передней или задней частью.
Примеры
Input Output
12 10 + 2
or 10+2
or 10 +2
or 10+ 2
9 9
123 100 + 20 + 3
10 10
101 100 + 1
Неверные выходы
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
Это код-гольф, поэтому выигрывает самый короткий код в байтах!
Ответы:
Python 3:
838079 байтПопробуйте онлайн!
Моя первая подача Code Golf.
-3 байта ов. Спасибо за полезный совет :) -4 байта от mypetlion. Спасибо за этот совет
источник
if'0'<t[i]
и изменив формулу сx-i-1
наx+~i
. Вот ссылка TIO с пошаговыми изменениями.print
оператор,print(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
чтобы сохранить 1 байт.Желе , 9 байт
Попробуйте онлайн!
Как это работает
источник
JavaScript (ES6), 47 байт
Принимает ввод как целое число.
Попробуйте онлайн!
комментарии
источник
р , 55 байт
Предполагая, что целые числа меньше 1e10, что в любом случае больше, чем максимальное 32-битное целое число ...
Попробуйте онлайн!
источник
10^(nchar(n):1-1
теоретически будет работать для любого целого числа ...Язык программирования Шекспира ,
807806805804 байтаПопробуйте онлайн!
-23 байта, если нулевой символ может быть выведен первым
объяснение
источник
Python 2 , 64 байта
Попробуйте онлайн!
Python 2 , 66 байт
Попробуйте онлайн!
источник
Желе ,
1211 байтПолная программа, принимающая число в виде списка цифр (в формате Python), который печатает результат.
Попробуйте онлайн!
Как?
Предыдущие 12 байт:
источник
Хаскелл,
6054 байтаИзменить: -6 байт благодаря Delfad0r.
Принимает входной номер в виде строки.
Попробуйте онлайн!
источник
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
экономит 6 байт Попробуйте онлайн! ,05AB1E , 10 байтов
Прямая реализация.
Ввод в виде списка цифр.
Попробуйте онлайн!
объяснение
источник
Python 2 , 64 байта
Безымянная функция, которая принимает список цифр
n
и возвращает строку.Попробуйте онлайн!
enumerate(n)
даст кортежиindex, item
черезn
с индексом, начиная с0
.Однако
enumerate
также принимает необязательный начальный индекс в качестве второго аргумента, устанавливая его, чтобы-len(n)
мы получили индексыe
из-len(n)
,-len(n)+1
...,-1
.Это означает, что количество необходимых конечных нулей для любого элемента (
b
) есть-1-e
, что~e
так~e*'0'
получает необходимые конечные нули.`b`
получает строковое представление целой цифрыb
и+
объединяет это с этими нулями.if b
отфильтровывает записи сb==0
.'+'.join(...)
затем объединяет полученные строки с+
символами.источник
Python 2,
827371 байт-9 байт благодаря @ovs
-2 байта благодаря @JonathanAllan
Попробуйте онлайн
источник
Haskell ,
565552 байта-4 байта благодаря Ними .
Попробуйте онлайн!
объяснение
Попробуйте онлайн!
источник
Perl 6 , 38 байт
Попробуйте онлайн!
Блок анонимного кода, который принимает список цифр и возвращает строку.
Объяснение:
источник
APL (Dyalog),
464140 байтов-5 байт благодаря @dzaima
Функция анонимного префикса. Принимает ввод в виде строки. TIO
(Это мой первый раз, когда я использую APL на PPCG, возможно, в гольф. Кроме того, проклинаю вас, ноль!)
источник
⎕IO←0
Сетчатка , 19 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Список всех ненулевых цифр
Для каждой цифры добавьте столько нулей, сколько было конечных цифр.
Разделите каждый результат с
+
s вместо новой строки по умолчанию.Сетчатка 0.8.2 , 21 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Перечислите все суффиксы ввода, которые начинаются с ненулевых цифр.
Замените все завершающие цифры нулями.
Присоединяйтесь к результатам с
+
.источник
C (gcc) ,
7169 байтКаждый шаг рекурсивной функции вычитает часть, которую она напечатает, и передает оставшуюся часть числа.
Благодарю потолочный кот за предложение.
Попробуйте онлайн!
источник
Брахилог ,
3532 байта-3 байта причина 0 не является допустимым вводом
Попробуйте онлайн! или тестовый набор
объяснение
источник
|∧Ṡ
с конца. :)Brachylog v2, 15 байт
Попробуйте онлайн!
Очень, очень неэффективно.
Каким-то образом это позволяет использовать только 6 байтов на том, что в большинстве языков является жесткой частью (разбиение числа на форму a 10 b, где a - одна цифра в порядке убывания), и целых 9 байтов для «соединения с
+
"(который встроен в большинство языков игры в гольф, но не на брахилог).В отличие от большинства моих представлений на брахилоге (которые являются функциями), это полная программа, получающая данные из стандартного ввода и производящая вывод в стандартном выводе.
объяснение
(
wᵐ
Используется скорее причина , чем более обычная, вc
том, что мы имеем дело с разнородным списком - он содержит как числа, так и строки - и вместо того, чтобы смешивать их, проще всего распечатать их все по отдельности.)Алгоритм здесь перебор всех аддитивных разделов ввода, пока он не найдет подходящий (!). Brachylog предпочитает разбивать на меньшее количество возможностей и сортировать их по возрастанию, поэтому первое решение, которое он найдет, - это обратное решение, которое задает вопрос. Так что нам нужно просто изменить его, чтобы получить решение, которое мы хотим.
источник
Чисто , 73 байта
Попробуйте онлайн!
Определяет функцию,
$ :: String -> String
принимающую строку и возвращающую строку.источник
Холст ,
1413 байтовПопробуй это здесь!
источник
Атташе , 37 байт
Попробуйте онлайн!
Версия Pointfree (41 байт):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
объяснение
источник
C (gcc), 87 байт
Попробуйте онлайн!
источник
Powershell,
5552 байтаСкрипт ожидает массив строк, каждая строка содержит одну цифру. Тестовый скрипт:
Выход:
источник
Japt , 13 байт
Принимает ввод в виде массива цифр.
Попытайся
объяснение
альтернатива
Принимает ввод как массив строк из цифр.
Попытайся
источник
Java 10,
8278 байтПорт Арно JavaScript (ES6) ответ «s .
-2 байта благодаря @ceilingcat .
-2 байта благодаря Арно .
Попробуйте онлайн.
Объяснение:
источник
n%m
присвоением переменной для удобства чтения.)m<n
должно работать.СНОБОЛ4 (CSNOBOL4) ,
134133129 байтовПопробуйте онлайн!
Сохраненный целый байт, выполняя обработку строк, а не арифметику!
источник
сед-Е ,
10999977574 байтаКаждая строка ввода считается отдельным номером. Попробуйте онлайн .
Объяснение:
… Можно играть в гольф дальше, я полагаю.
источник
01010101010
или000000
, в соответствии со спецификацией задачи. Сохраняет ли это какие-либо байты?Brainfuck, 147 байтов
Попробуйте онлайн! (Вам нужно будет поставить галочку в поле «!» И ввести свой ввод после «!» Во второй строке кода, в противном случае он будет продолжать запрашивать ввод навсегда.)
Вероятно, это не будет самый короткий ответ или игра в гольф к самому короткому из возможных, но было довольно интересно попробовать сделать это в Brainfuck, так что я мог бы также опубликовать это.
Как отметил @JoKing, эта программа не удаляет нули. Я постараюсь это исправить, но это может быть довольно сложно.
Объяснение:
источник
APL (Dyalog Unicode) , 20 байтов
Попробуйте онлайн!
Принимает ввод как вектор цифр. Выходы с пробелом до и после каждого
+
и включает переменное количество начальных пробелов.Это поезд. Он делится на следующее.
Первая функция
⌽
, это инвертирует массив, поэтому1 0 2
становится2 0 1
.Затем мы приходим
(10×⊢)\
, который применяется к обращенному массиву. Эта часть вдохновлена ответом ngn на вызов Boustrophedonise. Занимая объяснение ngn, учитывая вектор цифрA B C ...
, применение(10×⊢)\
к этому вектору дает следующее.На
2 0 1
,(10×⊢)\
дает2 0 100
.Далее идет
0~⍨
. Это удаляет все0
s из массива, давая2 100
.Наконец приходит
+
с.{⍵'+'⍺}/
это сокращение, начинающееся справа, которое объединяет левый аргумент с a+
, за которым следует правый аргумент. По сути, это инвертирует массив при вставке+
s. Это дает100 '+' 2
, который отображается как100 + 2
.источник
MathGolf ,
121110 байтПопробуйте онлайн!
объяснение
Первая команда не нужна, поскольку ввод может быть задан в виде списка цифр.
Я мог бы добавить оператор попарного умножения, который составляет один байт, но это не является частью языка. Тогда я мог бы удалить один байт из этого решения.
источник