BEARBEITEN
Es scheint, dass es nach meinem Tippfehler im ursprünglichen Beitrag einige Verwirrung gab, bei dem ein Kleinbuchstabe o zum Definieren der Ebene und später ein Großbuchstabe o verwendet wurden. Leider wurde dieser Fehler nicht in der Sandbox gefunden. Da viele Mitglieder mit beiden Antworten geschrieben haben und der Tippfehler mein Fehler war, werde ich in der Definition der Ebene entweder Groß- oder Kleinbuchstaben o zulassen. Ich habe dafür eine neue Regel hinzugefügt.
Hintergrund
Ich mag ASCII-Kunstanimationen, wie ich sie nenne, und hier ist eine andere. Ich denke nicht, dass es zu schwierig ist, dies umzusetzen, deshalb werden wir hoffentlich einige kurze und interessante Antworten erhalten.
An alle anderen Community-Mitglieder
Wenn Sie Ihre Antwort verbessern, ändern Sie bitte Ihre Byteanzahl als
alte Byteanzahl neue Byteanzahl
So können wir Ihren Fortschritt sehen. Vielen Dank!
Herausforderung
Hier ist ein ASCII-Flugzeug
--O--
Hier ist eine ASCII-Landebahn
____| |____
Das Flugzeug startet an 5 Zeilen oberhalb der Landebahn. Um Zusammenstöße zwischen metrischen und imperialen Systemen zu vermeiden und dies zu einer wahrhaft internationalen Herausforderung zu machen, erwähne ich weder Meter noch Fuß. Beispiel:
--O--
____| |____
Das Flugzeug muss genau in der Mitte der Landebahn landen, wie unten gezeigt:
____|--O--|____
Eingang
Die anfängliche horizontale Position der Ebene wird durch eine Ganzzahleingabe definiert, die verwendet wird, um die Spitze des linken Flügels zu referenzieren, dh sie liegt zwischen 0 und einschließlich 10.
Ausgabe
Jede Stufe des Flugzeugfluges muss gezeigt werden. Beispiel unten (Eingabe = 10):
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
____|--O--|____
Um die Dinge einfach zu halten, ignorieren wir die Gesetze der Perspektive. Die Landebahn bleibt gleich groß, wenn Sie näher kommen.
Regeln
- Aktualisieren Die Mitte der Ebene kann entweder in Groß- oder Kleinbuchstaben angegeben werden. Wenn Ihre Sprache die oben genannten Zeichen nicht unterstützt, können Sie auch alternative ASCII-Zeichen verwenden.
- Die Ebene senkt sich um 1 Linie pro Frame.
- Die Ebene kann sich jedes Mal, wenn sie um eine Linie absteigt, nur 1 Feld nach links oder rechts bewegen. Es muss sich nicht auf jeder Abstiegslinie bewegen. Solange es auf der Landebahn endet, liegt es an Ihnen, ob Sie sich nach rechts oder links bewegen. Du bist der Pilot!
- Keine Fehlerbehandlung erforderlich. Sie können davon ausgehen, dass die Eingabe immer eine gültige Ganzzahl von 0 bis einschließlich 10 ist.
- Die Ausgabe darf nur aus den oben gezeigten Zeichen bestehen (falls Ihre Sprache diese nicht unterstützt, siehe bearbeitete erste Regel) und muss dieselbe Größe haben, dh 6 Zeilen hoch und 15 Zeichen breit beginnen. Die Höhe kann sich im Verlauf verringern, wie im obigen Beispiel.
- Programm oder Funktion ist in Ordnung, muss aber eine Ausgabe wie oben gezeigt erzeugen.
- Führende / nachfolgende Leerzeichen / Zeilenumbrüche sind von mir in Ordnung.
- Wenn Sie möchten, können Sie den Bildschirm zwischen den Ausgabebildern löschen. Dies ist keine Voraussetzung.
- Standard-Schlupflöcher sind wie üblich verboten (obwohl ich nicht glaube, dass es viele gibt, die bei dieser Art von Herausforderung helfen würden).
- Dies ist Codegolf, so dass die kürzeste Antwort offensichtlich der Gewinner ist und wahrscheinlich die meisten Stimmen erhalten wird, aber möglicherweise nicht als die beste Antwort akzeptiert wird, wenn eine wirklich interessante Lösung in einer unerwarteten Sprache vorliegt, auch wenn sie länger ist. Fühlen Sie sich frei, alles zu posten, was den Regeln entspricht, solange es funktioniert.
Ungolfed-Referenzimplementierung in Python 2 verfügbar unter Try it online! So können Sie sehen, wie es für verschiedene Eingabewerte aussieht.
Antworten:
TI-BASIC, 61 Bytes
quelle
TI-BASIC, 62 Bytes
Beachten Sie, dass TI-BASIC _ oder | nicht unterstützt und deshalb habe ich durch ein Kapital I und - ersetzt. Dies sollte die Byteanzahl nicht beeinflussen.
quelle
Python 2, 107 Bytes
Probieren Sie es online aus
Codieren Sie einfach die letzte Zeile für das Landungsflugzeug fest. Es kann wahrscheinlich Golf gespielt werden, indem Teile von früher wiederverwendet oder in die Schleife integriert werden.
quelle
Perl, 94 Bytes
93 Byte Code +
-p
Flag.Probieren Sie es online!
quelle
}{
(und das$"
Durcheinander mit der Syntaxhervorhebung).JavaScript (ES6), 108 Byte
Probier es aus
Code-Snippet anzeigen
Verwendung
Rufen Sie einfach
f
mit dem Index des Flugzeugs an.Ausgabe
quelle
Scala,
224181 BytesEDIT : Ich hatte keine Ahnung, dass du
"string"*n
es n-mal wiederholen könntest ! Scala bläst mich immer noch um. Fehlt dieif(t>0)
stattif(t==0)
war ein Anfängerfehler. Danke für die Tipps, Suma !Ursprüngliche Bemerkungen:
Ich dachte, es würde Spaß machen, eine rekursive Lösung zu finden. Ich bin relativ neu in Scala, daher bin ich mir sicher, dass dies alles andere als optimal ist.
quelle
:Unit=
. Wenn Sie das Gleichheitszeichen weglassen, wird der Rückgabetyp auf Einheit gesetzt.o
in der ersten Zeile initialisiert ? Und dai
immer> = 0 ist, können Siei!=0&&i==t
zui>0&i==t
(3. Zeile) wechseln .Batch, 230 Bytes
x
Gibt die Anzahl der Leerzeichen an, die vom Anfang der Zeichenfolge entfernt werdens
sollen. Daher subtrahiere ich den Parameter von 10. Die letzte Zeile ist die nächste Zeile, die der Stapel enthalten mussx-=sgn(x-5)
.quelle
sed, 181 Bytes + 2 für
-nr
FlagsUngolfed
Verwendung:
$ echo 2 | sed -nrf flightsim.sed
quelle
Retina ,
8683 BytesProbieren Sie es online!
Es gibt wahrscheinlich eine Art Komprimierung, die ich auf der Landebahn und im leeren Raum darüber hätte verwenden können, aber alles, was ich versucht habe, ist teurer als Klartext (in Retina ist ¶ eine neue Zeile, sodass Sie den Anfangszustand im Klartext auf der sehen können zweite Reihe).
quelle
Scala ,
177, 163, 159,137 BytesGestützt auf eine andere Antwort mit erheblichen Einsparungen.
quelle
Perl 6 ,
979081 BytesAnders als es aussieht, gibt es die * Kleinbuchstabenversion des Flugzeugs (
--o--
) aus, wie in der aktualisierten Aufgabenbeschreibung angegeben.Probieren Sie es online!
Wie es funktioniert
Bitweise Stringoperatoren FTW!
Dies funktioniert, weil bitweise Zeichenfolgenoperatoren die Codepunktwerte der Zeichen an einer bestimmten Position in zwei Zeichenfolgen verwenden, um ein neues Zeichen an dieser Position in der Ausgabezeichenfolge zu berechnen.
In diesem Fall:
Für eine Großbuchstabenebene hätten
O
wir~^
(string bitwise XOR) mit einer Ebenenmaske von\r\ro\r\r
(+4 Bytes für Backslashes) verwenden können:Die Formel für den Versatz der Ebene
h + v*(17 - h/5)
wurde vereinfacht aus:quelle
Python 2 , 160 Bytes
Probieren Sie es online!
Hier ist die Referenzimplementierung, die von 384 auf 160 heruntergespielt wurde. Ich denke, es ist noch ein weiter Weg. Gerade zum Spaß gepostet und um eine bessere Python-Antwort zu ermutigen.
quelle
while-~x
?i
alsi+=(i<5)-(i>5)
Befunge-93,
136130 BytesProbieren Sie es online!
Erläuterung
quelle
Ruby, 94 Bytes
Gibt die Position des Flugzeugs gefolgt von Zeilenumbrüchen und dem Flughafen aus. Dann verschiebt es die Ebene um 1, -1 oder 0, abhängig von ihrer Position relativ zu 5.
Nachdem die obigen 5-mal wiederholt wurden, wird das Flugzeug im Flughafen ausgedruckt.
quelle
8. ,
177172 BytesDas Wort
f
erwartet eine ganze Zahl zwischen 0 und 10.Verwendung
Erläuterung
quelle
Mathematica, 111 Bytes
Anonyme Funktion. Nimmt eine Zahl als Eingabe und gibt eine Zeichenfolge als Ausgabe zurück. Könnte wahrscheinlich weiter golfen werden.
quelle
QBIC ,
939184 BytesEinige Bytes wurden gelöscht, indem die Deklaration von X $ ersetzt wurde. optimierte die FOR-Schleife, die den Abstand über Grund druckt. Die nachfolgende Erklärung bezieht sich auf die alte Version, funktioniert jedoch im Prinzip genauso.
Zum Testen (und zur Ästhetik) hatte ich eine etwas andere Version mit 103 Bytes:
Diese sind funktional identisch. Der zweite hat den Zusatz, dass der Bildschirm zwischen den Bildern gelöscht wird und zwischen den Bildern für 0,5 Sekunden angehalten wird.
Beispielausgabe
Beachten Sie, dass ich zwischen Frames zwei Zeilenumbrüche eingefügt habe. Der meistgespielte Code oben fügt keine leeren Zeilen zwischen Frames ein, der coolere löscht den Bildschirm.
Erläuterung
Da ich das Gefühl habe, dass dies viele Dinge berührt, die ich an QBIC wirklich mag, und einen guten Einblick in die Funktionsweise einiger Funktionen unter der Haube gibt, habe ich die Erklärung ein wenig übertrieben. Beachten Sie, dass QBIC im Kern ein QBasic-Interpreter für Codegolf ist. QBIC-Code wird eingegeben - QBasic-Code wird ausgegeben (und anschließend ausgeführt).
quelle
SmileBASIC,
109105 Bytesquelle
PHP 7, 139 Bytes
immer noch furchtbar lang
Nimmt Eingaben vom Kommandozeilenargument entgegen; renn mit
-r
.Nervenzusammenbruch
quelle