Étant donné, en aucune façon et dans l'ordre,
dimensions (dans l'ordre de votre choix)
une probabilité (dans le format que vous voulez)
nombre d'itérations (vous pouvez choisir de compter l'état initial ou non)
effectuez l' une des opérations suivantes:
animer, ou
sortie à chaque étape de, ou
retourner une liste d'états de
un ciel rempli d'espaces de ces dimensions.
Pour chaque itération:
chaque personnage du ciel a la probabilité donnée de devenir un
*
les huit personnages qui l'entourent
*
deviennent
\
|
/
-
-
/
|
\
, s'ils ne deviennent pas des stars, cependant,- si un personnage est dans la plage de deux
*
s, faites-en unX
Exemple
Le ciel 7 × 22 (cadre pour plus de clarté - ne pas sortir le cadre)
┌──────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└──────────────────────┘
pourrait avec 1% de probabilité devenir
┌──────────────────────┐
│ * │
│ │
│ │
│ │
│ │
│ * │
│ │
└──────────────────────┘
et la prochaine étape
┌──────────────────────┐
│ - - * │
│ /|\ │
│ * │
│ │
│ \|/ │
│ - - │
│ /|\ │
└──────────────────────┘
puis
┌──────────────────────┐
│ - - │
│ /|\ \|/ │
│ - - │
│ /|\ │
│ │
│ * * │
│ │
└──────────────────────┘
et
┌──────────────────────┐
│ │
│ │
│ │
│ │
│ \|X|/ │
│ - X - │
│ /|X|\ * │
└──────────────────────┘
etc
┌──────────────────────┐
│ │
│ │
│ │
│ * │
│ │
│ \|/│
│ - -│
└──────────────────────┘
Réponses:
ES6,
520496 octetsL'écrêtage et tout le reste devraient fonctionner maintenant.
Voir l'animation!
Enregistré 24 octets grâce à la pointe de Zacharý.
Ancienne solution, 478 octets (avec bug d'écrêtage)
Je pense que toutes les règles sont correctes, mais la solution a un problème d'écrêtage où tout ce qui sort de droite / gauche s'enroule autour d'une ligne plus bas / plus haut du côté opposé.
Voir ancienne.
la source
'*'
car vous l'utilisez si souvent?'*'
et d'autres choses couramment utilisées.APL (Dyalog) , 65 caractères ou 71 octets *
Demande des dimensions (lignes, colonnes), puis des itérations (sans compter l'état initial), puis des probabilités (comme n dans ¹⁄ ₙ ).
Essayez-le en ligne!
⎕⍴''
invite pour l' entrée et l' utiliser pour r Eshape une chaîne vide, le remplissage avec des espaces si nécessaire⊢
donner que…
⍣⎕
Demander à entrer et appliquer la fonction suivante sur le dessus ( ⍵ ) autant de fois:...
{
...}
calculer une fonction en utilisant la comme opérande (ci - dessous fonction ⍺⍺ ), comme suit:⎕←⍵
imprimer l'argument⍺⍺
appliquer la fonction suivante:…
⌺3 3
Appliquez la fonction suivante sur le voisinage Moore de 3 × 3 de chaque élément:⎕{
…}
Obtenir une entrée et l'utiliser comme opérande ( ⍺⍺ ) pour dériver une nouvelle fonction?⍺⍺
entier aléatoire parmi les premiers ⍺⍺ entiers1=
Booléen si égal à un:
si vrai:'*'
retourner une étoile⋄
autre:,⍵
défoncer (aplatir) l'argument (le quartier Moore)4⌽
le faire tourner cycliquement de quatre pas vers la gauche1↓
déposer un élément (le centre d'origine)'*'=
Liste booléenne où égale à une étoileb←
stocker cela comme b+/
somme cela2≤
Booléen si deux ou plus:
si vrai:'X'
retourner un X⋄
autre:b/'-/|\\|/-'
utilisez le b pour filtrer la chaîne⊃
choisissez le premier, s'il n'y en a pas, choisissez le prototype (un espace)* Pour exécuter dans Dyalog Classic, remplacez simplement
⌺
par⎕U233A
.la source