Du bist ein Entdecker, der eine unbekannte Welt abbildet. Ihr Schiff wird vom Wind getragen. Wo geht es hin, wer weiß?
Jeden Tag sehen Sie in Ihrem Fernglas Merkmale im Norden, Süden, Osten und Westen. Sie sehen immer vier solche Merkmale, die den Hauptrichtungen entsprechen. Ihr Fernglas meldet ASCII-Symbole wie folgt:
~~.*
, ~~~~
, ~.^^
,~#~#
Die Symbole sind in der Reihenfolge (Nord, Süd, Ost, West).
Dies sind die Symbole: ~
= Meer, .
= Küste, ^
= Berg, *
= Baum, #
= ungültig (keine Beobachtung, wenn Sie den Rand der Welt sehen oder die Landschaft durch Nebel verdeckt ist). Ihr Fernglas sieht in jede Richtung genau eine Einheit.
Jede Nacht siehst du zu den Sternen hoch, um zu sehen, wie weit du gereist bist. Wenn Sie die Sterne betrachten, sehen Sie ein ASCII-Symbol wie das folgende:
n
, s
, e
,w
entsprechend Nord, Süd, Ost und West. Sie bewegen sich jede Nacht genau eine Einheit nach Norden, Süden, Osten oder Westen. Als Entdecker erhalten Sie also einen endlosen Strom von Symbolen:
~~.*n~~~~s~~.*s~.**
Ihre Aufgabe ist es, eine 2D-Karte der Welt auszugeben (wo ?
unbekannte Teile der Karte sind, Norden ist oben, Osten ist rechts):
?~~~??????
?~~~??????
?~~~.^^.??
?~~.***.~~
~~.*^^*.~~
~~~..~~~~~
~~~~~~~~~~
~~~~~~~~~~
Der Einfachheit halber nehmen wir an, dass Sie in der unteren linken Ecke der Karte beginnen. Angenommen, alle Karten sind 8x8.
Hier ist ein einfaches 3x3 Beispiel. Angenommen, die Karte sieht folgendermaßen aus:
~.~
~^~
~.~
Mit folgender Eingabe: ~#.#n~~^#s
Sie erhalten diese Ausgabe:
~??
~^?
~.?
Weitere Beispiele für Ein- und Ausgänge:
Eingang
~#~#n~~~#n~~~#n~~~#n~~~#n~~.#n~~.#n#~~#e#.~~e#.~~e#.~~e#.~~e#~~~e#~~~e#~#~s~~#~s~~#~s~~#~s~~#.s~~#~s~~#~s~##~w~#~~w.#~~w^#~~w.#~~
Ausgabe
~~~~~~~~
~....~~~
~.????~~
~~????~~
~~????.~
~~????~~
~~?.^.~~
~~~~~~~~
Eingang:
~#~#e~#~~e~#~~e.#~~e^#~~n.~..n~^~.n~.~~n.~~.n.~~*n~.~.n#.~~w#.~~w#.~~s~*..s..*.s*~.~s.~~~s
Ausgabe:
?~~~~~??
?....~??
?.**.~??
?~..~~??
?~~~~~??
?~~..~??
~~~.^.??
~~~~~~??
quelle
~#~#n~~~#n~~~#n~~~#n~~~#n~~.#n~~.#n#~~#e#.~~e#.~~e#.~~e#.~~e#~~~e#~~~e#~#~s~~#~s~~#~s~~#~s~~#.s~~#~s~~#~s~##~w~#~~w.#~~w^#~~w
) ist falsch, und die Ausgabe sollte haben,??
wo es heißt?.
Antworten:
MATL ,
685958 BytesProbieren Sie es online!
Erläuterung
Die Karte wird unten im Stapel aufbewahrt und nach und nach gefüllt. Die aktuelle Position des Explorers wird in der Zwischenablage J gespeichert.
Die Karte verwendet Matrixkoordinaten, also ist (1,1) oben links. Darüber hinaus wird eine lineare Indexierung mit Spaltenschwerpunkt verwendet. Dies bedeutet, dass auf die Elemente der 8 × 8-Matrix, die die Karte darstellen, mit einem einzelnen Index wie folgt zugegriffen wird :
So ist beispielsweise das Element (3,2) der Matrix das Element mit dem linearen Index 11. Die Bewegung nach Norden, Süden, Osten und Westen entspricht einer Addition von -1, 1, 8 oder -8 zum linearen Index. Das Array [-1 1 8 -8] dient dazu, zwei verschiedene Dinge zu kodieren:
Die Eingabezeichenfolge ist in
5
Zeichenblöcke unterteilt. Da dem ersten Block das erste Zeichen (das, was Bewegung anzeigt) fehlt,s
wird willkürlich eine Initiale eingefügt, um alle Blöcke gleich groß zu machen. Um dies zu kompensieren, beginnt der Explorer an Position 7 und nicht an Position 8, sodass die anfängliche Verschiebung nach Süden (Addition von 1 zum linearen Index) ihn an Position 8 lässt.Die Stücke von 5 Zeichen werden in einer Schleife verarbeitet. Das erste Zeichen aktualisiert die Position und die verbleibenden 4 werden, sofern sie nicht identisch
#
sind, in die entsprechenden Einträge der Matrix geschrieben, die die Karte darstellt.quelle
C
210,208,207 BytesDieser verwendet printf und scanf zum Lesen der Eingabe und ein linearisiertes Array anstelle von x, y; Ich glaube, es ist genug anders als bei Millibyte .
Golf gespielt:
Etwas ungolfed:
Darstellung:
Sie beginnen auch bei Position 8, da hierdurch ein Zeichen aus der Druckschleife entfernt wird.
quelle
Fortran,
263251247235234216 Bytes1D-Version (ähnlich der von Don Muesli):
2D Version:
Um freie Form und Vorverarbeitung zu ermöglichen, benötigt die Datei die Erweiterung
.F90
, zexplorer.F90
. Die Eingabe wird von STDIN gelesen:quelle
C
265226224 BytesDie Map ist 8x8, das habe ich vorher nicht bemerkt. Und hier ist die 265-Byte-Lösung, die für Karten mit variablen Abmessungen funktioniert:
quelle
a[8][8]
ausreichen?int a[8][8]
kostenlose Karteninitialisierung, und mit charm[64]
bekomme ich große Rabatte für die Kartenausgabe. Wirklich enge Zählungen, obwohle
undw
in Ihrer Kartendarstellung umkehren , können Siefor(x=8;x--;)putchar((i=a[x][y])?i:63)
zwei Bytes bei der Ausgabe sparen.c=getchar(),c+1
nicht gleichbedeutend mitgetchar(),c++
oder handelt es sich um einen Trick?Ruby,
169147 BytesVolles Programm. Übernimmt die Eingabezeichenfolge von STDIN (Sie müssen sie wahrscheinlich aus einer Datei einlesen, um zu verhindern, dass nachfolgende Zeilenumbrüche die Dinge durcheinander bringen) und gibt die resultierende Zuordnung an STDOUT aus.
Eine Tonne gekürzt, indem alle Saiten zu einer zusammengefügt und später aufgeteilt wurden.
Ungolfed:
quelle
Lua, 354 Bytes ( online testen )
Golf gespielt:
Leicht ungolfed:
quelle
x=x+(("w e"):find(e)or 2)-2 end
nicht seinx=x-2+(("w e"):find(e)or 2)end
?Kotlin, 242 Bytes
Die Zeilenumbrüche können auf Wunsch durch Semikolons ersetzt werden.
Versuch es hier
quelle