Intro für Kinder
Immer wenn ich meine Kinder in einen Vergnügungspark bringe, werden die Kinder umso nervöser, je näher wir dem Park sind. Der Nerv ist am höchsten, wenn wir auf dem Parkplatz stehen und keinen Platz zum Parken finden. Ich habe mich daher entschlossen, nach einer Methode zu suchen, um den nächstgelegenen freien Parkplatz zu finden und den Zeitaufwand für das Parken zu minimieren.
Technisches Intro
Stellen Sie sich eine Darstellung eines Parkplatzes wie diesen vor:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
In dieser Darstellung *
bedeutet a eine Wand, einen ·
freien Parkplatz, einen E
Einstiegspunkt und ein C
bereits geparktes Auto. Jedes Leerzeichen ist eine Position, mit der sich das zu parkende Auto auf dem Parkplatz bewegen kann. Erweitern wir dieses Konzept nun auf 3D, um einen mehrstöckigen Parkplatz zu erstellen:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Die Zahlen 1
, 2
und 3
stellen die Verbindungen zwischen den Ebenen. Das 1
aus dem ersten Stock kommende 1
Auto verbindet sich mit dem im zweiten Stock, so dass ein Auto, das in die 1
Position im ersten Stock einsteigt, in der 1
Position im zweiten Stock erscheint.
Herausforderung
Schreiben Sie das kürzeste Programm, das die Entfernung zum nächsten freien Parkplatz berechnet, und geben Sie dabei ein Schema eines Parkplatzes wie das oben gezeigte an
Regeln
- Die Eingabe ist ein 3D-Zeichen-Array oder ein 2D-Zeichenfolgen-Array oder ein Äquivalent, und die Ausgabe ist eine einzelne Ganzzahl, die die Anzahl der Schritte angibt, die das Auto ausführen muss, um zum nächsten freien Parkplatz zu gelangen. Wenn Sie ein 3D-Zeichen-Array erhalten, kann der erste Index die Stockwerksnummer und der zweite und dritte die (x, y) -Position für jedes Stockwerk darstellen, aber das liegt bei Ihnen.
- Es wird nicht mehr als 9 Rampen geben, vertreten durch
[1-9]
. - Das Auto startet an der
E
Position (es gibt nur einen Einstiegspunkt pro Karte) und bewegt sich mit den Leerzeichen jeweils in eine von vier Richtungen: nach oben, unten, links, rechts. Das Auto kann auch·
Positionen und[1-9]
Positionen einnehmen. - Jeder Positionswechsel (Schritt) zählt als 1, und jedes Mal, wenn das Auto von einer Etage zur nächsten fährt, zählt er als 3, da das Auto eine Rampe nehmen muss. In diesem Fall zählt die Bewegung von einem Leerzeichen neben einem
1
zu sich1
selbst als 3 Schritte, da infolge dieser Bewegung das Auto in der1
Position auf der anderen Etage erscheint. - Das Auto kann die Matrixgrenzen nicht überschreiten.
- Die Zählung endet, wenn sich das zu parkende Auto in der gleichen Position wie a befindet
·
. Wenn es keine erreichbaren freien Parkplätze gibt, können Sie eine Null, eine negative Ganzzahl, einen Nullwert oder einen Fehler zurückgeben.
Beispiele
Im obigen Beispiel wäre das Ergebnis 32, da es billiger ist, in die vierte Etage zu gehen und auf dem nächstgelegenen Parkplatz in der Nähe von zu parken 3
. Die nächstgelegenen kostenfreien Parkplätze in der 3. Etage befinden sich in einer Entfernung von 33 und 34.
Andere Beispiele:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Answer: 28 (now the parking space in the 2nd floor is closer)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 4 2 5 3 6 *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
4 * 5 1 6 2 * 3
**********E****** ***************** ***************** *****************
Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * * * 3 * 2
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 3 * 2 * 1
**********E****** ***************** ***************** *****************
Answer: 16 (now the parking space in the 4th floor is closer)
1st floor 2nd floor 3rd floor 4th floor 5th floor
************ ************ ************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC 3 *·CCCCCCCC 4 *········C *
* * * * * * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2 *··CCCCCCC 3 *·······CC 4
************ ************ ************ ************ ************
Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)
1st floor 2nd floor 3rd floor
************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC *
* * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2
************ ************ ************
Answer: -1 (no free parking space)
1st floor
************
* *
* *
* E*
************
Answer: -1 (no parking space at all)
1st floor
************
* ····· *
*· ****
* ····· * E
*********
Answer: -1 (the parking lot designer was a genius)
Alternativen
- Sie können beliebige Zeichen verwenden, um die Parkplatzkarte darzustellen. Geben Sie in Ihrer Antwort einfach an, welche Zeichen Sie ausgewählt haben und was sie bedeuten.
Das ist Code-Golf , also kann das kürzeste Programm / die kürzeste Methode / Lambda / was auch immer für jede Sprache gewinnen!
Wenn Sie Hilfe mit dem Algorithmus benötigen, überprüfen Sie bitte meine (ungolfed) Implementierung in C # .
Antworten:
JavaScript (ES6), 199 Byte
Probieren Sie es online!
Wie?
Die rekursive Funktion g () nimmt als Eingabe:
Wenn f definiert ist, kopieren wir es einfach in die aktuelle Etage F . Andernfalls müssen wir nach dem neuen Stockwerk und den neuen Koordinaten suchen, indem wir über jedes Stockwerk und jede Reihe iterieren, bis wir den Einstiegspunkt c finden :
Wir definieren r als die aktuelle Zeile in der aktuellen Etage:
Der nächste Schritt besteht darin, sicherzustellen, dass die aktuelle Zelle c bei (x, y) definiert ist:
Wenn ja, markieren wir es als besucht, indem wir es auf setzen Fall g setzen , einen Wert, der keinen der bevorstehenden Tests auslöst:
Wenn c ein freier Parkplatz ist, beenden wir die Rekursion. Und wenn die Gesamtanzahl der Züge niedriger ist als unser bisher bestes Ergebnis, aktualisieren wir m entsprechend:
Wenn wir gerade eine neue Etage erreicht haben ( f ist undefiniert ) oder c ein Leerzeichen ist, verarbeiten wir einen rekursiven Aufruf für jede umgebende Zelle:
Andernfalls, wenn c eine Rampenmarkierung ist (dh eine Ziffer ungleich Null), verarbeiten wir einen einzelnen rekursiven Aufruf, um die neue Etage zu erreichen:
Zuletzt stellen wir die aktuelle Zelle auf ihren ursprünglichen Wert zurück, damit sie in anderen Rekursionspfaden erneut aufgerufen werden kann:
quelle
Kotlin , 768 Bytes
gebrauchter Zeitraum. Anstatt von ·. Ich wünschte, ich hätte Arnauld's Antwort verstanden, denn es wäre schön, 500 Bytes zu verlieren.
Probieren Sie es online!
quelle
Powershell,
299292 BytesEs wird angenommen, dass die Karte ein Rechteck ist .
Es verwendet
x
stattdessen·
. Um zu erhalten·
, müssen Sie das Skript als ASCII (nicht UTF-8) speichern undx
am ersetzen·
.Ungolfed und Testskript:
Ausgabe:
Erweiterter Ausgang zum Parken mit 16 Stufen:
Erläuterung
Es ist eine Art Lee-Pfadfindungsalgorithmus . Nur eines klug: 3 Stufen auf der Rampe werden als Dummy-Zustände realisiert
H->G->F->E
Powershell für einen genialen Parkplatzdesigner,
377369 BytesParkgestaltung ist eine
2D string array
. Keine Vermutungen zur Karte: beliebig lange Schnüre, Fußböden ohne Wände, Parkplätze ohne Einstieg, mehrstöckige und mehrstöckige Ausstiegsrampen. Die Gattungskosten betragen + 26%.Ungolfed und Testskript:
quelle