Problème adapté du livre Fortran 77 de Donald M. Monro
introduction
Les machines de traçage numériques sont largement utilisées pour produire diverses formes de dessins, de graphiques et d'autres résultats illustrés. La plupart de ces machines ne peuvent déplacer leurs stylos que dans certaines directions, généralement sous forme de pas simples dans les directions X et Y ou les deux. Une machine typique se déplacerait dans l'une des huit directions illustrées sur la figure 1:
Fig. 1
Défi
Écrivez un programme sans fonctions trigonométriques qui prend un nombre de 0 à 7 (inclus) en entrée et génère les coordonnées correspondantes des points d'extrémité sur la figure 1.
La sortie doit être un tableau ou une liste avec deux éléments (c'est (1, 0)
-à- dire ou [0,-1]
)
Tableau des 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)
Gagnant
Le code le plus court en octets gagne
rotate(x)
fonction compte- t-elle comme une fonction trigonométrique? (il fait simplement pivoter le "canevas" dex
radians)cos, sin, tan, sec
etc.Réponses:
Gelée , 8 octets
L'utilisation d'une arithmétique complexe semble autorisée.
Essayez-le en ligne!
Comment ça fonctionne
la source
Python 2, 29 octets
Renvoie les coordonnées sous la forme d'un nombre complexe.
la source
Mathematica, 24 octets
Fonction pure, en utilisant
Sign
et en sachant où vont certains paraboles.la source
C,
10386747370 octetsMerci à @orlp pour avoir économisé
1215 octets!Essayez-le en ligne!
la source
"\16\17\13\7\6\5\9\15"[n] == "pw[1*#?i"[n]/7
"biM1*#?["
, parce que"\16\17\13\7\6\5\9\15"
les valeurs sont des nombres octaux, donc 16 == 14 en décimal, 17 == 15 et ainsi de suite.!!(n&4) == n/4&1
n&2?n&1:-(n&1) == n%2*~-(n&2)
JavaScript (ES6),
4136 octetsUtilise deux tables de recherche simples qui codent les 8 entrées de la base 4 après en avoir ajouté une à chaque "chiffre". Version alternative, utilisant des tables de recherche plus simples:
Ancienne version (4 octets plus court grâce à @Neil):
Approche naïve utilisant quelques calculs simples pour trouver séparément les coordonnées X et Y ...
la source
r&&(r<4)-(r>4)
our%4&&1-(r&4)/2
enregistrer un octet sur votre ancienne version.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 octets
Suppose que votre calculatrice est en mode radian; si cela doit être dans le programme, alors c'est 25 octets.
la source
Gelée ,
1312 octetsJe suis toujours assez confiant qu'il y a plus court, mais je n'ai encore rien trouvé, alors j'ai pensé publier ce
Essayez-le en ligne! ou voir une suite de tests
Comment?
Une méthode alternative , également 12 octets :
la source
C, 66 octets
code de test
résultats
la source
C, 56 octets
Recherche binaire simple effectuée deux fois. La première recherche se fait sur n décalé de 2.
Sortie en ligne sur Ideone.
C, 53 octets
La sortie sans virgule a pu être encore plus compactée à l'aide d'un appel récursif.
Sortie en ligne sur Ideone.
la source