Можно показать, что некоторые положительные целые имеют свойство делимости Цепи. Чтобы число делилось на n , оно должно удовлетворять трем требованиям:
Каждая цифра делит число, образованное n цифрами, которые следуют за ней.
Например, число 7143 делится на 2 на цепочку, потому что 7 делит 14, а 1 делит на 43. Оно не делится на 3 на цепочку, потому что 7 не делит 143.
Каждая подпоследовательность, принятая во внимание для делимости, не должна иметь ведущих нулей.
Например, число 14208 не делится на 2, потому что 08 имеет начальный ноль. Однако он делится на цепочку на 3, потому что 208 не имеет ведущего нуля.
Все цифры в номере должны быть уникальными.
Например, число 14280 делится на цепи на 2, 3 и 4. Если мое объяснение делимости цепи неясно, пожалуйста, задавайте вопросы в комментариях.
вход
Входные данные для программы состоят из единственного целого числа n
, за которым следует пробел, а затем число, в котором определенные цифры заменены символами подчеркивания. Например, следующее является возможным вводом:
3 6__2__4508
n будет больше 1. Число никогда не будет полностью подчеркивать. Вам не гарантируется, что первая цифра не является подчеркиванием. Первая цифра никогда не будет 0. n никогда не будет больше или равна количеству цифр в числе.
Выход
Выведите число с заменой цифр на целые числа, чтобы полученное число делилось на цепочку на n . Если существует более одного способа завершения числа, кратного цепочке, любой из них может использоваться в качестве выходного. Если нет чисел, которые могут его завершить, выведите no answer
. Например, выходные данные примера ввода могут быть:
6132794508
Это код гольф, поэтому выигрывает самый короткий код.
n
больше или равно количеству цифр в этом числе, число делится на цепочку?Ответы:
Bash + coreutils, 197 байт
Выход:
объяснение
${2//_/{0..9\}}
заменяет все подчеркивания на{0..9}
.eval
ed для расширения всех этих выражений в скобках.grep
Отсеивает все возможности там , где Есть любые повторяющиеся цифры.источник
Питон -
239267Медленно, но коротко. Просто сравните каждую возможную перестановку цифр N с данным шаблоном и проверьте все требования. Я проверял это только с 7 или 8 цифрами. Должен работать на 9 или 10, но займет довольно много времени.
Изменить: я добавил отсутствующий вывод по умолчанию "нет ответа".
источник
MathematicaRuby,349224229 байтЭто очень наивная реализация. Я считаю количество подчеркиваний, а затем просто создаю список всех цифр-перестановок этой длины, чтобы перебрать все возможные комбинации. Это будет работать ужасно для большего количества подчеркиваний, но это код гольф, а не код самого быстрого кода. :)
Редактировать: перенес это из Mathematica. Смотрите историю изменений для оригинальной версии.
Редактировать: Исправлены ведущие подчеркивания.
источник
Tuples
не навязывает это ограничение.Permutations
будет, при условии, что во входном наборе нет повторяющихся цифр. И вы можете переставлять только цифры, которые еще не были использованы. (Хотя, опять же, это может удлинить ваш код.)Tuples
потому что он короче.Ява, 421
Менее гольф, с объяснением:
источник