Joe vit aux Bahamas. C'est l'hiver. Ses enfants sont déçus qu'il n'y ait pas de neige. Joe a besoin de faire de la neige pour ses enfants. Heureusement, il a une imprimante 3D. Il prévoit d'en faire des flocons de neige. Malheureusement, il n'a aucune idée de l'apparence d'un flocon de neige. En fait, il n'a jamais vu de flocon de neige! Aidons-le en créant un programme qui génère automatiquement pour lui une image 2D d'un flocon de neige.
Contribution
Le diamètre de l'image (en pixels), le pourcentage de l'image qui est en fait un flocon de neige.
Production
Une image d'un flocon de neige avec le diamètre requis. Il peut être enregistré dans un fichier ou affiché pour l'utilisateur.
Caractéristiques
Créez un coin avec un angle de 30 degrés. Créez un arbre brownien avec la graine initiale au point du coin. Refléter le coin autour du centre de l'image 12 fois pour générer le reste de l'image. Le flocon de neige a la couleur blanc. Le fond a la couleur noir.
Notation
En raison du fait qu'il existe différentes façons de générer un arbre brownien, le score est de 10 * nombre de votes positifs - score de golf.
Le score de golf est défini comme le nombre d'octets dans le programme avec les bonus suivants:
-20% Peut spécifier arbitrairement la symétrie du flocon de neige.
-50% Peut spécifier la forme du flocon de neige. (En pouvant spécifier le rapport des longueurs des côtés du coin.)
Le score le plus élevé l'emporte.
Voici une image de la forme du coin avec un rapport d'environ 2:
Tableau d'affichage:
Martin Buttner: 10 * 14 - 409 = -269
Nimi: 10 * 1 - 733 * .5 = -356,5
Optimiseur: 10 * 5 - 648 = -598
Le gagnant est Martin avec un score de -269!
la source
Réponses:
Mathematica, 409 octets
Non golfé:
Cela attend la saisie du formulaire
{n,p}
oùn
est la taille de l'image en pixels etp
le pourcentage de l'image à couvrir par le flocon de neige.Il faut environ une demi-minute pour générer un flocon de neige avec les paramètres donnés. Vous pouvez l'accélérer en modifiant la valeur de
m
de999
à99
, mais le résultat semble un peu clairsemé. De même, vous pouvez augmenter la qualité en utilisant de plus grands nombres, mais cela prendra très longtemps.Je forme l'arbre brownien sur un réseau entier, en plaçant de nouvelles particules sur
{999, 0}
, et en les déplaçant au hasard vers la gauche et vers le haut ou vers le bas (pas vers la droite), jusqu'à ce qu'elles frappent les particules existantes. Je contrains également le mouvement au coin entre 0 et 30 degrés. Enfin, je réfléchis ce coin sur l'axe des x et je l'affiche avec ses 5 rotations.Voici quelques résultats (cliquez pour agrandir):
Et voici deux animations de la croissance de l'arbre brownien (10 particules par coin par image):
la source
JavaScript, ES6,
799 740 695 658648Je compte uniquement les deux balises canvas et la fonction
f
de l'extrait ci-dessous dans le cadre du décompte d'octets. Le reste est pour la démo en directPour le regarder en action, il suffit d'exécuter l'extrait ci-dessous dans un dernier Firefox donnant la taille et le ratio via les zones de saisie
Notez que vous devrez masquer le résultat puis afficher à nouveau avant un flocon de neige consécutif
Voici quelques exemples de rendus avec différentes tailles et pourcentages. Le meilleur s'appelle SkullFlake (premier dans la liste). Cliquez sur les images pour les voir en pleine résolution.
Beaucoup d'aide et de contribution de Martin et des githubphagocytes.
la source
Haskell,
781733 octetsLe programme comporte l'option «spécifier le rapport des longueurs des côtés du coin», vous devez donc l'appeler avec trois arguments de ligne de commande:
L'argument # 1 est la taille de l'image, # 2 le% de pixels dans le coin et # 3 la longueur (en%) du côté le plus court du coin. L'image est enregistrée dans un fichier appelé "o.png".
150-50-40:
Mon programme produit des flocons de neige avec des pointes de coupure, car de nouveaux pixels commencent sur l'axe médian du coin (point vert, voir ci-dessous) et ont tendance à y rester, car ils se déplacent également de manière aléatoire vers la gauche, vers le haut ou vers le bas. Lorsque les pixels en dehors du coin sont supprimés, des lignes droites apparaissent sur la limite du coin (flèche verte). J'étais trop paresseux pour essayer d'autres chemins pour les pixels.
150-50-40:
Lorsque le coin est suffisamment grand (3e argument 100), les pointes sur l'axe central peuvent grossir et il y en a 12.
150-40-100:
Peu de pixels font des formes rondes (gauche: 150-5-20; droite 150-20-90).
Le programme:
la source
*-*-100
image, ses deux côtés atteignent le bord gauche de l'image (voir la deuxième image pour la position du coin). Il y a des pixels sur environ la moitié des côtés - les autres moitiés sont vides.code style
. J'ai modifié mon article et défini des onglets, mais ils apparaissent toujours sous forme d'espaces. Quelqu'un sait-il comment y remédier?#
lien de hachage sur lequel vous pouvez cliquer. Vous pouvez y coller votre code à onglets et le lier.code style
en mettant en retrait toutes les lignes de 4 espaces.Traitement de 2 à 575 caractères
Prend un fichier f dont la première ligne est la taille de l'image et la seconde le rayon des flocons. Chaque fois qu'un nouveau point est placé, il tourne autour du centre 12 fois. Cela crée un effet très similaire à un coin tourné, mais pas exactement le même.
vous pouvez obtenir le traitement ici
la source
color(255)
peut devenircolor(-1)
pour économiser un octet