Les trucs sympas
La rosace suivante peut aider à calculer les nombres modulo 7.
Pour ce faire, vous devez commencer à 0 et tourner dans le sens horaire un certain nombre d'étapes données par le premier chiffre. Ensuite, pour chaque chiffre successif, suivez la flèche puis tournez dans le sens des aiguilles d'une montre le nombre de pas donné par ce chiffre.
Voici comment procéder pour le numéro 294:
- Vous commencez au cercle 0.
- Vous tournez dans le sens horaire le nombre de pas donné par le premier chiffre (qui est un 2, vous vous retrouvez à 2).
- Vous suivez la flèche là (vous vous retrouvez à 6).
- Vous tournez dans le sens horaire le nombre de pas donné par le deuxième chiffre (qui est un 9, vous vous retrouvez à 1).
- Vous suivez la flèche là (vous vous retrouvez à 3).
- Vous tournez dans le sens des aiguilles d'une montre le nombre de pas donné par le troisième nombre (qui est 4, vous vous retrouvez à 0).
- 294 mod 7 = 0 (ce qui signifie que 294 est multiple de 7).
( Explication vidéo si vous ne l'avez toujours pas obtenue )
Le but
Découvrez comment cela fonctionne (je sais mais je ne vous le dirai pas).
Créez un programme qui prend un nombre n
en paramètre et qui génère une rosace pour mod n
.
La rosace peut être affichée par n'importe quel moyen (ASCII, générer PNG, générer SVG, ...) tant qu'elle peut être utilisée par un enfant de 8 ans ( donc pas de liste de règles, je veux une photo )!
Vous pouvez utiliser des lignes droites, même si c'est un peu moins clair que ce que j'ai fait pour l'exemple, mais vous devez montrer clairement les nombres qui pointent vers eux avec une sorte de flèche mordante.
Cas de test
(Je ne donne que les liens entre les chiffres, n'hésitez pas à modifier ma question une fois que votre programme les a générés avec succès)
mod 2:
0 -> 0
1 -> 0
mod 3:
0 -> 0
1 -> 1
2 -> 2
mod 4:
0 -> 0
1 -> 2
2 -> 0
3 -> 2
mod 5:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
mod 6:
0 -> 0
1 -> 4
2 -> 2
3 -> 0
4 -> 4
5 -> 2
mod 7:
0 -> 0
1 -> 3
2 -> 6
3 -> 2
4 -> 5
5 -> 1
6 -> 4
mod 8:
0 -> 0
1 -> 2
2 -> 4
3 -> 6
4 -> 0
5 -> 2
6 -> 4
7 -> 6
mod 9:
0 -> 0
1 -> 1
2 -> 2
3 -> 3
4 -> 4
5 -> 5
6 -> 6
7 -> 7
8 -> 8
mod 10:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
Règles
C'est le code-golf , le code le plus court en octets gagne.
Comme d'habitude, les échappatoires et les tricheurs sont interdits.
la source
Réponses:
Mathematica, 192 octets
Ce type de défi (calcul mathématique non trivial associé à une sortie graphique de haut niveau) est la raison d'être de Mathematica!
Développé et expliqué:
Les lignes 1 et 8 délimitent une fonction sans nom d'un argument. Les lignes 3 et 7 délimitent plusieurs commandes qui produisent des graphiques.
Les lignes 2 stockent l'entrée sous
d
; définit une fonction binairet
donnant les coordonnées d'un pointn/d
du chemin autour du cercle de rayonr
, dans le sens des aiguilles d'une montre à partir du haut (dans l'esprit de ce site, j'ai sauvé un octet en arrondissant 2π à6.3
!); et définit une fonction unairem
calculant la destination de la flèche à partir de son argument.Ligne 4 rend les nombres
0
àd–1
égale distance autour du cercle de rayon 9 (le rayon de peu d' importance exacte choisie pour maximiser l' esthétique soumis à montage dans un octet).La ligne 5 rend les flèches droites dans le sens horaire autour de la circonférence du cercle. Le
1/7
et6/7
laissez suffisamment d'espace pour lire les chiffres.La ligne 6 rend les flèches courbes de chaque nombre à (10 fois le nombre modulo
d
).BezierCurve
dessine automatiquement une courbe de Bézier en utilisant les points de contrôle donnés. Heureusement, l'utilisation de l'origine comme point de contrôle intérieur unique produit une sortie raisonnable.Exemple de sortie (notez que les cas 9, 10 et 11 sont triviaux de différentes manières):
d = 7
d = 8
d = 9
d = 10
d = 11
d = 12
d = 13
d = 37
Cette dernière entrée a été choisie car 37 divise 10 ^ 3–1, et donc les flèches intérieures (sans compter l'auto-flèche obligatoire de 0 à 0) forment de nombreux cycles triangulaires.
la source
Python 2, 294 octets
Imprime le diagramme dans ce format:
Je ne sais pas si ce format est correct, donc je vais laisser cette réponse invalide pour le moment.Oui, c'est valable!Essayez-le sur repl.it!
la source
n
nombres à -digit. Je ne sais pas si le défi vous oblige à le fairen>9
.PHP + SVG, 500 octets
petite flèche pour les connexions entre les mêmes valeurs
pour voir les flèches aux mêmes valeurs j'utilise cette valeur de couleur
rgba(255,0,0,0.3)
. c'est une possibilité de le raccourcir.étendu
sortie pour n = 45
320 octets travaillant avec rect
étendu
sortie pour n = 72
la source
Python 2,
540464431 octetsCertains joueurs de golf aiment utiliser des noms de variables plus courts, la substitution de variables, la compréhension des listes et tout changer en blanc (sauf le texte). La plus grande sauvegarde consistait à changer dynamiquement les positions précalculées (voir
L
).L
calcule la position des cercles par distance à l'origine pour les grands contenant les nombres et les petits extérieurs qui indiquent l'auto-pointage.La première boucle dessine les connexions: la 1ère ligne est le cercle autour et la 2ème ligne est à l'intérieur, un petit cercle est ajouté pour montrer la direction ou l'auto-pointage.
La deuxième boucle met un grand cercle et un nombre.
Ce n'est évidemment pas aussi agréable que les réponses Mathematica, mais tout est fait à partir de zéro.
la source
Mathematica,
124121 octetsCrée une figure sous forme de graphique avec des bords dirigés. La sortie du graphique suit désormais le même schéma sauf dans le sens antihoraire. Je préfère beaucoup plus la solution de Greg Martin car la sortie est beaucoup plus esthétique.
Un graphique moins visuellement agréable peut être généré pour 82 octets en utilisant
Pour d = 8,
la source
Graph
mais j'ai eu la même réaction négative. De plus, pour l'algorithme, il est important de faire la distinction entre les bords "dans le sens horaire" et les bords "fois 10". Je suis sûr qu'il existe des options pourGraph
ce traitement - mais alors, voici plus d'octets ....Graph
fonctionnalités et j'ai trouvé des astuces comme utiliser à la->
place deDirectedEdge
. J'ai raccourci cette version initiale de 100 octets à 82 octets, mais en la corrigeant ensuite pour qu'elle soit au bon format, j'ai ajouté 42 autres octets.CircularEmbedding
, mais cela n'a pas mis les sommets dans le sens des aiguilles d'une montren=7
(j'avoue que je n'ai pas essayé d'autres entrées). Cela fonctionne-t-il pour vousn=7
?Join
etTranspose
pour que les bords extérieurs soient listés en premier avant les bords intérieurs. Les sommets sont ordonnés correctement le long d'un chemin circulaire, mais comme les arêtes préfèrent être droites, cela finit par ressembler à un n -gon.Python 2 + graphviz, 147 octets
Ne dessine pas toujours un cercle, génère un fichier pdf appelé
o
la source
Haskell, 350 octets
Inspiré par @Loovjo, j'utilise également l'art ASCII. Cela fonctionne pour les nombres inférieurs à 100000 (ou quelque chose comme ça).
Fondamentalement, vous pointez de x à (x * 10)% n.
Vous pouvez l'essayer ici . Mais comme le codepad ne prend pas en charge l'entrée, remplacez q par la valeur de n souhaitée et soumettez à nouveau. (Notez que la fourche ne fonctionne pas, copiez et soumettez à nouveau à partir de la page principale). Le code qui y est soumis est un peu différent, car la version ci-dessus prend l'entrée de la console.
J'espère que la sortie est intuitive. Les suggestions de compression sont les bienvenues (surtout si cela bat 294 ;)).
la source
foldl (++) ""$map (\...
Lot, 394 octets
S'échapper dans Batch est moche dans le meilleur des cas. Exemple de sortie pour 7:
la source
>0<
montre qui0
correspond à elle-même, tandis que la>2<<<3<
montre3
correspond à2
.