Écrivez un programme ou une fonction qui prend deux entiers qui représentent les coordonnées X et Y d'un point sur un plan cartésien .
L'entrée peut venir dans tout format raisonnable, tant que la valeur de X est avant Y. Par exemple, 1 -2
, (1,-2)
, [1, -2]
ou 1\n-2
tout serait bien pour X = 1, Y = -2.
Imprimez ou renvoyez une chaîne de caractères unique (suivie d'un retour à la ligne facultatif) qui décrit l'emplacement du point dans le plan:
1
si le point est dans le quadrant I2
si le point est dans le quadrant II3
si le point est dans le quadrant III4
si le point est dans le quadrant IVX
si le point est sur l'axe des x (les minusculesx
ne sont pas autorisées)Y
si le point est sur l'axe des y (les minusculesy
ne sont pas autorisées)O
si le point est sur l'origine (c'est une lettre majuscule "oh", pas zéro)
Le code le plus court en octets gagne. Tiebreaker passe à la réponse la plus élevée.
Cas de test
(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
Loisirs de Calvin
la source
la source
"30+56i"
) est-il un format d'entrée valide?1+2j
)Réponses:
Gelée, 14 octets
Essayez-le en ligne!
Comment ça marche
la source
Rubis, 35 octets
Tirer parti de l'
<=>
opérateur "vaisseau spatial" ( ).x <=> 0
reviendra0
six == 0
1
six > 0
-1
six < 0
Par conséquent,
si
x == 0
, nous revenons'OY'[y<=>0]
. C'estO
ify == 0
(indexation des chaînes à0
)Y
ify != 0
(ceci est vrai car les deux1
et-1
se traduirontY
lors de l'indexation sur cette chaîne, comme-1
fait référence au dernier caractère de la chaîne, qui se trouve également être celui de l'index 1)si
x > 0
, nous revenons'X14'[y<=>0]
. C'estX
siy == 0
,1
siy > 0
et4
siy < 0
(voir l'explication ci-dessus).si
x < 0
, nous revenons'X23'[y<=>0]
.la source
JavaScript, 44 octets
Afficher l'extrait de code
la source
s/^f=//
)ES6, 43 octets
Un octet entier plus court que tous ces ternaires!
la source
Japt,
3022 octetsInspiré par la réponse de @Dennis 'Jelly avant d'ajouter une explication. Testez-le en ligne!
Fait amusant: ce serait deux octets plus court si j'avais ajouté la prise en charge des nombres négatifs dans la
g
fonction pour les chaînes.Une autre tentative, plus proche de celle de Jelly (23 octets):
Malheureusement, incrémenter une liste coûte 4 octets ...
la source
MATL , 22 octets
Cela utilise la version actuelle (10.2.1) du langage / compilateur.
Essayez-le en ligne!
Explication
Cela emprunte sans vergogne la grande approche de la réponse de Dennis .
la source
Pyth, 18 octets
Explication:
Essayez-le ici.
Ou toute la suite de tests
la source
Python 2, 75 octets
Assez simple.
la source
Mathematica 81 octets
la source
Rétine , 52
Il s'agit d'une méthode simple basée sur la substitution:
Essayez-le en ligne . Le supplément
m`
au début de certaines lignes n'est nécessaire que pour tester plusieurs entrées en une seule fois, donc ne sont pas comptés dans le score.Auparavant, j'ai essayé cette approche plus intéressante , mais c'est un peu plus long (environ 65 sans les
m
modificateurs):1
, laissant des-
signes en place-1
par2
3
et1
respectivement comme chiffres unaires. Cela donne effectivement 2 chiffres de base3, exprimés en unaire3
s en111
. Cela donne effectivement un seul nombre unaire qui correspond à chacun des quadrants, axes et originela source
X
scène ait besoin$
car il n'y aura pas de zéros en tête dans l'entrée.Octave, 34 octets
L'ancienne astuce base-3 à travers la multiplication des vecteurs (bien que je devais ajouter 5 pour tenir compte des indices de tableau basés sur 1) plus une certaine magie d'indexation d'octave.
L'entrée est un vecteur de la forme
[1, -2]
(avec ou sans virgule), donc lorsqu'elle est affectée à une variablew
:Ici, c'est sur ideone .
la source
Pyth, 24
Trop longue, mais peut-être une approche intéressante:
L'entrée doit être spécifiée comme un nombre complexe, par exemple
1-2j
. Fondamentalement, un ternaire imbriqué pour tester:O
Y
X
Essayez-le en ligne.
la source
Java 8, 64 octets
c'est une expression lambda pour a
BiFunction<Integer,Integer,String>
.3 octets pourraient être économisés en renvoyant un
Character
au lieu d'un,String
mais je ne suis pas complètement sûr que l'autoboxing fonctionnera bien avec le lambda.la source