Générer un flocon de neige Koch
Un flocon de neige Koch est un triangle qui, pour chacun n
, un autre point équilatéral est ajouté au milieu de chaque côté: http://en.wikipedia.org/wiki/Koch_snowflake#Properties
Nous avions déjà un défi Koch Snowflake de complexité kolmogrov pour n=4
. Le nouveau défi est de dessiner un flocon de neige Koch avec n'importe quel n
entre 1
et 10
.
Règles
Les flocons de neige peuvent ne pas être codés en dur dans le programme ou dans les fichiers - ils doivent être générés par votre programme.
Votre programme doit prendre en charge toutes les tailles
n
comprises entre 1 et 10.Le nombre de côtés doit être entré par l'utilisateur via std-in.
Vous devez imprimer une représentation graphique du flocon de neige à l'écran.
Exemple de flocons de neige Koch avec n
1, 2, 3 et 4 égaux (lignes vertes pour plus de clarté, ne les reproduisez pas)
En cas de bris d'égalité, le programme avec le plus grand nombre de votes positifs gagne (concours pop).
la source
n=7
- delà , vous ne pouvez pas voir les triangles nouvellement ajoutés dans le flocon de neige sur un écran d'ordinateur. Y a-t-il un "meilleur effort" ici? Existe-t-il une résolution minimale pour les solutions basées sur les pixels?Réponses:
Mathematica 72
n = 3
Merci pour alephalpha.
la source
AnglePath
dans Mathematica 10.1.Graphics@Line@AnglePath[Nest[Join@@({-1,2,-1,#}&/@#)&,{2,2,2},Input[]-1]Pi/3]
ListLinePlot@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]
MATLAB,
119115Dans une tournure inhabituelle des événements, j'ai constaté que ce programme fonctionnait mieux en le jouant au golf. Tout d'abord, il est devenu beaucoup plus rapide en raison de la vectorisation. Maintenant, il affiche une invite utile
~n:~
rappelant à l'utilisateur la quantité à saisir!Les sauts de ligne ne font pas partie du programme.
n = 9:
o
est une chaîne arbitraire qui est égale à[0 2 4 0]
modulo 6. e iπ / 3 élevé à ces puissances donne les sommets d'un triangle équilatéral dans le plan complexe. Le premierkron
est utilisé pour faire une copie de la liste des points avec chacun dupliqué 4 fois.~~o
est le moyen pratique d'obtenir un vecteur de 4 unités. Trouve ensuitediff(P)
le vecteur entre chaque paire de points consécutifs. Des multiples de ce vecteur (0, 1/3, (1 + e -iπ / 3 ) / 3 et 2/3) sont ajoutés à chacun des anciens points.la source
T-SQL: 686 (hors formatage)
Pour SQL Server 2012+.
Même si ce ne sera jamais un concurrent, j'ai dû voir si je pouvais le faire en T-SQL. Parti pour l'approche de commencer par les trois bords initiaux, puis de revenir à travers chaque bord et de les remplacer par 4 bords pour chaque niveau. Enfin, tout est réuni en une seule géométrie pour le niveau spécifié pour @i
la source
LOGO: 95
Définit la fonction
k
avec un paramètre de niveau unique.Éditer
Dans cet éditeur en ligne http://www.calormen.com/jslogo/, vous pouvez ajouter
k readword
à l'invite de saisie, mais pour une raison quelconque, cette commande ne prend pas en charge l'abréviation standardrw
.La solution de 102 caractères ci-dessous fonctionne dans USBLogo avec une entrée standard comme spécifié dans la question. Cependant, le code a eu besoin de légères modifications car UCBLogo a un analyseur étrange. Il nécessite
to
etend
doit être dans des lignes distinctes et un espace avant:
est requis, mais en revanche:
sont facultatifs.la source
BBC BASIC, 179
REV 1
Comme auparavant, mais en noir et blanc, en versions non golfées (mais épurées) et golfées. Pas un gagnant, malgré le fait que le faire de cette façon évite d'avoir besoin d'un traitement spécial pour n = 1.
REV 0
Selon la réponse du PO à @xnor, les flocons de neige remplis sont OK. Cette réponse a été inspirée par le commentaire de xnor. Les couleurs sont juste pour le plaisir et pour montrer la façon dont il est construit. Prenez un triangle (magenta dans ce cas) et superposez avec 6 triangles 1/3 de la base.
la source
Mathematica - 177
Clip bonus de variation de l'angle de la pièce centrale
la source
Python 3 - 139
Utilise la bibliothèque graphique des tortues.
la source
"G">j
,"Q"<j
et utiliserfd(9/b)
pour sauver 3 octets? De plus, vous pouvez éviter que lesif
instructions se multiplient, par exemple("G">j)
avec l'argument9/b
et les mettre toutes sur une seule ligne derrièrefor
. Oh! Ensuite, vous pouvez même combinerrt
etlt
utiliser120*(...)-60*(...)
Python 3, 117 octets
Méthode:
n
estinput - 1
0000
nous joignons chaque caractère avec des101
n
temps de manière itérative avec l' astuce eval (merci à @xnor pour cela).1
ou0
), puis avançons d'une longueur (99/3^n
) qui garantit une taille similaire pour tousn
.0
de la chaîne sera inutile mais il redessine simplement la même ligne que le premier0
dessine.Exemple de sortie pour
input = 3
:la source
R:
240175Parce que j'essaie de comprendre R, voici une autre version. Il y a probablement de bien meilleures façons de le faire et je suis heureux de recevoir des conseils. Ce que j'ai fait semble très compliqué.
la source
Sage fwom youw gwave ...
Je savais que je voudrais essayer de l'implémenter dans Befunge-98 en utilisant TURT, mais je ne pouvais pas comprendre comment m'y prendre et je me suis assis dessus pendant plusieurs mois. Maintenant, ce n'est que récemment que j'ai trouvé un moyen de le faire sans utiliser d'auto-modification! Et donc...
Befunge-98 avec l'empreinte digitale TURT, 103
Voyons d'abord les détails de la mise en œuvre:
I
"imprimer" l'image dans un fichier SVG. Si vous l'exécutez dans CCBI sans l'argument de commande--turt-line=PATH
, il apparaîtra sous la forme d'un fichier nommé CCBI_TURT.svg par défaut. C'est le plus proche que j'ai pu venir pour "imprimer une représentation graphique du flocon de neige à l'écran" avec les interprètes Funge disponibles que j'ai pu trouver. Peut-être qu'un jour il y aura un meilleur interprète qui aura un affichage graphique pour la tortue, mais pour l'instant ...Fondamentalement, cela fonctionne en utilisant la pile comme une sorte de système en L de fortune et en l'étendant à la volée. À chaque passage, si le premier numéro de la pile est:
f
sur la dernière ligne);n-1, -1, n-1, 0, n-1, -1, n-1
.Pour
n = 10
, ce processus prend beaucoup de temps (quelques minutes sur mon système), et le SVG résultant est de ~ 10 Mo et invisible lorsqu'il est affiché dans le navigateur, car vous ne pouvez pas régler la taille du pinceau à l'aide de TURT. IrfanView semble fonctionner correctement si vous avez les bons plugins. Je ne suis pas très familier avec SVG, donc je ne sais pas quelle est la méthode préférée pour visualiser ces fichiers (surtout quand ils sont vraiment gros).Hé, au moins ça marche - ce qui, étant donné que c'est Befunge, est quelque chose dont on peut être reconnaissant en soi.
la source
Python 2, 127 octets
la source