Sie haben einen kleinen Roboter mit vier Abstandssensoren. Es kennt die Aufteilung eines Raums, hat aber keinen anderen Orientierungssinn, als sich auf die Gitterausrichtung festlegen zu können. Sie möchten anhand der Messwerte herausfinden können, wo sich der Roboter befindet, dies kann jedoch aufgrund der begrenzten Sensoren nicht eindeutig sein.
Erklärung der Herausforderung
Sie erhalten eine Raumaufteilung und vier Abstandsmessungen im Uhrzeigersinn, die die Anzahl der Zellen zwischen Ihnen und einer Wand angeben. In der Mitte des Raums können sich Wände befinden, und die Ränder des Gitters sind ebenfalls Wände. Der Roboter kann nicht auf einer Wand platziert werden.
Ihr Ziel ist es, alle Stellen innerhalb des Raums aufzulisten, an denen sich der Roboter befinden könnte, um die angegebenen Messwerte zu erhalten. Denken Sie daran, dass der Roboter keinen Orientierungssinn hat (außer dass er auf 90-Grad-Winkeln im Raster verriegelt ist, dh der Roboter wird niemals diagonal oder in einem anderen Schräglaufwinkel ausgerichtet sein), sodass ein Wert von [1, 2, 3, 4] entspricht beispielsweise dem Lesen von [3, 4, 1, 2].
Beispiele
In diesen Beispielen werden die Zellkoordinaten als 0-indizierte (x, y) Paare aus der Zelle oben links angegeben. Die Messwerte werden im Uhrzeigersinn in einer Liste in eckigen Klammern angegeben. Layouts verwenden Pfundzeichen für Wände und andere Zeichen (normalerweise Punkte), um leere Zellen darzustellen.
Fall 1
. . . .
. . . .
. . # .
. . . .
- [1, 0, 2, 3] ==> (1, 0), (3, 1)
- [0, 0, 3, 3] ==> (0, 0), (3, 0), (0, 3), (3, 3)
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [1, 1, 2, 2] ==> (1, 1)
Fall 2
# a . # a .
a # . . # a
. . # . . #
# . . # . .
a # . . # a
. a # . a #
- [0, 0, 1, 1] ==> jede Position auf dem Gitter, die ein Punkt ist
- [1, 0, 0, 0] ==> alle a im Raster
Fall 3
.
- [0, 0, 0, 0] ==> (0, 0)
Fall 4
. # #
. . .
- [1, 2, 0, 0] ==> (0, 1)
- [0, 1, 2, 0] ==> (0, 1)
- [0, 0, 1, 0] ==> (0, 0)
- [1, 0, 1, 0] ==> (1, 1)
- [0, 1, 0, 1] ==> (1, 1)
Fall 5
. # . .
. . . .
. . # .
. . . .
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [0, 2, 2, 1] ==> (1, 1)
- [1, 0, 2, 2] ==> (1, 1)
- [0, 3, 0, 0] ==> (0, 0)
- [1, 0, 1, 1] ==> (1, 2)
Andere Regeln
- Die Eingabe kann in einem beliebigen geeigneten Format erfolgen. Die Eingabe ist ein Raster aus Wänden und Räumen und eine Liste von vier Abständen im Uhrzeigersinn.
- Die Ausgabe kann entweder eine Liste aller Zellen sein, die den Messwert erfüllen, oder eine modifizierte Version des Rasters, aus der hervorgeht, welche Zellen den Messwert erfüllen. Das genaue Format der Ausgabe spielt keine Rolle, solange es vernünftig und konsistent ist. Gültige Ausgabeformate umfassen, sind aber nicht beschränkt auf :
- Drucken einer Linie für jede Zellkoordinate als geordnetes Paar
- Drucken des Rasters mit
.
,#
und!
für Raum, Wände bzw. mögliche Positionen. - Rückgabe einer Liste geordneter Paare
- Rückgabe einer Liste von Indizes
- Rückgabe einer Liste von Listen mit unterschiedlichen Werten für Räume, Wände und mögliche Standorte
- Geben Sie eine Matrix von 0s und 1s zurück / drucken Sie sie aus, wobei Sie 1s verwenden, um Zellen darzustellen, in denen das Lesen stattfinden würde. (Es ist nicht notwendig, Wände einzuschließen)
- Auch diese Liste ist nicht vollständig, sodass andere Darstellungen gültig sind, solange sie konsistent sind und alle möglichen gültigen Positionen in einem Raster oder einer Liste anzeigen. Wenn Sie sich nicht sicher sind, hinterlassen Sie einen Kommentar und ich werde dies gerne klären.
- Sie können davon ausgehen, dass ein Messwert mindestens einer Stelle im Raster entspricht.
- Sie können davon ausgehen, dass das Eingaberaster mindestens 1x1 groß ist und mindestens einen leeren Bereich hat.
- Sie können davon ausgehen, dass das Eingaberaster in jeder Dimension nicht größer als 256 Zellen ist.
- Sie können davon ausgehen, dass das Eingaberaster immer ein perfektes Rechteck und nicht gezackt ist.
- Es gibt keine Strafe oder Bonus, wenn Ihr Programm vernünftige Ausgaben für ungültige Eingaben liefert.
- Dies ist Code Golf, also gewinnt der kürzeste Code.
Case 5
scheinen nicht ganz richtig zu sein. Ich(0,2),(2,1)
,(1,3)
,(1,3)
, undnothing
.