Tâche
Étant donné la représentation d'une ligne, affichez le nombre de quadrants traversés par cette ligne.
Représentations valides d'une ligne
Vous pouvez représenter une ligne comme
- Trois entiers signés
A
,B
etC
qui partagent sans facteur commun et oùA
etB
ne sont pas tous deux nuls, ce qui représente la ligneAx + By = C
, - Quatre entiers signés , , et , ce qui représente la ligne passant par les points et , ou
X1
Y1
X2
Y2
(X1, Y1)
(X2, Y2)
- Un type de données qui décrit une ligne, si votre langue en a une (elle doit prendre en charge les lignes verticales).
Vous ne pouvez pas prendre d'entrée dans un format qui ne permet pas une ligne verticale (par exemple, forme d'interception de pente). Si vous choisissez de prendre des entiers en entrée, vous pouvez supposer qu'ils se trouvent dans la plage inclusive [-127, 128]
.
Caractéristiques
- La sortie sera toujours 0, 2 ou 3 (une ligne ne peut jamais traverser les quatre quadrants ni passer par un seul).
- Une ligne sur un axe est considérée comme ne traversant aucun quadrant. Une ligne passant par l'origine est considérée comme ne traversant que 2 quadrants.
- Il n'est pas nécessaire de renvoyer les quadrants qui sont passés (bien que les cas de test les incluent pour plus de clarté).
- Il s'agit de code-golf , donc la réponse valide la plus courte (mesurée en octets) l'emporte.
Cas de test
Vous devrez les convertir dans un format approprié avant de les utiliser.
1x + 1y = 1 -> 3 (quadrants I, II, and IV)
-2x + 3y = 1 -> 3 (quadrants I, II, and III)
2x + -3y = 0 -> 2 (quadrants III and I)
1x + 1y = 0 -> 2 (quadrants II and IV)
3x + 0y = 6 -> 2 (quadrants I and IV)
-3x + 0y = 5 -> 2 (quadrants II and III)
0x + -8y = 4 -> 2 (quadrants III and IV)
0x + 1y = 0 -> 0 (lies on the x-axis)
1x + 0y = 0 -> 0 (lies on the y-axis)
Réponses:
Python 3 , 24 octets
Essayez-le en ligne!
la source
'320'[a.count(0)]
et le retour de la valeur sous forme de chaîne seraient-ils acceptables?Gelée , 5 octets
Essayez-le en ligne!
Ne repose plus sur la réponse de Leaky!
la source
ċ0ị2,0,3
enregistre un octetTL’ȧ$
. Je ne connais pas Jelly, donc cela pourrait être jouable au golfJavascript (ES6),
302422 octetsC'est la première fois que j'essaie de jouer au golf en Javascript.
Il doit y avoir une meilleure façon de compter les zéros ...-6 octets grâce à Herman Lauenstein, -2 octets pour se souvenir des priorités des opérateurs.
Solution alternative de 24 octets pour renvoyer une chaîne à la place:
la source
(a,b,c)=>3<<(!a+!b+!c)&3
05AB1E , 6 octets
Essayez-le en ligne!
Basé sur la réponse de Leaky Nun.
la source
SOGL V0.12 , 8 octets
Essayez-le ici!
Basé sur la réponse de Leaky Nun .
la source
GolfScript ,
1614 octetsEssayez-le en ligne!
Ce programme prend un tableau de 3 entiers représentant les coefficients de l'équation
Ax + By = C
Exemple d'entrée / sortie
Comment ça fonctionne
C'était un peu délicat au début pour moi de trouver une façon mathématique de calculer cela. Cependant, il n'y a que 8 configurations possibles telles que
a != 0 & b != 0 & c != 0
Je suis finalement arrivé à la fonction suivante.
et le tout peut être condensé en un seul problème mathématique
la source
{!!}%
place de[{!!}/]
.{:!:!:+_1>*}
.:!
est équivalent à{!}%
), 2) raccourci pour la réduction (:+
est équivalent à{+}*
), 3) qui.
est changé en_
(parce que CJam a des flottants), et 4) que CJam n'a pas d'entrée sur la pile par défaut, ce qui signifie que vous enveloppez le code{}
pour en faire une fonction.Rétine , 13 octets
Essayez-le en ligne
Également basé sur la réponse de Leaky Nun .
la source
10
par exemple. Le premier regex devrait être\b0
.JavaScript, 25 octets
Basé sur la réponse de Leaky Nun.
la source
Haskell , 22 octets
Essayez-le en ligne!
Solution sans point, 27 octets
Essayez-le en ligne!
la source
Perl 6, 18 octets
la source
ABCR , 30 octets
L'entrée se présente sous la forme
A,B,C
où les virgules peuvent être remplacées par n'importe quel caractère non numérique-
.Pas encore d'interprète en ligne, mais voici une explication:
la source
APL (Dyalog Unicode) ,
1411 octetsEssayez-le en ligne!
⎕IO
est0
. Merci à @ Adám pour -3 octets!la source
0⌈3-×⍨+/0=⎕
Deorst , 12 octets
Essayez-le en ligne!
Un peu basé sur la réponse de Leaky ; utilise le même principe, mais une méthode de mappage différente.
Comment ça fonctionne
Deorst a un nombre d'occurrences intégré, mais n'a pas (pour une raison quelconque) de commande d'indexation, j'ai donc dû créer le mappage suivant, où la gauche est
a.count(0)
et la droite est le résultat souhaitéLe programme lui-même fonctionne comme ceci (exemple d'entrée de
[1,1,1]
)la source
Ajouter ++ , 23 octets
Essayez-le en ligne!
Sur la base de ma réponse Deorst et de la réponse Peakon de Leaky
Comment ça fonctionne
Cependant, je pense que j'utilise trop de fonctions dans Add ++, plutôt que le corps de code principal. J'ai donc essayé de le faire en utilisant les deux fonctions et le corps du code, et j'ai abouti à un morceau de 50 octets beaucoup plus agréable (oui, c'est la réponse la plus longue ici):
Essayez-le en ligne!
la source