Beschreibung
Die Aufgabe dieser Herausforderung besteht darin, ein Programm oder eine Funktion zu entwickeln, die ein bestimmtes Objekt in einem Raum verfolgt.
I / O.
Ihr Programm erhält 3 Eingaben, die auf jede sinnvolle Weise vorgenommen werden können :
n
wird die Größe der Flugzeugseite sein. (Für ist Ihre Ebene also ). Sie können davon ausgehen, dass n
es sich immer um eine ungerade Ganzzahl handelt.
s
wird die Startposition des Objekts sein, angegeben als ein Paar von Koordinaten.
D
wird ein Vektor von geordneten Paaren sein. D
folgt dem Format , wobei immer eine von 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
für die kardinale und primäre interkardinale Richtung ist und eine ganze Zahl für die Anzahl von 'Ticks' ist.
Angesichts dieser Eingaben muss Ihr Programm eine Verfolgung des Objekts in der Ebene ausgeben.
Regeln
Die Ausgabe muss die Grenzen der Ebene enthalten. Z.B:
- 21012 + + ┌─────┐ 2│ │ 1│ │ 0│ │ 1│ │ 2│ │ -└─────┘
wäre ein Beispiel für eine leere Ebene. Die Zahlen oben und seitlich dienen nur als Referenz und müssen nicht gedruckt werden.
Sie können beliebige Zeichen für die Grenzen verwenden, sofern es sich nicht um Leerzeichen handelt (oder als Leerzeichen gerendert werden). Die von Ihnen ausgewählten Zeichen müssen die gesamte Ebene abgrenzen, sodass zwischen ihnen keine Lücken bestehen dürfen.
Einige akzeptable Flugzeuge umfassen: ┌──┐ .... ---- + - + │ │. . | | | | │ │. . | | | | └──┘; ....; ----; + - + Nicht akzeptable Flugzeuge umfassen: .... .... ++++. . . . + +. . . + +. . ;; ....; ....; + +; . .
Das zu verfolgende Objekt kann ein beliebiges Zeichen sein, solange es nur 1 Feld in der Ebene einnimmt und sich von den Begrenzungszeichen unterscheidet.
Die Spur des verfolgten Objekts kann auch ein beliebiges Zeichen sein, sofern diese nur 1 Feld in der Ebene belegen und sich vom Objekt unterscheiden.
Für jedes Element in muss das Objekt Leerzeichen in Richtung und eine Spur hinterlassen.
Wenn das Objekt eine Grenze treffen würde, wird es reflektiert. Wenn das Objekt noch Bewegungen hat, bewegt es sich weiter in die Richtung, in die es reflektiert wurde.
Als Referenz spiegeln sich diese Richtungen zueinander wider:
→ wenn die obere oder untere Grenze erreicht ist;
→ wenn eine seitliche Grenze erreicht ist;
Die endgültige Ausgabe enthält die neuesten möglichen Spuren. Wenn das Objekt eine Spur in einem Bereich hinterlassen würde, in dem bereits eine Spur vorhanden ist, überschreibt das neuere Spurenzeichen das ältere.
Standardschlupflöcher sind wie üblich standardmäßig verboten .
Wertung:
Dies ist eine Code-Golf- Herausforderung.
Beispiele:
Arbeiten Sie es aus:
0 ┌─────┐ │ │ │ │ 0│ ○ │ │ │ │ │ └─────┘
0 ┌─────┐ │ ○ │ │ \ │ 0│ \ │ │ │ │ │ └─────┘
0 ┌─────┐ │∧ │ │ | \ │ 0│ ○ \ │ │ │ │ │ └─────┘
0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
(Die Nullen dienen nur als Referenz und müssen nicht in der endgültigen Ausgabe enthalten sein.)
0 ┌─────────┐ │ │ │ │ │ │ │ ∧ │ 0│ / | │ │ ○ / | │ │⟨ / │ │ \ / │ │ ∨ │ └─────────┘
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Testfälle:
Ausgabe:
0 ┌─────┐ │∧ │ │ | \ │ 0│└ ○ \ │ │ │ │ │ └─────┘
Eingabe: , ,
Ausgabe:
0 ┌─────────┐ │ ○ │ │ \ │ │ \ │ │ \ │ 0│ / | ⟩│ │ ∧ / / │ │⟨ \ / / │ │ \ \ / │ │ ∨ ∨ │ └─────────┘
Eingabe: , ,
Ausgabe:
0 ┌───┐ │ | │ 0│- ○ ┐│ │ | │ └───┘
Eingabe: , ,
Ausgabe:
0 ┌───────────┐ │ ∧ │ │ / \ │ │┌ - / - \ \ │ │ \ | / \ \ │ │ \ | \ \ │ 0│ | / ⟩│ │ | \ / / │ │ | / ○ │ │ | / \ │ │ ∨ \ │ │ \ │ └───────────┘
'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'
eine 0-indizierte (oder 1-indizierte) Ganzzahl verwenden? So[('NW',2),('S',2),('E',1)]
wird[[7,2],[4,2],[2,1]]
zum Beispiel.Antworten:
JavaScript (ES6), 228 Byte
Nimmt Eingabe als0 7
(n,x,y,[[dir,len],[dir,len],...])
Gibt eine Zeichenfolge mit
0
für eine Grenze,1
für eine Ablaufverfolgung und3
für die Endposition aus.Probieren Sie es online aus!
Wie?
Das Initialisieren und Zeichnen in eine 'Leinwand' (dh eine Matrix von Zeichen) ist in JavaScript etwas mühsam und langwierig.
Dieser Code verwendet eine andere Strategie: Anstatt die Ausgabe in einem 2D-Array zu speichern, wird eine Zeichenfolge zeichenweise von links nach rechts und von oben nach unten erstellt. Bei jeder Iteration:
0
wenn wir eine Grenze überschreiten.1
oder3
wenn ja, oder ein anderes Leerzeichen aus.Alles in allem ist dies vielleicht nicht der kürzeste Ansatz, aber ich dachte, es lohnt sich, es zu versuchen.
quelle
Java 10,
350343340336 BytesD
ist ein 2D-Integer-Array, bei dem die Richtungen 0-indizierte Ganzzahlen sind :N=0, NE=1, E=2, SE=3, S=4, SW=5, W=6, NW=7
. Diex,y
Startkoordinaten sind zwei separate Parameters
undS
. Die Ausgabe ist eine Zeichenmatrix.Es verwendet
#
als Grenze,*
als Spur undO
für die Endposition verwendet (es können jedoch alle drei ASCII-Zeichen im Unicode-Bereich[33,99]
für dieselbe Byteanzahl sein, wenn Sie möchten).Probieren Sie es online aus.
-4 Bytes dank @ceilingcat .
Kann definitiv noch mehr Golf gespielt werden, indem man die Bewegungen vereinfacht und in welche Richtung wir noch mehr reisen.
Erläuterung:
y<2&i<2|y>=n&i>2&i<5?4-i:x<2&i>4|x>=n&i>0&i<4?8-i:y<2&i>6?5:y<n|i!=5?i:7
ist eine Golfversion davon unten unter Verwendung4-i
und8-i
für die meisten Richtungsänderungen:quelle
Holzkohle , 74 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Nimmt Eingaben im Format n, x, y, d vor, wobei d ein Array von Arrays von [Entfernung, Richtung] -Paaren ist, wobei die Richtung eine numerische Codierung von 0 = Süd im Uhrzeigersinn bis 7 = Südost ist. Erläuterung:
Geben Sie
n
ein Feld ein und zeichnen Sie es, dessen Inneres die Größe hat, die auf dem Ursprung zentriert ist.Eingabe und Sprung zu
x
undy
(aber negieren,y
da die y-Achse von Charcoal nach unten zunimmt).Schleife über die Einträge in
d
.Extrahieren Sie die Anfangsrichtung.
Wiederholen Sie dies für den gewünschten Abstand.
Speichern Sie die Richtung.
Machen Sie einen experimentellen Schritt in diese Richtung.
Wenn dies von den Seiten abweicht, drehen Sie die Richtung horizontal.
Wenn dies oben oder unten geschieht, drehen Sie die Richtung vertikal.
Reduzieren Sie die Richtung Modulo 8 (die Pivot-Befehle akzeptieren nur Werte von 0 bis 7).
Machen Sie den experimentellen Zug rückgängig.
Zeigen Sie in die richtige Richtung, drucken Sie eine Spur und bewegen Sie sich.
Gehen Sie zurück in die Standardrichtung und drucken Sie das Objekt an der aktuellen Position.
quelle
JavaScript, 206 Bytes
Nimmt die Eingabe als (n, x, y, [[dir, len], [dir, len], ...]) auf, wobei Richtungen mit Bitmasken codiert werden:
Gibt einen String mit aus
Die verschiedenen Werte für Grenzen werden verwendet, um die nächste Richtung zu bewerten
Weniger Golf gespielt
PRÜFUNG
quelle
C (gcc) ,
352323 BytesDank Deckenkatze 29 Bytes runtergegolfen.
Probieren Sie es online aus!
Das Programm nimmt Eingaben als Befehlszeilenargumente (wie
a.out 10 1 1 3 5 0 4 7 2
):E
Erläuterung
quelle