Tarea
Dada una representación de una línea, genera el número de cuadrantes por los que pasa esa línea.
Representaciones válidas de una línea
Puedes representar una línea como
- Tres enteros con signo
A
,B
yC
los que no comparten factor común y dondeA
yB
no son ambos cero, que representa la líneaAx + By = C
, - Cuatro enteros con signo , , , y , que representa la línea que pasa a través de los puntos y , o
X1
Y1
X2
Y2
(X1, Y1)
(X2, Y2)
- Un tipo de datos que describe una línea, si su idioma tiene una (debe admitir líneas verticales).
Es posible que no tomar la entrada en cualquier formato que no permite por una línea vertical (por ejemplo, la forma pendiente-intersección). Si elige tomar enteros como entrada, puede suponer que se encuentran en el rango inclusivo [-127, 128]
.
Especificaciones
- La salida siempre será 0, 2 o 3 (una línea nunca puede pasar por los cuatro cuadrantes, ni puede pasar por uno solo).
- Se considera que una línea en un eje no pasa por ningún cuadrante. Se considera que una línea a través del origen solo pasa a través de 2 cuadrantes.
- No tiene que devolver qué cuadrantes se están pasando (aunque los casos de prueba los incluyen para mayor claridad).
- Este es el código de golf , por lo que gana la respuesta válida más corta (medida en bytes).
Casos de prueba
Tendrá que convertirlos a un formato adecuado antes de usarlos.
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)
Respuestas:
Python 3 , 24 bytes
Pruébalo en línea!
fuente
'320'[a.count(0)]
aceptable usar y devolver el valor en forma de cadena?Jalea , 5 bytes
Pruébalo en línea!
¡Ya no se basa en la respuesta de Leaky!
fuente
ċ0ị2,0,3
ahorra un byteTL’ȧ$
. No sé Jelly, así que esto podría ser golfableJavascript (ES6),
302422 bytesEsta es la primera vez que intento jugar golf en Javascript.
Tiene que haber una mejor manera de contar los ceros ...-6 bytes gracias a Herman Lauenstein, -2 bytes para recordar las precedentes del operador.
Solución alternativa de 24 bytes para devolver una cadena en su lugar:
fuente
(a,b,c)=>3<<(!a+!b+!c)&3
05AB1E , 6 bytes
Pruébalo en línea!
Basado en la respuesta de Leaky Nun.
fuente
SOGL V0.12 , 8 bytes
Pruébalo aquí!
Basado en la respuesta de Leaky Nun .
fuente
GolfScript ,
1614 bytesPruébalo en línea!
Este programa toma una matriz de 3 enteros que representan los coeficientes en la ecuación
Ax + By = C
Ejemplo de entrada / salida
Cómo funciona
Al principio fue un poco complicado para mí encontrar una forma matemática de calcular esto. Sin embargo, solo hay 8 configuraciones posibles de modo que
a != 0 & b != 0 & c != 0
Finalmente llegué a la siguiente función.
y todo se puede condensar en un solo problema matemático
fuente
{!!}%
lugar de[{!!}/]
.{:!:!:+_1>*}
.:!
es equivalente a{!}%
), 2) taquigrafía para reducir (:+
es equivalente a{+}*
), 3) que.
se cambia a_
(porque CJam tiene flotadores) y 4) que CJam no tiene entrada en la pila de forma predeterminada, lo que significa que envuelve el código{}
para que sea una función.Retina , 13 bytes
Pruébalo en línea
También basado en la respuesta de Leaky Nun .
fuente
10
por ejemplo. La primera expresión regular debería ser\b0
.JavaScript, 25 bytes
Basado en la respuesta de Leaky Nun.
fuente
Haskell , 22 bytes
Pruébalo en línea!
Solución sin puntos, 27 bytes
Pruébalo en línea!
fuente
Perl 6, 18 bytes
fuente
ABCR , 30 bytes
La entrada está en la forma
A,B,C
en que las comas se pueden reemplazar por cualquier no numérico, sin-
caracteres.Todavía no hay intérprete en línea, pero aquí hay una explicación:
fuente
APL (Dyalog Unicode) ,
1411 bytesPruébalo en línea!
⎕IO
es0
. ¡Gracias a @ Adám por -3 bytes!fuente
0⌈3-×⍨+/0=⎕
Deorst , 12 bytes
Pruébalo en línea!
Algo basado en la respuesta de Leaky ; usa la misma premisa, pero un método de mapeo diferente.
Cómo funciona
Deorst tiene un recuento de ocurrencias incorporado, pero no tiene (por alguna razón) un comando de indexación, por lo que tuve que crear la siguiente asignación, donde está el izquierdo
a.count(0)
y el derecho el resultado deseadoEl programa en sí funciona así (ejemplo de entrada de
[1,1,1]
)fuente
Agregar ++ , 23 bytes
Pruébalo en línea!
Basado de tanto mi respuesta Deorst y respuesta del pitón de Leaky
Cómo funciona
Sin embargo, creo que he estado usando demasiado las funciones en Add ++, en lugar del cuerpo del código principal. Así que intenté hacer esto usando ambas funciones y el cuerpo del código, y resultó en una pieza de 50 bytes mucho más agradable (sí, esa es la respuesta más larga aquí):
Pruébalo en línea!
fuente