Учитывая неотрицательное целое число или список цифр, определите, каким образом число может быть сформировано путем объединения квадратных чисел, которые могут иметь начальные нули.
Примеры
input -> output # explanation
164 -> 2 # [16, 4], [1, 64]
101 -> 2 # [1, 01], [1, 0, 1]
100 -> 3 # [100], [1, 00], [1, 0, 0]
1 -> 1 # [1]
0 -> 1 # [0]
164900 -> 9 # [1, 64, 9, 0, 0], [1, 64, 9, 00], [1, 64, 900], [16, 4, 900], [16, 4, 9, 0, 0], [16, 4, 9, 00], [16, 49, 0, 0], [16, 49, 00], [16, 4900]
правила
- Применяются стандартные лазейки
- Это код-гольф, поэтому выигрывает самый короткий ответ в байтах
code-golf
math
number
combinatorics
set-partitions
HyperNeutrino
источник
источник
Ответы:
Haskell , 135 байт
Попробуйте онлайн!
Возможно, еще не очень хорошо играли в гольф, но это удивительно сложная проблема
источник
Желе , 8 байт
Монадическая ссылка, содержащая список цифр и возвращающая неотрицательное целое число.
Попробуйте онлайн! или посмотрите набор тестов .
Как?
источник
Haskell , 88 байт
Определяет функцию,
f
которая принимает строку и возвращает число с плавающей запятой. Очень медленно. Попробуйте онлайн!объяснение
Я использую мой совет Haskell для вычисления всех разделов строки с
mapM
иwords
. ФрагментmapM(\c->[[c],c:" "])x
заменяет каждый символ'c'
строкиx
либо одноэлементной строкой,"c"
либо двухэлементной строкой"c "
и возвращает список всех возможных комбинаций. Если я возьму один из результатов,y
объединю его и вызовуwords
результат, он будет разбит на вставленные пробелыmapM
. Таким образом, я получаю все разбиенияx
в смежные подстроки. Затем я просто подсчитываю те результаты, где каждый элемент разбиения является идеальным квадратом (находя его в списке[0,1,4,9,..,x^2]
). Предостережение заключается в том, что каждый раздел считается дважды, с пробелом и без него, поэтому я беру сумму0.5
s вместо1
s; Вот почему тип результата является плавающим.источник
Pyth , 16 байт
Тестовый пакет .
источник
Python 3 ,
148139135134 байтов10 байтов благодаря Арнольду Палмеру.
Попробуйте онлайн!
источник
%1
иfor
...[[a[0]]]
с[a[:1]]
сохранением байтаMathematica, 141 байт
ввод (список цифр)
источник
{1,64,9}
,{16,4,9}
и{16,49}
), но ваша функция возвращает 4.Table[(function of s[[i]]),{i,Length[s=(stuff)]}]
несколько раз; Вы обычно можете сыграть в гольф до(function of #)&/@(stuff)
.Python 2 ,
173163 байтаПопробуйте онлайн!
Редактировать: 10 байтов сохранено благодаря ArnoldPalmer
источник
.5
вместо0.5
?