Schreiben Sie ein Programm oder eine Funktion mit zwei Ganzzahlen, die die X- und Y-Koordinaten eines Punktes auf einer kartesischen Ebene darstellen .
Die Eingabe in jedem angemessenen Format kommen kann , solange der Wert X kommt vor der Y. Zum Beispiel 1 -2
, (1,-2)
, [1, -2]
, oder 1\n-2
alle in Ordnung sein würde , für X = 1, Y = -2.
Drucken Sie eine einzelne Zeichenfolge (gefolgt von einer optionalen nachgestellten Zeile), die die Position des Punkts in der Ebene beschreibt, oder geben Sie sie zurück:
1
wenn der Punkt in Quadrant I liegt2
wenn der Punkt in Quadrant II liegt3
wenn der Punkt in Quadrant III liegt4
wenn der Punkt in Quadrant IV liegtX
wenn der Punkt auf der x-Achse liegt (Kleinbuchstabenx
sind nicht erlaubt)Y
wenn der Punkt auf der y-Achse liegt (Kleinbuchstabeny
sind nicht erlaubt)O
wenn der Punkt auf dem Ursprung liegt (das ist ein Großbuchstabe "oh", nicht Null)
Der kürzeste Code in Bytes gewinnt. Tiebreaker geht zur höher bewerteten Antwort.
Testfälle
(1,-2) -> 4
(30,56) -> 1
(-2,1) -> 2
(-89,-729) -> 3
(-89,0) -> X
(0,400) -> Y
(0,0) -> O
(0,1) -> Y
(0,-1) -> Y
(1,0) -> X
(-1,0) -> X
(1,1) -> 1
(1,-1) -> 4
(-1,1) -> 2
(-1,-1) -> 3
code-golf
math
number
arithmetic
Calvins Hobbys
quelle
quelle
"30+56i"
) ein gültiges Eingabeformat?1+2j
)Antworten:
Jelly, 14 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Ruby, 35 Bytes
Nutzung des
<=>
Operators "Raumschiff" ( ).x <=> 0
wird zurückkehren0
obx == 0
1
obx > 0
-1
obx < 0
Daher,
Wenn
x == 0
ja, kehren wir zurück'OY'[y<=>0]
. Das istO
ify == 0
(String-Indizierung bei0
)Y
wenny != 0
(dies , weil beide wahr ist ,1
und-1
in Folge wird ,Y
wenn die Indizierung auf dieser Zeichenfolge als-1
bezieht sich auf das letzte Zeichen in der Zeichenfolge, die auch derjenige bei Index 1 passiert werden)Wenn
x > 0
ja, kehren wir zurück'X14'[y<=>0]
. Dies istX
ify == 0
,1
ify > 0
und4
ify < 0
(siehe obige Erklärung).Wenn
x < 0
ja, kehren wir zurück'X23'[y<=>0]
.quelle
JavaScript, 44 Bytes
Code-Snippet anzeigen
quelle
s/^f=//
)ES6, 43 Bytes
Ein ganzes Byte kürzer als all diese Ternaries!
quelle
Japt,
3022 BytesInspiriert von der Antwort von @Dennis 'Jelly, bevor er eine Erklärung hinzufügte. Online testen!
Unterhaltsame Tatsache: Dies wäre zwei Bytes kürzer, wenn ich in der
g
Funktion für Zeichenfolgen die Unterstützung für negative Zahlen hinzugefügt hätte .Ein weiterer Versuch, näher am Jelly One (23 Bytes):
Leider kostet das Inkrementieren einer Liste 4 Bytes ...
quelle
MATL , 22 Bytes
Dies verwendet die aktuelle Version (10.2.1) der Sprache / des Compilers.
Probieren Sie es online!
Erläuterung
Dies leiht schamlos den großartigen Ansatz in Dennis 'Antwort .
quelle
Pyth, 18 Bytes
Erläuterung:
Probieren Sie es hier aus.
Oder die ganze Testsuite
quelle
Python 2, 75 Bytes
Ziemlich einfach.
quelle
Mathematica 81 Bytes
quelle
Netzhaut , 52
Dies ist eine einfache, auf Substitution basierende Methode:
Probieren Sie es online aus . Das Extra
m`
am Anfang einiger Zeilen wird nur benötigt, um mehrere Eingaben auf einmal zu testen, und wird daher nicht in der Punktzahl berücksichtigt.Früher habe ich diesen interessanteren Ansatz ausprobiert , aber er ist ziemlich viel länger (ungefähr 65 ohne die
m
Modifikatoren):1
und lassen Sie die-
Zeichen an Ort und Stelle-1
mit2
3
und1
als unäre Ziffern. Dies ergibt effektiv 2 Base3-Ziffern, ausgedrückt in Unary3
s zu111
. Dies ergibt effektiv eine einzelne unäre Zahl, die jedem der Quadranten, Achsen und Ursprung entsprichtquelle
X
Bühne es braucht,$
da die Eingabe keine führenden Nullen enthält.Oktave, 34 Bytes
Der alte Basis-3-Trick durch Vektormultiplikation (obwohl ich 5 addieren musste, um 1-basierte Array-Indizes zu berücksichtigen) plus etwas Octave-Indizierungsmagie.
Die Eingabe ist ein Vektor des Formulars
[1, -2]
(mit oder ohne Komma). Wenn also einer Variablen zugewiesenw
:Hier ist es auf ideone .
quelle
Pyth, 24
Zu lange, aber vielleicht ein interessanter Ansatz:
Die Eingabe muss als komplexe Zahl angegeben werden, z
1-2j
. Grundsätzlich ein geschachtelter Ternär zum Testen:O
Y
X
Probieren Sie es online aus.
quelle
Java 8, 64 Bytes
Dies ist ein Lambda-Ausdruck für a
BiFunction<Integer,Integer,String>
.3 Bytes könnten durch Rückgabe von a
Character
anstelle von a gespeichert werden,String
aber ich bin nicht ganz sicher, ob Autoboxing gut mit dem Lambda funktioniert.quelle