Es ist schon eine Weile her, seit du diese Hydra getötet hast , du hast dich jahrelang in der Herrlichkeit gebadet, aber jetzt rufen die Leute dich angespült. Nun, es ist an der Zeit, dass Sie ihnen das Gegenteil beweisen. Sie haben den Aufenthaltsort einer anderen Hydra gehört. Töte es einfach und du bekommst den Ruhm, den du verdienst.
Du kommst in die Waffenkammer, um deine Schwerter zu erhalten, aber sie bestehen nur noch aus Sektoren. Ein n-Sektor teilt die Anzahl der Köpfe einer Hydra durch n, kann jedoch nur verwendet werden, wenn die Anzahl der Köpfe durch n teilbar ist.
Wieder einmal werden Sie Code schreiben, der Ihnen hilft, die Hydra zu töten. Ihr Code verwendet als Eingabe die Anzahl der Köpfe der Hydra, beginnt den Kampf mit, die Anzahl der Köpfe, mit denen die Hydra in jeder Runde wächst, und eine Liste von n Sektoren, die Sie verwenden können. Ihr Code gibt ein optimales Bewegungsmuster aus, um die Hydra so schnell wie möglich zu töten
In jeder Runde des Kampfes kannst du ein einzelnes Schwert auswählen, wenn die Hydra nach einer Scheibe nur einen Kopf hat, den du gewinnst, wenn sie nicht wächst, wächst der Kopf. Du darfst niemals keinen Zug machen, und wenn keine möglichen Züge verfügbar sind, verlierst du.
Wenn keine Lösung möglich ist, können Sie etwas anderes als eine Lösung ausgeben, z. B. eine leere Liste, nichts, die Zahl Null usw.
Dies ist Codegolf, daher werden Antworten nach der Anzahl ihrer Bytes bewertet, wobei weniger besser ist.
Testfälle
Hier sind einige Super-Basic-Testfälle, weitere Testfälle werden auf Anfrage hinzugefügt.
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]
Antworten:
JavaScript (ES6),
111 bis105 Byte4 Bytes dank @ThePirateBay gespart
Ich habe die Tiefenrekursion, die ich für die viel sichereren Breitenrekursionen verwenden wollte, über Bord geworfen. Gibt die Lösung als Array aus, falls vorhanden, und wird für immer ausgeführt, wenn dies nicht der Fall ist. Wenn dies nicht zulässig ist, ist hier eine, die schließlich anhält (in den meisten Fällen jedenfalls):
quelle
JavaScript,
191190 BytesDank Step Hen wurde ein Byte gespeichert
quelle
Python 2 ,
169195222 Bytes+26 Bytes, um die zyklische Kopfregeneration bei schlechten Waffenpicks richtig zu handhaben. (Danke an @ThePirateBay für den Hinweis)
+27 Bytes, um bestimmte Randfälle zu beheben, die Fehler verursachen.
Probieren Sie es online!
quelle
VB.NET (.NET 4.5), 439 + 35 (Importe) = 474 Byte
Benötigt
Imports System.Collections.Generic
Die Funktion
Z
nimmt zweiInt64
(Anzahl der Köpfe und Kopfnachwuchsrate) und aList(Of Int64)
(Sektoren) und gibt einList(Of Int64) (the ordered choice of Sectors). Returns
Nichts zurück, wenn es keine Lösung gibt.Angenommen, die Sektoren werden in sortierter Reihenfolge vom größten zum kleinsten dargestellt.
Die
Optional
Parameter sind für die rekursiven Aufrufe zum Speichern des Status. Sie verfolgen die aktuelle Reihenfolge der verwendeten Sektoren, die kürzeste Reihenfolge aller Sektoren und die Anzahl der jemals angetroffenen Köpfe. Wenn wir wieder auf die gleiche Anzahl von Köpfen stoßen, muss es einen kürzeren Weg geben, um dorthin zu gelangen.Die einzige Reihenfolge der Sektoren, die von Bedeutung ist, muss
1
die letzte sein, wenn sie existiert. Andernfalls könnte die Hydra grenzenlos wachsen, da ich jederzeit nur den1
Sektor nutzen und niemals einen anderen ausprobieren könnte.Ich habe eine Konstante
N
zum Darstellen deklariert undNothing
jedes Mal, wenn ich sie verwenden möchte, 6 Byte gespartNothing
.And
/Or
Nicht kurzgeschlossen, so dass ich die Null - Bedingungsoperator (Verwendung?.
) zu vermeiden Objekt null Fehler. In echtem Code würde ichAndAlso
/OrElse
what do short-circuit verwenden.Probieren Sie es online!
Z
Aus Gründen der Lesbarkeit nicht Golf gespieltquelle