Alguns números inteiros positivos podem ter uma propriedade chamada Divisibilidade da cadeia. Para que um número seja divisível em cadeia por n , ele deve atender a três requisitos:
Cada dígito divide o número formado pelos n dígitos seguintes.
Por exemplo, o número 7143 está cadeia-divisível por 2, porque 7 divisões 14 e 1 43. É divide não cadeia-divisível por três 7 porque não se divide 143.
Cada subsequência considerada para a divisibilidade não deve ter zeros à esquerda.
Por exemplo, o número 14208 não é divisível em cadeia por 2 porque 08 tem um zero inicial. É, no entanto, divisível em cadeia por 3, porque 208 não tem um zero inicial.
Todos os dígitos do número devem ser exclusivos.
Por exemplo, o número 14280 é divisível em cadeia por 2, 3 e 4. Se minha explicação sobre a divisibilidade em cadeia não for clara, faça perguntas nos comentários.
Entrada
A entrada para o programa consiste em um único número inteiro n
, seguido por um espaço e, em seguida, um número que teve determinados dígitos substituídos por sublinhados. Por exemplo, a seguir é uma entrada possível:
3 6__2__4508
n será maior que 1. O número nunca será totalmente sublinhado. Você não tem garantia de que o primeiro dígito não seja um sublinhado. O primeiro dígito nunca será 0. n nunca será maior ou igual ao número de dígitos no número.
Resultado
Emita o número, com os dígitos substituídos por números inteiros, de modo que o número resultante seja divisível em cadeia por n . Se existir mais de uma maneira de completar o número divisível em cadeia, qualquer uma pode ser usada como saída. Se não houver números que possam concluí-lo, faça a saída no answer
. Por exemplo, a saída da entrada de exemplo pode ser:
6132794508
Isso é código de golfe, então o código mais curto vence.
n
for maior ou igual ao número de dígitos desse número, o número é divisível em cadeia?Respostas:
Bash + coreutils, 197 bytes
Resultado:
Explicação
${2//_/{0..9\}}
substitui todos os sublinhados por{0..9}
.eval
ed para expandir todas essas expressões de colchetes.grep
ervas daninhas eliminam todas as possibilidades onde há dígitos repetidos.fonte
Python -
239267Lento, mas curto. Basta comparar todas as permutações possíveis de dígitos N com o padrão fornecido e verificar todos os requisitos. Eu testei apenas com 7 ou 8 dígitos. Deve funcionar por 9 ou 10 também, mas levará um tempo.
Editar: eu adicionei a saída padrão ausente "sem resposta".
fonte
MathematicaRuby,349224229 bytesEsta é uma implementação muito ingênua. Conto o número de sublinhados e, em seguida, simplesmente crio uma lista de todas as permutações de dígitos desse comprimento, para força bruta em todas as combinações possíveis. Isso terá um desempenho horrível para um número maior de sublinhados, mas esse é o código golf e não o código mais rápido. :)
Edit: Portado isso do Mathematica. Veja o histórico de edições da versão original.
Editar: Corrigidos os principais casos de sublinhado.
fonte
Tuples
não impõe essa restrição.Permutations
, desde que não haja dígitos repetidos no conjunto de entrada. E você pode permutar apenas os dígitos que ainda não foram usados. (Embora, novamente, isso possa prolongar o seu código.) #Tuples
porque é mais curto.Java, 421
Menos golfe, com explicações:
fonte