Es gibt viele verschiedene Arten von Zugsets, angefangen von Holzschienen wie Brio bis hin zur volldigitalen Steuerung perfekter, winziger Metallnachbildungen echter Züge. Für alle muss jedoch ein Gleis entworfen werden, in dem möglichst viele Ihrer Teile idealerweise verwendet werden.
Ihre Aufgabe ist es also, zu bestimmen, ob es bei gegebener Eingabe der verfügbaren Teile möglich ist, einen vollständigen geschlossenen Kreislauf unter Verwendung aller Elemente zu bilden, und wenn nicht, wie viele Teile vom maximal möglichen Kreislauf übrig bleiben.
Da dies ein vereinfachter Zugsatz ist, gibt es nur drei Elemente: große Kurve, kleine Kurve und gerade. Diese basieren alle auf einem quadratischen Raster:
- "Big Curve" ist eine 90-Grad-Ecke, die 2 Einheiten in jeder Dimension abdeckt
- "Little Curve" ist eine 90-Grad-Ecke, die eine Einheit in jede Richtung abdeckt
- "Straight" ist ein gerades Element mit einer Länge von 1 Einheit
Dies bedeutet, dass der minimal mögliche Kreis aus 4 kleinen Kurven besteht - es ist ein Kreis mit einem Radius von 1 Einheit. Dies kann durch Hinzufügen von Paaren von geraden Elementen erweitert werden, um verschiedene Ovale zu bilden. Es sind auch andere Schaltungen möglich, indem Sie mehr Kurven hinzufügen oder die Kurventypen mischen.
Dieses Zugset enthält keine Kreuzungen oder Methoden zum Überqueren von Gleisen. Daher ist es nicht zulässig, dass zwei Elemente an dasselbe Ende eines anderen Elements angeschlossen werden (keine Y-Formationen) oder sich überkreuzen (keine X-Formationen). . Außerdem handelt es sich um einen Zugsatz, sodass jede Formation, die das Überholen eines Zugs nicht zulässt, ungültig ist. Beispiele hierfür sind Geraden, die sich in einem Winkel von 90 Grad treffen (es muss immer eine Kurve zwischen senkrechten Geraden geben) und Kurven, die sich in einem Winkel von 90 Grad treffen (Kurven müssen fließen).
Sie möchten auch so viele Teile wie möglich verwenden und dabei die Art der Teile ignorieren. Daher entscheiden Sie sich immer für eine Schaltung mit mehr Bits. Schließlich haben Sie nur einen Zug. Daher ist jede Lösung, die zu mehreren Schaltungen führt, inakzeptabel .
Eingang
Entweder ein Array mit drei Ganzzahlen, die alle größer oder gleich 0 sind und der Anzahl der verfügbaren großen Kurven, kleinen Kurven und Geraden entsprechen, oder Parameter, die in derselben Reihenfolge an Ihr Programm übergeben werden.
Ausgabe
Eine Zahl, die der Anzahl der verbleibenden Teile entspricht, wenn die maximal mögliche Schaltung für die bereitgestellten Elemente konstruiert wird.
Testdaten
Minimal circuit using big curves
Input: [4,0,0]
Output: 0
Slightly more complicated circuit
Input: [3,1,2]
Output: 0
Incomplete circuit - can't join
Input: [3,0,0]
Output: 3
Incomplete circuit - can't join
Input: [3,1,1]
Output: 5
Circuit where big curves share a centre
Input: [2,2,0]
Output: 0
Bigger circuit
Input: [2,6,4]
Output: 0
Circuit where both concave and convex curves required
Input: [8,0,0] or [0,8,0]
Output: 0
Circuit with left over bit
Input: [5,0,0] or [0,5,0]
Output: 1
Anmerkungen
- 2 Geraden und eine kleine Kurve sind gleichbedeutend mit einer großen Kurve, verwenden Sie jedoch mehr Teile. Daher sollten Sie diese Kombination auf keinen Fall verwenden, wenn die Rennstrecke große Kurven enthält
- 4 kleine Kurven können normalerweise gegen 4 Geraden getauscht werden, aber nicht, wenn dies dazu führen würde, dass sich die Rennstrecke selbst schneidet
- Das Zugset ist ebenfalls idealisiert: Die Gleiselemente nehmen die gezeigten Breiten ein, sodass Kurven in einigen Fällen durch ein einzelnes Gitternetzquadrat verlaufen können, ohne sich zu schneiden. Das Raster definiert nur die Elementabmessungen. Insbesondere können zwei große Kurven so platziert werden, dass das Gitterquadrat oben links im Beispieldiagramm auch das untere rechte Quadrat einer anderen großen Kurve ist, die von links nach oben verläuft (wobei das Diagramm eine Kurve von rechts nach unten zeigt).
- Eine kleine Kurve kann in den leeren Raum unter einer großen Kurve passen (rechtes unteres Gitterquadrat oben). Eine zweite große Kurve könnte auch diesen Raum nutzen, der gegenüber der ersten um eins verschoben ist
- Eine kleine Kurve kann nicht auf denselben Rasterplatz passen wie die Außenseite einer großen Kurve - hauptsächlich, weil es keine Möglichkeit gibt, eine Verbindung herzustellen, die sich nicht illegal schneidet
[5,0,0]
oder[0,5,0]
wäre1
. Ist das korrekt? Könnten Sie einen solchen Testfall hinzufügen?[8,0,0]
zwei 2x2-Elemente ist, die sich in der Mitte des Gitters überlappen?Antworten:
[JavaScript (Node.js)], 1220 Byte
Probieren Sie es online!
Hinweis: Der Eingang ist eigentlich die Variable q am Anfang. [2,6,4] wird auch einige Zeit in Anspruch nehmen, da dies eine Brute-Force-Lösung ohne Optimierungen ist.
Ich habe das tatsächlich getan, weil es seit über einem Jahr nicht mehr beantwortet wurde und ich war nur ein bisschen neugierig, ob es möglich war.
Ursprünglicher Code:
Zuerst sollte ich eine Grafik der verwendeten Kacheln beifügen.
Tut mir leid, wenn der Artikel schwer zu lesen ist. Ich bin es nicht gewohnt zu erklären, wie mein Code funktioniert.
PS Ich habe auch ein paar Funktionen zum Zeichnen der Karten zu einem PNG gemacht, aber diese wurden natürlich entfernt, um zumindest etwas Platz zu sparen.
quelle
p[a.n]-=1
von entschieden habenp[a.n]--
?q
ist keine zulässige Eingabemethode . Am häufigsten wird es entweder als Funktionsargument angegeben oder von stdin gelesen.