Problema adaptado del libro Fortran 77 de Donald M. Monro
Introducción
Las máquinas de trazado digital se utilizan ampliamente para producir diversas formas de dibujos, gráficos y otros resultados pictóricos. La mayoría de estas máquinas pueden mover sus bolígrafos solo en ciertas direcciones, generalmente como pasos individuales en la dirección X e Y o en ambas. Una máquina típica se movería en una de las ocho direcciones que se muestran en la Fig. 1:
Fig. 1
Desafío
Escriba un programa sin funciones trigonométricas que tome un número del 0 al 7 (inclusive) como entrada y envíe las coordenadas correspondientes de los puntos finales en la figura 1.
La salida debe ser una matriz o lista con dos elementos (es decir, (1, 0)
o [0,-1]
)
Tabla de E / S
0 (1, 0)
1 (1, 1)
2 (0, 1)
3 (-1, 1)
4 (-1, 0)
5 (-1, -1)
6 (0, -1)
7 (1, -1)
Victorioso
El código más corto en bytes gana
rotate(x)
función cuenta como una función trigonométrica? (solo gira el "lienzo" porx
radianes)cos, sin, tan, sec
etc.Respuestas:
Jalea , 8 bytes
El uso de aritmética compleja parece estar permitido.
Pruébalo en línea!
Cómo funciona
fuente
Python 2, 29 bytes
Devuelve las coordenadas como un número complejo.
fuente
Mathematica, 24 bytes
Función pura, usar
Sign
y saber a dónde van ciertas parábolas.fuente
C,
10386747370 bytes¡Gracias a @orlp por guardar
1215 bytes!Pruébalo en línea!
fuente
"\16\17\13\7\6\5\9\15"[n] == "pw[1*#?i"[n]/7
"biM1*#?["
, porque en"\16\17\13\7\6\5\9\15"
los valores hay números octales, entonces 16 == 14 en decimal, 17 == 15 y así sucesivamente.!!(n&4) == n/4&1
n&2?n&1:-(n&1) == n%2*~-(n&2)
JavaScript (ES6),
4136 bytesUtiliza dos tablas de búsqueda simples que codifican las 8 entradas en la base 4 después de agregar una a cada "dígito". Versión alternativa, usando tablas de búsqueda más simples:
Versión anterior (4 bytes más cortos gracias a @Neil):
Enfoque ingenuo usando algunos cálculos simples para encontrar las coordenadas X e Y por separado ...
fuente
r&&(r<4)-(r>4)
or%4&&1-(r&4)/2
guarda un byte en su versión anterior.r=>[r>2&r<6?-1:r<2|r>6,r>4?-1:r%4&&1]
n=>[(s='22100012')[n]-1,s[n+6&7]-1]
.TI-Basic, 23 bytes
Asume que su calculadora está en modo radianes; si eso necesita estar en el programa, entonces son 25 bytes.
fuente
Jalea ,
1312 bytesTodavía estoy bastante seguro de que hay más corto, pero todavía no he encontrado nada, así que pensé en publicar esto
Pruébalo en línea! o ver un conjunto de pruebas
¿Cómo?
Un método alternativo , también de 12 bytes :
fuente
C, 66 bytes
código de prueba
resultados
fuente
C, 56 bytes
Búsqueda binaria simple realizada dos veces. La primera búsqueda se realiza en n desplazada por 2.
Salida en línea en Ideone.
C, 53 bytes
La salida sin una coma se pudo compactar aún más usando una llamada recursiva.
Salida en línea en Ideone.
fuente