Certains entiers positifs peuvent avoir une propriété appelée divisibilité en chaîne. Pour qu'un nombre soit divisible par une chaîne par n , il doit remplir trois conditions:
Chaque chiffre divise le nombre formé par les n chiffres qui le suivent.
Par exemple, le nombre 7143 est divisible en chaîne par 2 car 7 divise 14 et 1 divise 43. Il n'est pas divisible en chaîne par 3 car 7 ne divise pas 143.
Chaque sous-séquence prise en compte pour la divisibilité ne doit pas avoir de zéros de tête.
Par exemple, le nombre 14208 n'est pas divisible en chaîne par 2 car 08 a un zéro non significatif. Il est cependant divisible en chaîne par 3, car 208 n'a pas de zéro de tête.
Tous les chiffres du numéro doivent être uniques.
Par exemple, le nombre 14280 est divisible en chaîne par 2, 3 et 4. Si mon explication de la divisibilité de la chaîne n'est pas claire, veuillez poser des questions dans les commentaires.
Contribution
L'entrée du programme se compose d'un seul entier n
, suivi d'un espace, puis d'un nombre dont certains chiffres ont été remplacés par des traits de soulignement. Par exemple, ce qui suit est une entrée possible:
3 6__2__4508
n sera supérieur à 1. Le nombre ne sera jamais entièrement souligné. Vous n'êtes pas assuré que le premier chiffre n'est pas un trait de soulignement. Le premier chiffre ne sera jamais 0. n ne sera jamais supérieur ou égal au nombre de chiffres du nombre.
Production
Sortez le nombre, avec les chiffres remplacés par des entiers tels que le nombre résultant est divisible en chaîne par n . S'il existe plusieurs manières de compléter le nombre divisible par chaîne, n'importe laquelle peut être utilisée comme sortie. S'il n'y a pas de chiffres qui peuvent le compléter, sortez no answer
. Par exemple, la sortie de l'exemple d'entrée pourrait être:
6132794508
C'est le golf de code, donc le code le plus court gagne.
n
est supérieur ou égal au nombre de chiffres de ce nombre, le nombre est divisible en chaîne?Réponses:
Bash + coreutils, 197 octets
Production:
Explication
${2//_/{0..9\}}
remplace tous les traits de soulignement par{0..9}
.eval
éditée pour développer toutes ces expressions d'accolade.grep
élimine toutes les possibilités là où il y a des chiffres répétés.la source
Python -
239267Lent, mais court. Comparez simplement toutes les permutations possibles à N chiffres avec le modèle donné et vérifiez toutes les exigences. Je ne l'ai testé qu'avec 7 ou 8 chiffres. Devrait également fonctionner pendant 9 ou 10, mais cela prendra un certain temps.
Edit: j'ai ajouté la sortie par défaut manquante "pas de réponse".
la source
MathematicaRuby,349224229 octetsIl s'agit d'une implémentation très naïve. Je compte le nombre de soulignements, puis je crée simplement une liste de toutes les permutations de chiffres de cette longueur, pour forcer brutalement toutes les combinaisons possibles. Cela fonctionnera horriblement pour un plus grand nombre de traits de soulignement, mais il s'agit du code golf et non du code le plus rapide. :)
Edit: Porté ceci depuis Mathematica. Voir l'historique des modifications pour la version originale.
Edit: Correction des principaux cas de soulignement.
la source
Tuples
n'impose pas cette contrainte.Permutations
, à condition qu'il n'y ait pas de chiffres répétés dans l'ensemble d'entrée. Et vous ne pouvez permuter que les chiffres qui n'ont pas encore été utilisés. (Bien que, encore une fois, cela puisse allonger votre code.)Tuples
car il est plus court.Java, 421
Moins golfé, avec explication:
la source