Écrivez un programme ou une fonction qui accepte l'entrée suivante dans un format raisonnable de votre choix:
Deux entiers positifs W et H qui définissent la largeur et la hauteur de l'image que vous allez générer.
Deux couleurs RVB C1 et C2 qui seront utilisées pour colorer l'image.
Une liste de 3 tuples de la forme
(r, x, y)
qui définissent des cercles avec un rayonr
et un centrex, y
dans le plan de l'image.r
est un entier positif etx
ety
sont des entiers quelconques. Le pixel supérieur gauche de l'image est0, 0
et l'axe des x augmente vers la droite et l'axe des y augmente vers le bas.
Générez une image aux dimensions W par H colorée avec C1 et C2 de telle sorte qu'il n'y ait pas deux régions voisines définies par tous les cercles qui se chevauchent ont la même couleur.
Par exemple: si l'entrée est
W = 300 H = 200 C1 = (255, 200, 0) C2 = (128, 0, 255) Circles = (25, 50, 80), (40, 80, 120), (300, -100, 6), (17, 253, 162)
alors les limites du cercle ressemblent à ceci:
Il y a six régions distinctes et contiguës dans l'image créée par les cercles. Chaque région doit être colorée avec C1 (jaune) ou C2 (violet) de sorte qu'il n'y ait pas deux régions voisines de la même couleur.
Il y a deux façons de procéder, leur seule différence étant que les couleurs sont permutées:
Ainsi, l'une ou l'autre de ces deux images serait une sortie valide pour l'exemple d'entrée.
Quelque chose comme ça serait une sortie non valide car deux régions jaunes se voisinent.
Vos images de sortie doivent suivre ces directives:
Outre C1 et C2, une troisième couleur neutre, comme le noir ou le blanc, peut être utilisée pour les limites des cercles tant qu'elles n'ont pas plus de 5 pixels d'épaisseur. (Des limites noires de 1 pixel d'épaisseur sont présentes dans l'exemple ci-dessus.)
Les limites des cercles ne sont cependant pas nécessaires. Les régions peuvent être voisines directement:
Ces deux éléments sont une autre sortie valide de l'exemple ci-dessus.
Les cercles doivent être aussi précis que possible, en utilisant des algorithmes de dessin de cercle ou tout ce que votre bibliothèque graphique fournit.
En général, la perfection des pixels n'est pas requise, mais si les paramètres d'entrée sont mis à l'échelle de plus en plus grands, l'image résultante devrait devenir de plus en plus précise.
L'anticrénelage est autorisé mais pas obligatoire.
Les lignes de quadrillage ou les étiquettes d'axe, etc. en arrière-plan ne sont pas autorisées.
Le code le plus court en octets gagne.
Plus d'exemples
Tous utilisant ces entrées avec différents ensembles de cercles:
W = 100
H = 60
C1 = (255, 0, 0)
C2 = (0, 0, 255)
Dans tous les exemples, les couleurs peuvent être échangées et restent valides.
Circles =
A. empty list
B. (13, 16, 20)
C. (30, 16, 20)
D. (200, 16, 20)
E. (42, 50, 20)
F. (42, 50, 20), (17, 40, 30)
G. (42, 50, 20), (17, 20, 30)
H. (42, 50, 20), (17, 10, 30), (10, 50, 30)
I. (42, 50, 20), (17, 10, 30), (35, 50, 20)
J. (18, 36, 40), (18, 63, 40), (18, 50, 20)
K. (100, -10, -20), (60, 50, -10)
L. (18, 36, 40), (18, 63, 40), (18, 50, 20), (14, 50, 20), (5, 50, 18), (20, 0, 0), (70, 22, 0), (10000, -9970, 0), (135, 100, -80)
A.
B.
C.
D.
E.
F.
G.
H.
I.
J.
K.
L.
Assurez-vous que votre sortie se comporte de la même manière que tous ces exemples.
tikz