La tâche consiste à dessiner un polygone régulier de n côtés en utilisant uniquement une boussole et une règle non marquée.
L'entrée (n) est l'un des 10 nombres suivants: 3, 4, 5, 6, 8, 10, 12, 15, 16, 17.
Méthode : comme vous n'avez qu'une règle et une boussole, vous ne pouvez dessiner que des points, des lignes et des cercles.
Une ligne ne peut être tracée:
- à travers deux points existants.
Un cercle ne peut être tracé:
- avec un point comme centre et son périmètre passant par un deuxième point.
Un point ne peut être tracé:
à l'intersection de deux lignes,
à l'intersection (s) d'une ligne et d'un cercle,
à l'intersection de deux cercles,
au début, quand vous pouvez tirer 2 points pour commencer.
À travers ce processus (et uniquement à travers ce processus), vous devez tracer les n lignes du n-gon demandé, ainsi que tout travail requis pour arriver à cette étape.
EDIT: La position des intersections doit être calculée, mais les lignes et les cercles peuvent être tracés par tout moyen fourni par la langue.
La sortie est une image d'un polygone régulier à n côtés, montrant le travail.
Graphiquement, il n'y a pas de restrictions sur la taille, le format, l'épaisseur des lignes ou tout autre élément non mentionné ici. Cependant, il doit être possible de distinguer visuellement des lignes, cercles et leurs intersections distincts. Aditionellement:
- Les n lignes qui composent les côtés de votre n-gon doivent être d'une couleur différente de votre «travail» (c'est-à-dire des points, des cercles ou d'autres lignes) et une couleur différente à votre arrière-plan.
- Le travail peut laisser les bordures de la zone de dessin, à l'exception des points, qui doivent tous se trouver dans les limites visibles de l'image.
- Un cercle peut être un cercle complet ou simplement un arc (tant qu'il montre les intersections requises).
Une ligne est infinie (c'est-à-dire quitte la zone de dessin) ou coupée aux deux points qu'elle traverse.EDIT: Une ligne peut être tracée de n'importe quelle longueur. Les points ne peuvent être créés qu'à l'intersection visuelle de la ligne tracée.- Un point peut être tracé à votre guise, y compris ne pas le marquer.
La notation est double, une soumission obtient 1 point par entrée prise en charge, pour un maximum de 10 points. En cas d'égalité, le nombre d'octets le plus court l'emporte.
La reconnaissance sera accordée aux soumissions qui peuvent construire des n-gons en un minimum d'étapes ou qui peuvent construire des n-gons en dehors de la plage donnée, mais cela n'aidera pas votre score.
CIRCLE 0,0,500
ou dois-je faireR=SQRT(300^2+400^2): CIRCLE 0,0,R
? (BTW déterminer les positions des intersections est probablement plus difficile que les lignes et les cercles.)Carl Friedrich Gauss in 1796 showed that a regular n-sided polygon can be constructed with straightedge and compass if the odd prime factors of n are distinct Fermat primes
Réponses:
BBC Basic, 8 polygones: 3,4,5,6,8,10,12,15 côtés (également 60 côtés)
Téléchargez l'émulateur sur http://www.bbcbasic.co.uk/bbcwin/download.html
J'ai décidé de ne pas inclure 16 côtés, simplement parce que ma pré-construction devenait plutôt encombrée. 2 autres cercles et une ligne seraient nécessaires. BTW 17 côtés est en effet très compliqué et irait peut-être mieux en tant que programme séparé.
J'ai obtenu plus de retour pour ajouter 2 cercles à ma construction d'origine pour faire le pentagone, car cela m'a également donné accès à 10,15 et 60 côtés.
Le programme effectue une pré-construction avant de demander une entrée utilisateur. Cela suffit pour définir au moins 2 points sur le cercle principal qui correspondent aux sommets adjacents d'une figure à 3,4,5,6,8,10,12,15 ou 60 faces. Les points sont stockés dans un ensemble de tableaux à 99 éléments, dans lesquels les éléments 0 à 59 sont réservés pour des points également espacés autour de la circonférence. Ceci est principalement pour la clarté, l'octogone ne s'intègre pas parfaitement dans 60 points, donc une certaine flexibilité est nécessaire là-bas (et aussi pour le 16-gon s'il était inclus.) L'image ressemble à l'image ci-dessous, en blanc et gris, avec seulement les deux cercles jaunes étant exclusivement dédiés aux formes à multiples de 5 côtés. Voir http://en.wikipedia.org/wiki/Pentagon#mediaviewer/File:Regular_Pentagon_Inscribed_in_a_Circle_240px.gifpour ma méthode de dessin pentagone préférée. L'angle gai est d'éviter les lignes verticales, car le programme ne peut pas gérer des gradients infinis.
L'utilisateur entre un nombre
d
pour le nombre de côtés requis. Le programme recherche dans le tableau l'index du premier des deux points (le suivant est à 60 / j dans le sens des aiguilles d'une montre.)Le programme parcourt ensuite le processus de dessin d'un cercle centré sur le deuxième point qui passe par le premier, et de calcul de la nouvelle intersection afin de contourner le cercle principal. Les cercles de construction sont dessinés en bleu et le polygone requis est dessiné en rouge. Les images finales ressemblent à ceci.
Je suis assez content d'eux. BBC Basic effectue les calculs avec suffisamment de précision. Cependant, il est évident (en particulier avec 15 et 60 côtés) que BBC Basic a tendance à dessiner des cercles avec un rayon légèrement plus petit qu'il ne devrait.
la source
Mathematica,
234 polygones, 759 octetsPuces aléatoires:
Switch
pour sélectionner les cercles et les lignes pertinents pour chaque construction. De cette façon, je pourrais réutiliser un grand nombre de primitives entre eux.Voici le code non golfé:
Et voici les sorties:
la source
Switch
. Cela me permettrait probablement de réutiliser beaucoup plus de lignes et de points de cercles.