Каждое положительное целое число может быть выражено как сумма не более трех палиндромных положительных чисел в любом основании b ≥5. Cilleruelo и др., 2017
Положительное целое число является палиндромным в данной базе, если его представление в этой базе без ведущих нулей читает то же самое в обратном направлении. Далее будет рассматриваться только основание b = 10.
Разложение как сумма палиндромных чисел не является уникальным . Например, 5
может быть выражен непосредственно как 5
или как сумма 2, 3
. Аналогично, 132
может быть разложен как 44, 44, 44
или как 121, 11
.
Соревнование
Учитывая положительное целое число, произведите его разложение суммы на три или меньше положительных целых числа, которые являются палиндромными в основании 10.
Дополнительные правила
Используемый алгоритм должен работать для произвольно больших входов. Однако это допустимо, если программа ограничена памятью, временем или типом данных.
Ввод и вывод могут быть приняты любым разумным способом . Формат ввода и вывода, как обычно, гибкий.
Вы можете создать одно или несколько допустимых разложений для каждого ввода, если формат вывода однозначен.
Программы или функции разрешены на любом языке программирования . Стандартные лазейки запрещены.
Самый короткий код в байтах побеждает.
Примеры
Поскольку входные данные могут иметь много декомпозиций, это скорее примеры, чем тестовые случаи. Каждое разложение показано на отдельной строке.
Input -> Output
5 -> 5
2, 3
15 -> 1, 3, 11
9, 6
21 -> 11, 9, 1
7, 7, 7
42 -> 22, 11, 9
2, 7, 33
132 -> 44, 44, 44
121, 11
345 -> 202, 44, 99
2, 343
1022 -> 989, 33
999, 22, 1
9265 -> 9229, 33, 3
8338, 828, 99
источник
k=1
иk=3
.)k=1
(поскольку исходное число уже является палиндромом), это означает, что вы предполагаете, что оба других числа равны 0. Поэтому, если 0 является приемлемым в качестве одного из чисел, любое число, которое должно быть сделано сk=2
также будет работать,k=3
если одно из трех чисел равно 0.Ответы:
Брахилог , 7 байт
Попробуйте онлайн!
Удивительно не так медленно.
объяснение
источник
.
в объяснении, и что(.)
? Не знаю брахилог.
- выходная переменная.~+
,ℕᵐ
и↔ᵐ
являются предикатами, которые имеют левую и правую переменные. Их дублирование.
просто указывает на то, что выходные данные участвуют непосредственно в каждом из этих трех вызовов предикатов. Последнее(.)
здесь, чтобы показать, что выходная переменная неявно является последней переменной программы. Следовательно, последнее установленное отношение действительно.↔ᵐ.
означает «обратное отображение результатов на выходе» .Python 2 ,
8279 байтПопробуйте онлайн!
источник
Желе ,
121098 байтПопробуйте онлайн!
Как это устроено
источник
Python 2 , 117 байт
Попробуйте онлайн!
Распечатывает список списков, каждый из которых является решением. Род спас 9 байтов.
источник
c
на вычитания и использованиеfilter
filter(None
ударил меня, пока я готовил ужин, ха-ха.c → n-a-b
это круто :)JavaScript (ES6),
115...8483 байтаВсегда возвращает массив из трех элементов, где неиспользуемые записи дополняются нулями.
Контрольные примеры
Показать фрагмент кода
источник
R, 126 байтов,
145 байтовСпасибо Джузеппе за игру в гольф с 19 байтами
Попробуйте онлайн!
объяснение
В R нет собственного способа обращения строк, и многие строковые операции по умолчанию не работают с числами. Итак, сначала мы преобразуем ряд положительных целых чисел (плюс 0) в символы.
Далее мы производим вектор 0 и все палиндромы. Обращение строки требует разделения каждого числа на символы, изменения порядка вектора и вставки их обратно без пробелов.
Далее я хочу проверить все группы из трех (здесь, где 0 важны), к счастью, R имеет встроенную функцию комбинации, которая возвращает матрицу, каждый столбец в комбинации.
Я применяю
colSums
функцию к матрице и сохраняю только те элементы, которые соответствуют поставленной цели.Наконец, поскольку есть два 0, любой набор из двух натуральных чисел будет продублирован, поэтому я использую уникальную функцию для столбцов.
Выходные данные представляют собой матрицу, в которой каждый столбец представляет собой набор положительных, паллиндромных целых чисел, которые суммируются с целевым значением. Это ленивый и возвращает 0, когда используется менее 3 элементов.
источник
Map
для создания палиндромов!Желе , 14 байт
Попробуйте онлайн!
Очень, очень неэффективно.
источник
Желе , 17 байт
Попробуйте онлайн!
-6 байт благодаря HyperNeutrino.
Выводит все пути. Однако вывод состоит из нескольких дубликатов.
источник
is palindrome
встроенный лолRŒḂÐfṗ3R¤YS⁼¥Ðf
Ом v2 ,
131210 байтПопробуйте онлайн!
источник
Mathematica, 49 байтов
Попробуйте онлайн!
возвращает все решения
-2 ~ MartinEnder ~ байтов
источник
#~IntegerPartitions~3~Select~AllTrue@PalindromeQ&
, Думаю?Haskell ,
908679 байтов-7 байт благодаря Лайкони!
Попробуйте онлайн!
Возвращает список всех решений с некоторым дублированием.
источник
mapM
объявлениемf=filter
: попробуйте онлайн!Java (OpenJDK 8) , 185 байт
Попробуйте онлайн!
Удалите 1 байт из TIO, чтобы получить правильную сумму, потому что представление не содержит
;
после лямбды.источник
i++<--j
вместо++i<=--j
Протон , 117 байт
Попробуйте онлайн!
Выводит решение
источник
Pyth ,
16 1210 байтПопробуй это здесь!
Как это устроено
источник
05AB1E , 17 байт
Попробуйте онлайн!
Выводит результат в три списка следующим образом:
Палиндромные списки длиной 1 (исходное число IFF это палиндромные).
Палиндромные списки длины 2.
Палиндромные списки длины 3.
источник
Аксиома, 900 байт
тестовый код
Если этот код должен разложить число X в 1,2,3-палиндроме, то, что делает этот код, он пытается около палиндрома N <X и разложить XN в 2-палиндроме; если это разложение XN имеет успех, верните 3 найденных палиндрома; если это не удается, попробуйте предыдущий палиндром G <N <X и попробуйте разложить XG на 2 палиндрома и т. д. Код Ungolf (но возможно некоторая ошибка)
Результаты:
источник
Java (OpenJDK 8) , 605 байт
Печатает парни, но они не забанены
Попробуйте онлайн!
источник
APL (Дьялог) , 51 байт
Попробуйте онлайн!
источник
05AB1E , 8 байтов
Попробуйте онлайн!
Объяснение:
источник
Perl 6 , 51 байт
Попробуйте онлайн!
grep { $_ eq .flip }, 1 .. $_
создает список всех палиндромных чисел от 1 до введенного числа.3 Rxx
повторяет этот список три раза.[X]
сокращает этот список списков с помощью оператора перекрестных произведенийX
, в результате чего получается список всех трех наборов чисел палиндроминов от 1 до входного числа.first *.sum == $_
находит первый такой 3-х кортеж, который суммирует с входным числом.источник
xx 3
.Python 3 , 106 байт
Попробуйте онлайн!
В ссылке TIO я использовал более быструю (но на 1 байт более длинную версию), которая берет первый действительный результат в качестве генератора, а не собирала весь список возможных комбинаций и брала первую.
источник
Рубин , 84 байта
Составляет список всех возможных комбинаций из 3 палиндромов от 0 до n, находит первую, чья сумма совпадает, затем обрезает нули.
Попробуйте онлайн!
источник
Добавить ++ , 62 байта
Попробуйте онлайн!
~ 50 байтов в гольфе при написании объяснения. Определяет лямбда-функцию, которая возвращает список списков, содержащих решения.
Как это устроено
g
RÞg
g
Следующий раздел можно разделить на три части:
[1 2 3 4 ...]
[[1] [2] [3] [4] ... ]
k
Эта функция в принципе ничего не делает. Он получает два аргумента и упаковывает их в массив. Тем не менее, стол быстро,
‽
это магический трюк здесь. Он принимает два списка и генерирует каждую пару элементов между этими двумя списками. Так[1 2 3]
и[4 5 6]
получится[[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4] [3 5] [3 6]]
. Затем он принимает свой функциональный аргумент (в данном случаеk
) и запускает эту функцию для каждой пары, которая в этом случае просто возвращает пары как есть.€bF
l
источник