Petit Chandler est triste. Dessine-lui un nuage pour lui remonter le moral.
Remarque: dessiner un nuage ne l'encouragera pas.
Un cercle peut être défini comme un triplet (x,y,r)
où x
est la position x du cercle sur un plan cartésien, y
la position y du cercle sur un plan cartésien et r
le rayon du cercle. x
et y
peut être négatif. r
est toujours positif. L'entrée est une liste de cercles sous la forme de 3-tuples séparés par des espaces. Par exemple:
3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8
Les 3,1,1
moyens "Un cercle avec un point central 3,1
avec un rayon. 3,2,1.5
Signifie" Un cercle avec un point central 3,2
avec un rayon de 1,5.
Si nous traçons tous ces cercles de l'entrée sur un graphique, cela ressemble à ceci (j'ai inclus des lignes de grille et des étiquettes pour plus de clarté; elles ne sont pas obligatoires):
Remarquez comme tous les cercles sont cohésifs . C'est-à-dire qu'ils se chevauchent tous de telle sorte qu'ils forment un grand groupe sans petits groupes de cercles séparés du reste. L'entrée est garantie d'être cohésive.
Supposons maintenant que nous traçons une ligne qui contourne la "frontière" formée par ces cercles, sans aucune des autres lignes. Ce serait comme dessiner la bordure de la silhouette formée par tous les cercles. Le nuage résultant ressemblerait à ceci:
Donc, ce nuage a été formé en ne dessinant que les arcs de cercle de l’entrée qui forment une bordure, ce qui donne une forme unique. En d'autres termes, le nuage est formé en dessinant uniquement les arcs qui ne se trouvent pas dans un autre cercle. Votre programme prendra en entrée sous la forme expliquée ci-dessus et produira une image qui affiche le nuage obtenu. La forme générale du nuage doit être correcte, mais l’échelle, la couleur, l’épaisseur de trait et son apparence aux sommets dépendent de vous. Notez que le nuage doit être visible, vous ne pouvez donc pas tirer quelque chose comme "Ce programme dessine un nuage blanc sur un fond blanc", "Ce programme dessine un nuage à une échelle infiniment petite", "Ce programme dessine un nuage avec 0 épaisseur de trait ", etc. Notez également que la couleur de la bordure doit être différente de celle du remplissage ou de l'arrière-plan.
Un autre exemple. Contribution:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7
Sortie:
S'il y a un "trou" dans le nuage, vous devez également dessiner le trou. Contribution:
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
Sortie:
Voici une règle importante: votre programme ne doit dessiner que les lignes qui forment la bordure. Cela signifie que vous NE POUVEZ PAS simplement dessiner complètement les cercles, puis dessiner les cercles légèrement plus petits avec un remplissage blanc - parce que cette méthode dessine toujours des lignes qui ne forment pas de bordure, elle les recouvre ensuite. Le but de la règle était d'empêcher les implémentations de "dessiner les cercles, puis de dessiner les cercles avec un remplissage blanc", ou quelque chose de ce genre. On s'attend à ce que la réponse calcule réellement où dessiner les choses avant de les dessiner.
C'est le code de golf, donc le plus petit nombre de personnages gagne.
la source
Réponses:
Mathematica
177 126 121119Résolution par régions de disques: l'approche du mathématicien
La logique est de
C'est précisément l'approche adoptée ci-dessous. Il a produit les 3 chiffres ci-dessus.
La région implicite n ° 1 est l'union des cercles. La région implicite n ° 2 est l'union des disques situés dans les cercles. Leur différence est la frontière.
Résolution par régions de disques: l'approche de l'ingénieur (119 caractères)
Ce qui suit prend l'union des régions du disque, discrétise cette région et trouve sa limite. Les points du diagramme délimitent les intervalles du maillage de Delaunay. Nous affichons la région discrétisée ci-dessous pour mettre en évidence l'objet qui fournit la limite d'intérêt (le contour du nuage).
"3,1,1 3,2,1.5 1,2,0,7 0,9,1.2,1.2 1,0,0.8"
La limite de région est discrétisée.
Résoudre en détectant les bords: l'approche du photographe - 121 caractères
Il dessine les disques en noir, pixellise l'image, détecte les bords et inverse le noir et le blanc.
la source
RegionBoundary@DiscretizeRegion@RegionUnion[{#,#2}~Disk~#3&@@@ToExpression[#~s~","]&@s@InputString[s=StringSplit]]
s=StringSplit
intérieur de l'invite? Essayez de déplacer cela à nouveau devant, devrait toujours être plus courte que votre version actuelle.T-SQL
23523422921217173 octetsCela utilise les fonctionnalités spatiales dans SQL Server 2012+. Lorsqu'il est exécuté dans SSMS (SQL Server Management Studio), il génère un volet de résultats spatiaux.
L'entrée provient de la variable @i. Je pourrais le réduire davantage si les données pouvaient être extraites d'un tableau.Depuis l'entrée de table est maintenant autorisée.
J'ai laissé la solution précédente ci-dessous.
Edit : Supprimer l'espace parasite, le surplus dans et une sous-requête
171: Création de la table remplacée par CTE et @s par @.
Décomposition du SQL dynamique
la source
'A' has fewer columns than were specified in the column list
DECLARE @i VARCHAR(100) = '1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7'
. Malheureusement, je ne peux pas tester en ce moment et SQLfiddle ne joue pas bien pour 2012.Mathematica,
175158149 octetsJe me souviens de la discussion dans le bac à sable que cette approche était supposée être valide, mais je ne suis pas tout à fait sûr de la façon dont elle correspond à la nouvelle formulation des règles, alors @ Lilac, faites-moi savoir si vous pensez que cela enfreint les règles.
Fondamentalement, je crée une condition logique qui est vraie pour tous les points à l'intérieur du nuage et fausse pour tous les points en dehors de celui-ci. Je nourris ce à
RegionPlot
quoi rend ensuite la région de tous les points où l'expression estTrue
ainsi qu'un contour autour de lui.Ungolfed:
la source
ImplicitRegion
trouve automatiquement les valeurs x et y appropriées pour le traçage. 122 caractères:s = StringSplit; RegionPlot@ ImplicitRegion[ Or @@ (((x - #)^2 + (y - #2)^2 < #3^2) & @@@ (ToExpression[#~s~","] &@(s@InputString[]))), {x, y}]
RegionPlot
que jusqu'à présent.),AspectRatio-> 1
ramène le code à 149 octets, exactement là où il se trouve maintenant.Python 3.3 (
183177164160 octets)Il nécessite une console large de 80 caractères, que je sais être la configuration par défaut de Windows. Cela fonctionne mieux si votre console a une police carrée. Voici quelques extraits d’entrées de test.
Original:
Un autre:
Trou:
la source
Python -
253249215199Il s’agit d’une publicité pour l’impressionnante bibliothèque bien faite, dont les opérations de géométrie ont rendu l’écriture de la solution facile en traçant les contours de l’union des cercles se chevauchant (= points tamponnés):
Sortie:
Édition (s):
sys.argv[1:]
parraw_input().split()
, sauvegarde d'unimport sys
k={'color':'k'}
Luxe supprimé , remplacésavefig
parshow
map(float,s.split(','))
pareval(s)
la source
Python - 535
la source
from math import*
supprimant les espaces non supprimés, en utilisant des noms de variable à une lettre uniquement, en utilisant la compréhension de liste (par exemple,cc=[z for z in a if z!=a2 and (z[0]…)]
). Découvrez également les astuces pour jouer au golf en Python .a2
.Python -
296249231223212Le mérite revient à @ richard-green (la permission a été donnée) pour la solution originale, je viens de la réduire un peu.
la source
pylab
place dematplotlib.pyplot
.from pylab import *
pourrais-je quand même appelershow()
etscatter()
sans aucune référence?[eval(i)for i in raw_input().split()]
commeeval
tours de python1,2,3
un tuple. Vous devrez bien sûr aussi changer le[x,y,r]
en(x,y,r)
.JavaScript (E6) + HTML 322
JSFiddle
Chaque cercle est subdivisé en environ 100 petits arcs, et chaque arc est dessiné si son point milieu n'est pas à l'intérieur d'un des autres cercles.
la source
Python 274 octets
Cela prend les entrées de stdin et vérifie chaque point de l’affichage en dessinant les pixels un par un au fur et à mesure. Pas vraiment efficace mais il suit toutes les règles.
Notez que l’affichage pygame se terminera dès que le dessin sera terminé. Je ne savais pas si je devais l’inclure dans ma réponse
raw_input
. veulent empêcher le système d'exploitation de se plaindre de ne pas répondre et telles:Exemple d'images:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7, 1,2,0.7
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
la source
Perl - 430
Écrit un fichier pbm sur stdout.
Image test (convertie en png):
la source