Ça fait un moment que tu as tué cette hydreCela , vous avez baigné dans la gloire pendant des années, mais maintenant les gens vous appellent lavé, a a été. Eh bien, il est temps de leur prouver le contraire, vous avez entendu le sort d'une autre hydre. Tuez-le simplement et vous obtiendrez toute la gloire que vous méritez.
Vous arrivez à l'armurerie pour recevoir vos épées, mais elles ne sont plus des épées normales, il ne leur reste que des secteurs. Un n-secteur divisera le nombre de têtes sur une Hydra par n, mais ne peut être utilisé que si le nombre de têtes est divisible par n.
Encore une fois, vous allez écrire du code pour vous aider à tuer l'hydre. Votre code prendra en entrée le nombre de têtes de l'hydre, commence le combat avec, le nombre de têtes avec lesquelles l'hydre grandit à chaque tour, et une liste de n secteurs que vous pouvez utiliser. Votre code affichera un schéma optimal de mouvements pour tuer l'hydre le plus rapidement possible
À chaque tour du combat, vous pouvez sélectionner une seule épée à utiliser, si après une tranche, l'hydre n'a qu'une seule tête que vous gagnez, sinon elle fait pousser des têtes. Vous ne pouvez jamais faire aucun mouvement, et s'il n'y a pas de mouvements possibles disponibles, vous perdez.
Si aucune solution n'est possible, vous pouvez sortir autre chose qu'une solution, par exemple une liste vide, rien, le nombre zéro, etc.
Il s'agit de code-golf, donc les réponses seront notées en fonction de leur nombre d'octets, moins étant mieux.
Cas de test
Voici quelques cas de test super basiques, plus de cas de test seront ajoutés sur demande.
24 heads, 1 heads per turn, [2,3] -> [3,3,2,3]
25 heads, 2 heads per turn, [2,3] -> No solutions
4 heads, 2 heads per turn, [2] -> No solutions
4 heads, 3 heads per turn, [2,5] -> [2,5]
10 heads, 17 heads per turn, [2, 3, 7, 19] -> No solutions
10 heads, 6 heads per turn, [1,16] -> [1,16]
6 heads, 2 heads per turn, [2, 3, 5] -> [2, 5]
125 heads, 1 head per turn, [1, 2, 3, 127] -> [1, 1, 127]
Réponses:
JavaScript (ES6),
111105 octets4 octets enregistrés grâce à @ThePirateBay
J'ai abandonné la récursion en profondeur d'abord que j'essayais d'utiliser pour les boucles en largeur d'abord beaucoup plus sûres. Produit la solution sous forme de tableau s'il existe, s'exécute indéfiniment s'il ne l'est pas. Si ce n'est pas autorisé, en voici un qui finit par s'arrêter (dans la plupart des cas, de toute façon):
la source
JavaScript,
191190 octetsUn octet enregistré grâce à Step Hen
la source
Python 2 ,
169195222 octets+26 octets pour gérer correctement la régénération cyclique de la tête sur les mauvais choix d'armes. (Merci à @ThePirateBay de l'avoir signalé)
+27 octets pour corriger certains cas marginaux provoquant des erreurs.
Essayez-le en ligne!
la source
VB.NET (.NET 4.5), 439 + 35 (importations) = 474 octets
A besoin
Imports System.Collections.Generic
La fonction
Z
prend deuxInt64
(nombre de têtes et taux de repousse des têtes), et unList(Of Int64)
(secteurs), et renvoie unList(Of Int64) (the ordered choice of Sectors). Returns
rien s'il n'y a pas de solution.Suppose que les secteurs sont présentés dans un ordre trié du plus grand au plus petit.
le
Optional
paramètres sont pour les appels récursifs pour sauvegarder l'état. Ils suivent l'ordre actuel des secteurs en cours d'utilisation, l'ordre des secteurs le plus court jamais créé et le nombre de têtes rencontrées. Si nous rencontrons à nouveau le même nombre de têtes, il doit y avoir eu un moyen plus court pour l'atteindre.Le seul ordre des secteurs qui compte est que je dois
1
être le dernier s'il existe. Sinon, l'hydre pourrait croître sans limites car je pourrais à chaque tour utiliser le1
secteur et ne jamais en essayer d'autre.J'ai déclaré une constante
N
à représenterNothing
, en rasant 6 octets chaque fois que je voulais l'utiliserNothing
.And
/Or
ne court-circuite pas, donc j'utilise l'opérateur conditionnel nul (?.
) pour éviter les erreurs nulles de l'objet. En vrai code, j'utiliseraisAndAlso
/OrElse
qui font des courts-circuits.Essayez-le en ligne!
Z
sans golf pour la lisibilitéla source