Willkommen zu meiner ersten Code-Golf-Challenge! :) Hüpfen wir gleich hinein.
Herausforderung:
Bei zwei gegebenen Gleitkommavektoren, O (Ursprung) und T (Ziel), müssen Sie ein Programm erstellen, um die Werte L und R auf STDOUT zu drucken.
- O ist eine Ecke des Platzes
- T ist eine Ecke des Quadrats, die sich gegenüber von O befindet
- L ist der 2D-Punkt (Ecke), der den anderen Punkt des unvollständigen Quadrats markiert
- R ist der 2D-Punkt (Ecke), der L gegenüberliegt
Regeln
- Die Werte für O und T müssen aus STDIN gelesen werden (siehe Beispieleingaben).
- Auch hier müssen die Werte von L und R auf STDOUT gedruckt werden.
Wertung und Boni
- Zählen Sie die Bytes Ihres Programms.
- Wenn Ihr Programm Linien zeichnet, die zwischen O , L , T und R liegen , subtrahieren Sie 15 Bytes von der Byteanzahl.
Beispiele
Die erste Zeile enthält Eingaben (erste eckige Klammern für O und nächste Klammern für T ) und die andere Zeile enthält die erwartete Ausgabe.
- [0, 0] [3, 3] Erwartet: [0, 3] [3, 0]
- [0, 0] [-2, -2] Erwartet: [-2, 0] [0, -2]
- [1, -1] [4, 2] Erwartet: [1, 2] [4, -1]
- [0, -1] [0, 1] Erwartet: [-1, 0] [1, 0]
HINWEIS : Ein- und Ausgänge können Gleitkommawerte sein!
Wichtige Informationen!
- Die Werte O und T können in jedem beliebigen Format verwendet werden, sofern sie von STDIN stammen (z. B. Inside [] oder () ...). Verwenden Sie das gewünschte Format.
- L und R können in beliebiger Reihenfolge gedruckt werden.
- Denken Sie daran: Wenn (O-> L-> T-> R-> O) verbunden sind, muss jede Seite die gleiche Länge haben!
Gewinnen
- Dies ist Code-Golf, so dass nur die wenigsten Byteantworten gewinnen!
- Die Antwort des Gewinners wird am Sonntag, den 15.11.2015, zwischen 20:00 und 22:00 Uhr (finnische Zeit) entgegengenommen.
Viel Spaß beim Golfen!
Antworten:
Im Ernst , 11 Bytes
Ein Port meiner TI-BASIC Antwort. Berechnet
mean(X)+i*(X-mean(X))
.Erläuterung:
Eingabe als eine Liste von zwei komplexen Zahlen:
[1-1j,4+2j]
und die Ausgabe in dem gleichen Format[(4-1j), (1+2j)]
.quelle
æ
und veranlassteî
(Multiplizieren mit i) eine Vektorisierung, wodurch eine nicht konkurrierende 9-Byte-Lösung möglich wurde. Ernsthaft fängt an, eine ernsthaft gute Sprache zu werden.Σ
2 Bytes?Σ
der Codepunkt 0xF4 ist.Im Ernst , 25 Bytes
,i││-++½)+-+½)++-½)±+++½)
Nimmt Eingaben als Liste:
[x1,y1,x2,y2]
Gleiche Strategie wie meine Python-Antwort, aber im Ernst!
Erläuterung:
Probieren Sie es online aus
quelle
TI-BASIC, 16 Bytes
Für einen Taschenrechner der Serie TI-83 + oder 84+.
Sofern ich nichts falsch verstanden habe, sagte OP, dass es in Ordnung sei, Ein- und Ausgaben als komplexe Zahlen zu betrachten. Das
i
hier ist die imaginäre Einheit, nicht die Statistikvariable.TI-BASIC hat eine
mean(
Funktion, funktioniert aber ärgerlicherweise nicht mit komplexen ListenERR:DATA TYPE
.Eingabe in das Formular
{1-i,4+2i}
für[[1,-1],[4,2]]
. Die Ausgabe erfolgt in der Form{4-i 1+2i}
für[[1,2][4,-1]]
.quelle
Matlab,
5145464542 BytesJetzt wird die Eingabe in einem Spaltenvektor erwartet:
[x0;y0;x1;y1]
(Ausgabe im gleichen Format) Ich habe es so geändert, dass es ein vollständiges Programm ist.Oder alternativ
Alte Lösung:
Die Eingabe erwartet Spaltenvektoren, z
f([0;0],[3;3])
Es werden auch zwei Spaltenvektoren (als 2x2-Matrix) zurückgegeben.
quelle
Japt,
2928 BytesJapt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher
Beachten Sie, dass für die Pfeilfunktionen ein ES6-kompatibler Browser erforderlich ist, z. B. die neueren Versionen von Firefox. Die Eingabe erfolgt als Array mit 4 Elementen, z
[1,-1,4,2]
.Wie es funktioniert
Wie es gespielt wurde
Ich habe zuerst versucht, einfach den @ Mego-Python-Ansatz zu kopieren. Dies ließ mich mit diesem 48-Byte-Monster zurück:
(Hinweis: Die Eingabe sollte derzeit nicht in ein Array eingeschlossen werden.)
Da jedes dieser Elemente durch 2 geteilt werden muss, ist es kürzer, das gesamte Array wie folgt abzubilden
mY=>Y/2
:Was jetzt? Nun, das Array addiert einfach drei der Eingänge und subtrahiert den vierten, indem es dem Muster folgt
1,2,3,0
. Wir könnten also die Eingaben in ein Array packen, sie dann addieren, durch 2 dividieren und das erforderliche Element subtrahieren:Schön, ein Byte gespart! Aber ist es möglich, das Array am Anfang zu verkleinern? Lassen Sie uns versuchen, es in einen String zu packen und dann wieder in ein Array aufzuteilen
a
:Schau dir das an, ein weiteres Byte gespeichert. Aber gibt es einen noch besseren Weg? Nun, wir können die Tatsache nutzen, dass
[1,2,3,0] ≡ [1,2,3,4] mod 4
:Noch zwei Bytes! Jetzt gehen wir irgendwohin. Aber das
Ug0 +Ug1 +Ug2 +Ug3
kostet viel Platz. Was ist, wenn wir das Array durch Hinzufügen verkleinern?Wow, das hat wirklich geholfen! Jetzt sind wir auf 29 Bytes reduziert. Und dank @ ן nןuɟ ן oן konnte ich sogar ein weiteres Byte weniger Golf spielen. Aber wenn wir ein eingebautes Array verwenden könnten, um das Array zu summieren, wäre es viel kürzer:
19 Bytes! Tolle! Leider verfügt Japt noch nicht über solche Einbauten. Ich werde das hinzufügen, wenn ich eine Chance bekomme. Vorschläge sind willkommen, entweder für das Programm oder die Sprache!
Nun, seit Version 1.4.4 habe ich eine ganze Reihe weiterer Funktionen in Japt implementiert, als ich ursprünglich geplant hatte. Beginnend mit dem ursprünglichen Plan für die kürzere Version:
Zuerst müssen wir ein paar Dinge ändern: Funktionen werden mit definiert
{
, und die Summenfunktion istx
. Diese Version funktioniert wie sie ist:Nun
@
ist eine Abkürzung fürXYZ{
, so dass wir ein Byte speichern , indem Sie von einem WechselZ
zuX
. Außerdem gibt£
es eine Abkürzung zumm@
Speichern eines weiteren Bytes:Kürzlich habe ich eine Funktion implementiert, bei der ein
U
am Anfang des Programms normalerweise weggelassen werden kann. Aufgrund eines Implementierungsfehlers funktioniert dies jedoch auch mit Funktionen:Schließlich wird die
g
Funktion jetzt umbrochen, wenn der Index hinter dem Ende der Zeichenfolge liegt, sodass wir%4
insgesamt 13 Byte entfernen können :Und ich fand 19 großartig ;-) Teste es online!
quelle
eval(U.join`+`)
.eval
Äquivalent hinzugefügt habe, das tatsächlich ein Byte speichert!Javascript (Node.js / ES6), 154 Byte
Stdin zu bekommen ist der längere Teil des Codes. Die Eingabe sollte durch Kommas getrennt sein:
quelle
ngn APL, 21 Bytes
Dies nimmt die Eingabe als ein Paar komplexer Zahlen (z. B.
1J¯1 4J2
) und druckt die Ausgabe auf die gleiche Weise (z4J¯1 1J2
. B. ). Probieren Sie es online in der ngn / apl-Demo aus .quelle
1 ¯1
für eine Eingabe0J¯1 0J1
, was die richtige Antwort ist. Was bekommst du?Pyth, 12 Bytes
Dies nimmt die Eingabe als ein Paar komplexer Zahlen (z. B.
1-1j, 4+2j
) und druckt die Ausgabe als Array (z[(4-1j), (1+2j)]
. B. ). Probieren Sie es online aus.quelle
𝔼𝕊𝕄𝕚𝕟 29 Zeichen / 43 Bytes
Try it here (Firefox only).
quelle
CJam, 30 Bytes
Probieren Sie es online aus
Dies nimmt Eingaben als Liste von Listen entgegen, z. B. für das letzte Beispiel:
Erläuterung:
quelle
Prolog, 118 Bytes
Etwas besser lesbar:
So starten Sie das Programm:
Beispieleingabe, wenn die bekannten Ecken [1, -1] [4, 2] sind:
[1, -1,4,2]
Beispielausgabe, wobei X und Y die unbekannten Ecken enthalten:
X = [1,0, 2,0],
Y = [4.0, -1.0]
Probieren Sie es hier online aus
Bearbeiten: Geändert, um die Eingabe von STDIN zu lesen
quelle
Python 3, 102 Bytes
Die Eingabe erfolgt im Formular
x1 y1 x2 y2
in einer einzelnen Zeile.Probieren Sie es online aus
quelle
Python 2, 56 Bytes
Eingabe kann
x1,y1,x2,y2
oder sein(x1,y1,x2,y2)
quelle