Koordinaten in der Welt der flachen Erde bestehen aus Breitengrad (x) und Längengrad (y), die ganze Zahlen im Bereich von 0 bis 9999 sind. Ähnlich wie Gaußsche Ganzzahlen , aber sie werden immer mit dieser Notation geschrieben:
411S 370E
Das heißt, mit S
oder N
an den Breitengrad angehängt und E
oder W
an den Längengrad angehängt, mit Zwischenräumen zwischen den beiden Komponenten.
Tor
Schreiben Sie ein Programm (keine Funktion), das zwei durch Leerzeichen getrennte Koordinaten liest und deren Summe ausgibt. Die erste Koordinate ist ein Startpunkt, die zweite ist eine Verschiebung und die Ausgabe ist die resultierende Position.
Input-Output
Da es bei dieser Herausforderung teilweise um die Formatierung geht, werde ich versuchen, die Eingabe- und Ausgabeformate eindeutig zu definieren.
Das bevorzugte Eingabeformat hat 1 Leerzeichen zwischen den Koordinatenkomponenten, keine führenden Nullen und ein Zeilenumbruchzeichen zwischen den beiden Koordinaten. Das Programm muss das bevorzugte Format lesen können.
Die Ausgabe kann beliebig viele Leerzeichen und führende Nullen enthalten. Wenn es sich vom bevorzugten Eingabeformat unterscheidet, muss das Programm auch dieses Format lesen können.
Um dies zu verdeutlichen, darf (wird) die Eingabe keine zusätzlichen Formatierungszeichen enthalten. Nur Leerzeichen und Zeilenumbrüche, wo nötig.
Wertung
Dies ist ein Experiment zu einer neuen Gewinnbedingung. Ich werde den Gewinner auswählen, indem ich in ein paar Wochen eine Antwort akzeptiere. Wenn danach eine bessere Antwort erscheint, ändere ich die akzeptierte Antwort.
Die Punktzahl für das Programm ist die Anzahl der Bytes. Das Gewinnerprogramm ist kürzer als 400 Byte, hat die geringste Byteanzahl, ist jedoch in der ausführlichsten Programmiersprache geschrieben. So ermitteln Sie den Gewinner:
- Entfernen Sie Programme mit einer Byteanzahl von 400 oder mehr (sie können teilnehmen, aber nicht gewinnen).
- Betrachten Sie nur das kürzeste Programm für jede Programmiersprache
- Das längste Programm gewinnt
Polyglots konkurrieren mit Programmen in allen Sprachen, in denen sie gültig sind (z. B. wenn ein Programm in beiden Sprachen gültig ist bash
und sh
mit Programmen in beiden Sprachen konkurriert).
Testfälle
In den Testfällen sind die ersten beiden Zeilen die Eingabe und die dritte Zeile die Ausgabe.
0S 0E
0S 0W
0N 0E
(Die Richtung von Null spielt sowohl bei der Eingabe als auch bei der Ausgabe keine Rolle.)
0S 9999E
9999N 9999W
9999N 0E
(Maximalwerte)
42S 314W
42N 2718W
0N 3032W
(Die Richtung von Null spielt in der Ausgabe keine Rolle.)
5555N 8888W
7777S 0E
2222S 8888W
(keine negativen Werte; ändern Sie die Richtung, wenn Sie das Vorzeichen ändern müssen)
0001N 4545W
0999N 5454W
1000N 9999W
(Wenn das Programm führende Nullen und mehrere Leerzeichen ausgibt, muss es diese lesen können; es muss auch Eingaben lesen können, die sie nicht enthalten.)
8888N 8888W
9999N 9999W
(ungültige Eingabe - jedes Verhalten ist akzeptabel, einschließlich Absturz und Endlosschleife)
quelle
Antworten:
ABAP,
377365 BytesUngolfed:
Es war tatsächlich eine Herausforderung, innerhalb von 400 Zeichen zu sein.
Einige Notizen:
ADD c TO a.
eine meiner bevorzugten ausführlichen Aussagen.FORM
und diePERFORM
Explosion der Zeichenanzahl habe ich mich an Makros gehalten+
ohne vorangestelltes Leerzeichen ist ein Offset-Operator, der viele Leerzeichen im Code benötigtRIGHTPLUS
den Ausdruck verwenden zu können, musste eine Zahl sein, also muss man mit 1 multiplizieren, aber dann hat das Format DezimalstellenDECIMALS
quelle
JavaScript (ES6), 118 Byte
quelle
MATLAB,
327304296290282276267259255253 BytesIch glaube, ich nähere mich jetzt einem Limit. Ich habe es geschafft,
51, 60687274 Bytes aus einer Antwort zu entfernen, dieich für gut golfen hielt. =)Entfernt 8 Bytes durch die Einnahme
input
innerhalb derstrsplit
dank Luis Mendo. Weitere 6 Bytes wurden entfernt, indem alle Eingaben in ein Zellenarray anstatt in zwei übernommen wurden. Weitere 8 Bytes wurden entfernt, indem beide letzten Anweisungen übernommen wurdendisp()
. 6 Bytes durch Entfernenchar
und einige Klammern entfernt. Dies war in einer früheren Überarbeitung der Antwort nicht möglich. Das Aufteilen der Zellenelemente in vier Variablen kostete 15 Bytes, sparte aber 24, also 9 Bytes! 8 zusätzliche Bytes aufgrund eines verbessertendisp
Schemas.5*~~s
spart zwei Bytes im Vergleich zu(s>0)*5
. Somit werden 4 neue Bytes gespeichert (für s und t). Das Gegenteil dieses letzten Ausdrucks zu nehmen, spart noch 2 Bytes und83-5*~s
ist kürzer als78+5*~~s
Golfcode:
Gleicher Code, aber mit Zeilenumbrüchen:
Testfälle:
Speichern Sie die oben genannten als
flat_earth.m
quelle
R, 196 Bytes
R ist für Golfstandards ziemlich ausführlich. Wir werden sehen...
Ungolfed:
Bearbeiten, um hinzuzufügen: Ich habe mir nur die anderen Antworten angesehen und bin überrascht, dass mein Eintrag einer der kürzesten ist! Vielleicht ist R nicht so ausführlich wie ich dachte ...
quelle
Java, 372 Bytes
Ungolfed
Anmerkungen
A.java
, kompilieren mitjavac A.java
, ausführen mitjava A
. Geben Sie dann die Eingabezeile getrennt oder als zwei separate Eingänge auf stdin ein.Ausgänge:
quelle
SQL (PostGreSQL 9.4), 305 Byte
Implementiert als vorbereitete Anweisung, die 2 Zeichenparameter akzeptiert. Ein Parameter für jede Eingabezeile.
Es heißt wie folgt
und gibt eine Zeile aus, die eine einzelne Zeichenspalte für das Ergebnis enthält.
9999N 0E
quelle
Java, 308 Bytes
Eine besser lesbare Version:
Golfen in Java ist eine besondere Art von Spaß. Die folgenden zwei Codezeilen machen dasselbe, aber die erste ist kürzer:
Der Code liest 4 Token von der Standardeingabe. Für jedes Token wird der Teil bis zum letzten Zeichen in konvertiert
int
, und das letzte Zeichen dreht optional sein Vorzeichen um.Dann wird der Wert hinzugefügt, der vor 2 Iterationen gelesen wurde. Java initialisiert Arrays auf 0, sodass dies bei den ersten beiden Iterationen das Richtige tut.
Dann werden die Werte formatiert und gedruckt. In den ersten beiden Iterationen wird jedoch stattdessen die leere Zeichenfolge gedruckt (sodass zwei zusätzliche Zeilenumbrüche in der Ausgabe angezeigt werden).
Es wird eine funky Arithmetik verwendet, sodass die Iterationsvariable (4,3,2 oder 1) und das Vorzeichen (-1 oder 1) zu einem auf Null basierenden Index in der Zeichenfolge kombiniert werden können
"ENWS"
.quelle
Perl 6, 130 Bytes
quelle
Ruby, 186 Bytes
Es ist zu kurz, sorry. Ich habe mein Bestes gegeben.
quelle
C - 267 Bytes
Ich dachte, C wäre lang ... könnte es genauso gut einfach aufstellen. ; _;
quelle
Befunge-93 , 240 Bytes
Beachten Sie, dass der Interpreter über ein einzeiliges Eingabefeld verfügt. Durch Einfügen des bevorzugten Formats wird die neue Zeile durch ein Leerzeichen ersetzt. Das Abrufen von Ganzzahlwerten
&
verbraucht bereits führende Leerzeichen und Nullen, sodass das bevorzugte Format allein mit dem Stapel gelesen werden kann&~&~&~&~
. Durch Hinzufügen von Schritten zum Einfügen der Werte in eine Leerzeile, sodass die Vektoren koordinatenweise abgerufen und verglichen werden können, kann das folgende 136-Byte-Programm (ohne Anmerkungen rechts von der Zeile) verwendet werden:Der Catch: Die Ausgabe erzwingt nach Ganzzahlen ein zusätzliches Leerzeichen, sodass eine Ausgabe im bevorzugten Format nicht möglich ist . Beispielsweise wird die Ausgabe als
1000 N 9999 W
statt angezeigt1000N 9999W
. Um Leerzeichen vor der Richtung jeder Koordinate bei der Eingabe zu überprüfen und zu ignorieren, werden vier zusätzliche Schleifen (eine für jede Koordinate) benötigt. Eine einzelne Schleife ist unten dargestellt:Das resultierende Programm kann an einer beliebigen Stelle in der Eingabe mehrere Leerzeichen enthalten (außer zwischen Ziffern).
Beispiel Eingabe:
0001 N 4545 W 0999 N 5454 W
quelle
Lua,
333328 BytesVerfügt über ein ungültiges Eingabesystem auf hoher Ebene und eine absolut innovative Endlosschleife für die wiederholte Verwendung.
Genießen ;)
Bearbeiten: 5 Bytes beim Umbenennen
math.abs
alsm
undprint
als gespeichertp
quelle
PHP 291 Bytes.
Macht nichts Kluges, stapft nur durch das Problem.
Die Regeln sollten eine zusätzliche Klausel enthalten, die besagt, dass nur die Sprache mit mindestens 2 Einträgen gewinnen kann.
quelle
PHP, 169 Bytes
Inspiriert von @Paul Drewett:
Nervenzusammenbruch
PHP,
206197195 Byteswörtlich gesagt, "moste verbose" wäre wahrscheinlich Mathematica oder Mathlab?
Wie kann ich die Größe verdoppeln ...
Nervenzusammenbruch
quelle
GolfScript - 111 Bytes
Erläuterung
quelle
Python 2.7 -
232175 BytesFunktioniert für alle Testfälle. Fügt immer N oder W für 0 ein. Ich bin sicher, ein besserer Python-Golfer als ich könnte ein paar Bytes mehr rasieren.
BEARBEITEN
Dank einiger großartiger Tipps von @ mbomb007 und @Titus plus, die ich entdeckt habe, dass ich die beiden raw_inputs mit einem Leerzeichen kombinieren könnte, habe ich nur ein .split () verwendet, das sich auf dem Leerzeichen aufteilt, ohne es anzugeben. Der Algorithmus ist der gleiche, aber viel besser Golf gespielt.
quelle
...str(x)...
durch...`x`...
; ersetzen("E" if q<0 else "W")
durch"WE"[q<0]
"S" in i or "E" in i
kann sicherlich geschriebeni in "ES"
oder ähnlich geschrieben werden.