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 # .