Introducción
Escriba un programa o función que, dadas las coordenadas de dónde cae un dardo en un tablero de dardos, devuelva el puntaje de ese dardo. Las coordenadas de dardo se dan como dos enteros, x,y
medidos desde el centro del tablero de dardos, con precisión milimétrica.
Cómo anotar un dardo
Darts es un juego que se juega lanzando un dardo a un tablero circular. El tablero de dardos se divide en 20 "cuñas" de igual tamaño. Comenzando desde arriba y en sentido horario, las secciones tienen valores de 20,1,18,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12 5. Si su dardo cae en las partes negras o blancas de cualquiera de las cuñas, obtiene el valor indicado en el exterior de esa cuña.
.
Sin embargo, si su dardo cae en el anillo exterior verde / rojo del tablero de dardos, obtiene el doble de puntos indicados en el exterior de la cuña que golpeó. Del mismo modo, golpeando el anillo verde / rojo interior (el que está entre las dos secciones blancas / negras), obtienes el triple del número indicado en el exterior de la cuña. Si su dardo golpea el círculo más interno (la diana roja), en su lugar obtiene 50 puntos y, finalmente, si su dardo golpea el segundo círculo más interno (el anillo verde alrededor de la diana), obtiene 25 puntos.
Las dimensiones de los anillos, medidas desde el centro del tablero de dardos, son las siguientes:
Bullseye (50): [0mm-6mm)
25: [6mm-16mm)
Inner Single: [16mm-99mm)
Triple: [99mm-107mm)
Outer Single: [107mm-162mm)
Double: [162mm-170mm)
Miss (0): 170mm+
Nota 1: Las imágenes proporcionadas son solo para fines ilustrativos y no están a escala.
Nota 2: Las medidas proporcionadas son aproximadas y pueden no ser precisas para un tablero de dardos real.
Nota 3: Todas las medidas dadas son [inclusive-exclusive)
. Para los propósitos de este desafío, no nos vamos a preocupar de que los dardos golpeen el cable y reboten. Si el dardo cae "en el cable" con una de las líneas radiales, entonces corresponde al respondedor decidir si romper el lazo en el sentido de las agujas del reloj o en sentido contrario. La dirección de desempate debe ser consistente e indicada.
Nota 4: el tablero de dardos se cuelga de la manera estándar con la mitad de la sección 20 directamente encima de la diana y la sección 3 directamente debajo de la diana.
Entrada
Dos enteros que representan el x,y
coordenadas del lugar donde cayó el dardo, medido en milímetros, en relación con el centro del tablero de dardos.
Salida
Un número entero, para el número de puntos que se otorgarían a un dardo que aterrizó en las coordenadas dadas.
Muestra
0,0 -> 50
2,101 -> 60
-163,-1 -> 22
6,18 -> 1
-6,18 -> 5
45,-169 -> 0
22, 22 -> 4 (if tie-broken clock-wise)
18(if tie-broken counter-clockwise)
-150,0 -> 11
-150,-1 -> 11
Tanteo
código-golf . Pocos bytes en su código fuente gana.
-150,-1
y-150,0
que deberían dar11
y pueden ser un caso límite en algunas implementaciones, ya que esta es la transición entre theta que converge a -pi y theta = + pi en coordenadas polares. (Mi respuesta inicial falló en la segunda.)Respuestas:
JavaScript (ES7), 137 bytes
Toma las coordenadas en sintaxis curry
(x)(y)
. Utiliza tie-break en sentido antihorario.Pruébalo en línea!
¿Cómo?
Salida gráfica
El siguiente fragmento de código ES6 dibuja el tablero de dardos utilizando la misma lógica que en el código de golf.
Mostrar fragmento de código
fuente
JavaScript (ES6) + SVG (HTML5),
53 + 52351 +519507 =576570558 bytesLa entrada es a través del clic del mouse, la salida a través de
alert
. Editar: ahorró 12 bytes usando colores ligeramente más aproximados como lo sugiere @Arnauld.fuente
b33
y474
por el rojo y el verde. :-)b33
esbb3333
asíb22
(aliasbb3322
) está más cerca de tu originalbe3628
.Conjunto Intel 8086/8087,
180144142138 bytesUtiliza el coprocesador matemático 8087 para todos los aritméticos trigonométricos y de coma flotante. Todos los cálculos se realizan en hardware con precisión de punto flotante de 80 bits.
Escrito como MASM MACRO (básicamente una función), toma X e Y como coordenadas y devuelve el puntaje calculado en AX. La corbata se rompe en sentido horario.
Un programa de prueba de ejemplo para PC DOS. Descárguelo aquí DARTTEST.COM .
Salida
Ejemplo de uso del programa de prueba anterior . Se requiere una PC IBM real con 8087, DOSBox o su emulador favorito.
* Ediciones:
fuente
Jalea , 56 bytes
Un enlace monádico que acepta el par como una lista
[x,y]
que produce el puntaje.Utiliza el desempate en sentido horario.
Pruébalo en línea! O ver el conjunto de pruebas
Nota: una versión diádica también tiene 56 bytes
¿Cómo?
fuente
TI-Basic (TI-84 Plus CE),
147146bytesSolicita X e Y en líneas separadas.
Tie-breaks en sentido antihorario.
TI-Basic es un lenguaje tokenizado ; Todas las fichas utilizadas aquí son un byte.
Explicación:
Utiliza el hecho de que las comparaciones booleanas de TI-Basic devuelven 0 o 1 al sumarlas y multiplicarlas por valores de puntos.
fuente
T-SQL,
392 374bytesLos saltos de línea son para facilitar la lectura. La inicial
UPDATE
se encarga dex=y=0
problema que de otro modo arrojaría un errorATN2()
, pero no cambia la puntuación.La entrada se toma a través de la tabla t preexistente , según nuestras pautas de IO . Debido al uso
TOP 1
, esta tabla debe contener solo una fila.Básicamente me estoy uniendo a 3 tablas:
ROUND()
, que fue un poco más corto, pero me dio un desempate incoherente).TOP 1
. El valor f es un puntaje fijo (para una diana) o un multiplicador para el puntaje de cuña.EDITAR : Se eliminó
ORDER BY
, parece funcionar correctamente sin él, al menos en SQL 2017. También se eliminó laAND y=0
condición de actualización; Probé todos losy
valores enteros , cambiandox=0
ax=1
nunca cambia la puntuación.EDITAR 2 : Se eliminó la columna g de la tabla d , se reemplazó con una
IIF()
declaración que devuelvef
directamente (para una diana) of*b
guardó 8 bytes. También eliminó el espacio despuésTOP 1
.fuente
Haskell , 198 bytes
La corbata se rompe en sentido antihorario.
(#)
Es una función de búsqueda. El ángulo polar se usa para indexar desde la lista de números, comenzando en elatan2
punto de corte en 11. La distancia se usa para indexar desde la lista de funciones[const 50, const 25, id, (*3), id, (*2), const 0]
y, finalmente, esta función se aplica al número que obtuvimos anteriormente.Pruébalo en línea!
fuente
Perl 5
-MMath::Trig':pi' -MMath::Trig':radial' -apl
, 166 bytesPruébalo en línea!
Toma el espacio de dos coordenadas separado en STDIN. El desempate es en sentido antihorario.
fuente