Problema adaptado do livro Fortran 77, de Donald M. Monro
Introdução
Máquinas de plotagem digital são amplamente utilizadas para produzir várias formas de desenhos, gráficos e outros resultados pictóricos. A maioria dessas máquinas pode mover suas canetas apenas em determinadas direções, geralmente como etapas únicas nas direções X e Y ou ambas. Uma máquina típica se moveria em uma das oito direções mostradas na Fig. 1:
Fig. 1
Desafio
Escreva um programa sem funções trigonométricas que use um número de 0 a 7 (inclusive) como entrada e emita as coordenadas correspondentes dos pontos finais na Fig. 1.
A saída deve ser uma matriz ou lista com dois elementos (ie (1, 0)
ou [0,-1]
)
Tabela 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)
Ganhando
Menor código em bytes ganha
rotate(x)
função conta como uma função trigonométrica? (apenas rotaciona a "tela" porx
radianos)cos, sin, tan, sec
etc.Respostas:
Geléia , 8 bytes
O uso de aritmética complexa parece ser permitido.
Experimente online!
Como funciona
fonte
Python 2, 29 bytes
Retorna as coordenadas como um número complexo.
fonte
Mathematica, 24 bytes
Função pura, usando
Sign
e sabendo para onde vão determinadas parábolas.fonte
C,
10386747370 bytesObrigado a @orlp por salvar
1215 bytes!Experimente online!
fonte
"\16\17\13\7\6\5\9\15"[n] == "pw[1*#?i"[n]/7
"biM1*#?["
, porque nos"\16\17\13\7\6\5\9\15"
valores são números octais, então 16 == 14 em decimal, 17 == 15 e assim por diante.!!(n&4) == n/4&1
n&2?n&1:-(n&1) == n%2*~-(n&2)
JavaScript (ES6),
4136 bytesUsa duas tabelas de pesquisa simples que codificam as 8 entradas na base 4 após adicionar uma a cada "dígito". Versão alternativa, usando tabelas de pesquisa mais simples:
Versão antiga (4 bytes mais curta graças a @Neil):
Abordagem ingênua usando alguns cálculos simples para encontrar as coordenadas X e Y separadamente ...
fonte
r&&(r<4)-(r>4)
our%4&&1-(r&4)/2
salvar um byte na sua versão antiga.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
Assume que sua calculadora está no modo radiano; se isso precisa estar no programa, são 25 bytes.
fonte
Geléia ,
1312 bytesAinda estou bastante confiante de que há menos, mas ainda não encontrei nada, então pensei em publicar isso
Experimente online! ou veja uma suíte de testes
Quão?
Um método alternativo , também com 12 bytes :
fonte
C, 66 bytes
código de teste
resultados
fonte
C, 56 bytes
Pesquisa binária simples feita duas vezes. A primeira pesquisa é feita em n deslocado por 2.
Saída online no Ideone.
C, 53 bytes
A saída sem vírgula pôde ser compactada ainda mais usando uma chamada recursiva.
Saída online no Ideone.
fonte