Se puede mostrar que algunos enteros positivos tienen una propiedad llamada divisibilidad en cadena. Para que un número sea divisible en cadena por n , debe cumplir tres requisitos:
Cada dígito divide el número formado por los n dígitos que le siguen.
Por ejemplo, el número 7143 es la cadena-divisible por 2 porque 7 divisiones 14 y 1 divide 43. Es no cadena-divisible por 3 porque 7 no divide 143.
Cada subsecuencia tomada en cuenta para la divisibilidad no debe tener ceros a la izquierda.
Por ejemplo, el número 14208 no es divisible en cadena por 2 porque 08 tiene un cero a la izquierda. Sin embargo, es divisible en cadena por 3, porque 208 no tiene un cero a la izquierda.
Todos los dígitos en el número deben ser únicos.
Por ejemplo, el número 14280 es divisible en cadena por 2, 3 y 4. Si mi explicación de la divisibilidad de la cadena no está clara, haga preguntas en los comentarios.
Entrada
La entrada al programa consiste en un solo entero n
, seguido de un espacio, luego un número que ha tenido ciertos dígitos reemplazados por guiones bajos. Por ejemplo, lo siguiente es una entrada posible:
3 6__2__4508
n será mayor que 1. El número nunca será completamente subrayado. No se garantiza que el primer dígito no sea un guión bajo. El primer dígito nunca será 0. n nunca será mayor o igual al número de dígitos en el número.
Salida
Genere el número, con los dígitos reemplazados por enteros de modo que el número resultante sea divisible en cadena por n . Si existe más de una forma de completar el número divisible en cadena, cualquiera puede usarse como salida. Si no hay números que puedan completarlo, salida no answer
. Por ejemplo, la salida de la entrada de ejemplo podría ser:
6132794508
Este es el código de golf, por lo que gana el código más corto.
n
es mayor o igual que el número de dígitos en ese número, ¿el número es divisible en cadena?Respuestas:
Bash + coreutils, 197 bytes
Salida:
Explicación
${2//_/{0..9\}}
reemplaza todos los guiones bajos con{0..9}
.eval
edita para expandir todas estas expresiones de llaves.grep
elimina a todas las posibilidades en las que hay los dígitos repetidos.fuente
Python -
239267Lento pero corto. Simplemente compare cada posible permutación de N dígitos con el patrón dado y verifique todos los requisitos. Lo probé solo con 7 u 8 dígitos. Debería funcionar también para 9 o 10, pero llevará bastante tiempo.
Editar: agregué el resultado predeterminado que falta "sin respuesta".
fuente
MathematicaRuby,349224229 bytesEsta es una implementación muy ingenua. Cuento la cantidad de guiones bajos, y luego simplemente creo una lista de todas las permutaciones de dígitos de esa longitud, para forzar la fuerza bruta en cada combinación posible. Esto funcionará horriblemente para un mayor número de guiones bajos, pero este es el código de golf y no el código más rápido. :)
Editar: Portado esto desde Mathematica. Vea el historial de edición para la versión original.
Editar: Se corrigieron los principales casos de subrayado.
fuente
Tuples
no impone esa restricción.Permutations
will, siempre que no haya dígitos repetidos en el conjunto de entrada. Y puede permutar solo los dígitos que aún no se han utilizado. (Aunque, de nuevo, esto puede alargar su código.)Tuples
porque es más corto.Java, 421
Menos golf, con explicación:
fuente