Вызов
Учитывая положительное целое число N
, которое 28 или выше, выходной список номеров суммирующих в N
который использует каждую цифру 1
через 7
ровно один раз. Вы можете дать как программу или функцию.
Цифры могут появляться сами по себе или объединяться, если вы используете каждую из них один раз без повторов. Например, [12, 34, 56, 7]
действительно, как [1, 27, 6, 4, 35]
и [1234, 567]
, но не [123, 34567]
или [3, 2, 1476]
. Порядок перечисления номеров не имеет значения.
Если N
не может быть сделано с 1-7, вернуть или ничего не выводить.
Дополнительная информация
Это кодовый гольф, поэтому самый короткий код в байтах к четвергу 15 октября выигрывает.
Задайте любые вопросы в комментариях.
Все, что я не указываю в вызове, остается за вами.
Стандартные лазейки запрещены.
Примеры
Это может устранить любую путаницу:
вход
28
Выход
[1, 2, 3, 4, 5, 6, 7]
вход
100
Выход
[56, 7, 4, 31, 2]
вход
1234567
Выход
[1234567]
вход
29
Выход
Ничего, 29 недействительно.
вход
1891
Выход
[1234, 657]
вход
370
Выход
[15, 342, 7, 6]
Я сделаю больше, если нужно.
Вот пастбище всех возможных чисел, созданных с этими семью числами, любезно предоставлено FryAmTheEggman.
29
?(N/A)
в качестве вывода.[1234566, 1]
не является допустимым выводом, потому что 6 повторяется. Вы не можете повторять числа в выводе.1, ..,, 7
чтобы было как минимум столько же1
, сколько10
s, как минимум столько же10
, сколько100
s и так далее.Ответы:
Pyth,
1814 байтовСпасибо @isaacg за игру в 2 байта и прокладку еще 2.
Код будет аварийно завершен, если он не произведет вывод, что не приведет к выводу.
Это будет работать для небольших входных данных, если вы достаточно терпеливы, и для больших, если достаточно времени и памяти.
Для того, чтобы убедиться в том , что код работает , как задумано, вы можете заменить
7
с3
для сумм цифр 1 по 3 . Нажмите здесь для теста.Пример работает
Как это устроено
источник
r\1\8
. И тоже@ .. 0
самоеh
.h
, но я понятия не имел, что вы могли бы использоватьS
таким образом. (Ссылка на символ в онлайн-интерпретаторе не упоминает об этом.)jkS7
Кажется, еще короче, так как мне больше не нужноs
.Python 3, 109
Функция, которая принимает число и выводит кортеж подобным образом
123,4567,
. Да, это допустимый кортеж.Идея заключается в том , чтобы создать все возможные строки , как ,
43,126,7,5,
которые имеют цифры1
через7
разделенные запятыми, без двух запятых подряд. Оцените это выражение как кортеж, и его сумма равнаn
, выведите его и завершите с ошибкой.Чтобы построить все такие строки, мы отслеживаем набор
s
символов для использования и пытаемся добавлять каждый из них либо через запятую, что делает цифру в конце записи, либо без нее, и в этом случае будущие цифры будут объединяться с ней.Короткое замыкание используется , чтобы проверить,
s
пусто , потому что список-комп пуст, и чтоn==sum(eval(l))
, в этом случае мы печатаемl
и завершаться с ошибкой, взяв~
изNone
возвращаемых печатей (благодаря Sp3000 для этого.).Я считаю, что в Python 3.5 два символа могут быть сохранены путем записи
s={*'1234567'}
(спасибо Sp3000).Есть некоторые маленькие неприятности, которые съедают символы. Один из них заключается в том, что в случае, когда он
l
выглядит1234567
без запятых, он разбирается как один номер, и вызовsum
вызывает ошибку. Это происходит с помощью взлома, начинаяl
с элемента0
и удаляя его при печати. Это стоит 6 символов.Перебор
c
запятой и пустой строки раздражающе многословенfor c in(',','')
, поскольку Python 3 не позволяет обнажать этот кортеж. Я хотел бы, чтобы был какой-то символ,?
который игнорируется в цифрах, чтобы сделать его',?'
на 4 символа меньше, но, похоже, такого символа нет.Старый метод:
Питон 2, 117
Определяет функцию, которая принимает число и печатает список.
Идея состоит в том, чтобы использовать рекурсию, чтобы попробовать каждую ветку. Трек переменных
n
нужнаs
оставшихся для использованияl
номеров, сделанных до сих порp
Когда
n==0
иs
пусто, распечатайтеl
и завершите по ошибке.Если текущее частично сформированное число
p
не равно нулю, попробуйте добавить его в список и удалить из оставшейся суммы.Для каждой цифры, которую
x
мы можем использоватьs
, попробуйте добавить ееp
и удалить изs
.источник
Пиф, 23
Наивная грубая сила, слишком медленная онлайн, занимает около минуты на моем компьютере. Использует общий шаблон «цикл навсегда до исключения» пит-гольфов, где доступ к результирующему отфильтрованному списку комбинаций приводит к ошибке для невозможных чисел, например
29
.Выходы, такие как список питонов, например
Вот паста всех 10136 номеров, которые можно сделать таким образом.
источник
Python 2,7,
178172169 байтОбратите внимание, что последние три строки должны иметь отступы от вкладок, но я не могу понять, как это сделать в этом редакторе.
Изменить: Сглаживание одного слоя вложенности с помощью Sp3000
источник
JavaScript (ES6), 165
196Редактировать немного укоротил. Может быть короче
eval
, но мне нравится, что это быстроГрубая сила, позорно длиннее, чем в пробковой версии, но быстрее. Попробуйте запустить приведенный ниже фрагмент в браузере, совместимом с EcmaScript 6.
источник
Python 2,
270268 байтВсе еще работаю над игрой в гольф.
Это повторяется, пока не будет найдено совпадение.
источник
import as
редко требуется - вы можете сделатьfrom itertools import*;P=permutations
map(str,i)
чем понимание списка, и вы можете создать список r напрямую, а не путем выравнивания вложенного списка:,r=[int(''.join(map(str,i)))for j in x for i in P(x,j)]
и аналогичное для t.`n`
вместоstr(n)
, такn
как никогда не будет выше максимального целого числа.Haskell (145 байт)
Использует рекурсию.
Ungolfed (337 байт):
источник
Scala, 195 байт
Это не самый эффективный и потребовалось более 15 минут, чтобы получить результат за 29, но это работает
Вот некоторые выводы
источник
Рубин, 105 байт
Грубая сила! Проверяет каждое подмножество длин от 0 до 7 целых чисел от 1 до 7654321 и определяет, соответствует ли любое из них нашим критериям. Вы, вероятно, не хотите ждать, пока это не прекратится.
Чтобы запустить и проверить алгоритм, вы можете сузить область поиска, заменив
7654321
на наибольшее число, которое вы знаете, будет в ответе. Например, 56 для n = 100 или 1234 для n = 1891. Вот пробный запуск последнего:источник