Ce défi est en l'honneur des lumières de Noël collantes chez mes beaux-parents.
L'enjeu est de créer une sortie graphique montrant la décoration en "temps réel".
La vidéo (gif ou autre format) aura des "lumières" verticales et horizontales n par m . 5 <= m, n <= 40 . La taille et la résolution du cadre peuvent varier en fonction de n et m , mais doivent être d'au moins 50x50 pixels pour n, m = 5 (les graphiques vectoriels sont OK). Une image avec n=6
et m=5
ressemblera à ceci:
La décoration:
Couleurs:
Toutes les lumières auront l' un des 6 couleurs RGB suivantes {255,0,0}
, {0,255,0}
, {0,0,255}
, {255,255,0}
, {0,255,255}
et {255,0,255}
.
Animation:
n
etm
seront prises en entrée sur n'importe quel format raisonnable et dans l'ordre que vous aimez- L'image changera à chaque fois
dt = 25 ms
. Les écarts sont OK s'ils sont dus à des "facteurs extérieurs" tels que la limitation de l'interpréteur, un ordinateur lent, etc.- S'il est impossible de définir le pas de temps manuellement, le pas de temps par défaut est accepté.
- Tous les voyants seront rouges (
{255,0,0}
) àt=0
. - Il y a toujours 5% de chances que la première lumière (en haut à gauche) change de couleur. Toutes les couleurs (à l'exception de la couleur actuelle) devraient être tout aussi probables.
Chaque lumière (sauf la première) aura la couleur de la lumière à sa gauche. Si la lumière est à l'extrême gauche, elle obtiendra la couleur de la lumière à l'extrême droite dans la rangée ci-dessus. Les lumières sont numérotées comme indiqué ci-dessous. Le numéro de lumière
k
aura la couleur du numéro de lumièrek-1
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
La sortie devrait en théorie fonctionner pour toujours (sauf si votre langue / interprète a une limitation qui l'empêche).
- Veuillez fournir un échantillon d'au moins 5 secondes, de préférence plus dans la réponse (c'est un encouragement, pas une exigence). (Un lien vers TIO ou similaire est bien sûr OK aussi: D)
- Les cadres, axes, lignes de grille, etc. sont acceptés.
6 par 5
15 par 30
r,g,y,b,
etc sont plus courts en plusieurs langues.drawnow
quand j'ai implémenté ceci dans MATLAB, car le résultat était trop lent. Je pense que la réponse doit être: si c'est un choix de conception que l'interprète a une résolution temporelle minimale fixe de> = 25 ms, alors c'est OK. Si cela est dû à une implémentation médiocre / simple, à un interpréteur en ligne surchargé / lent, etc., ce n'est pas OK.Réponses:
JavaScript / CSS / HTML, 436 octets
la source
Mathematica,
186161158 octetsExplication
Créez le tableau initial en 1D, rempli de rouge. Conservez-le dans
b
.Pause de 25 ms
Si un nombre réel (pseudo-) aléatoire est inférieur à 0,06, remplacez le premier élément de
b
par une longueur d'échantillonnage aléatoire3
de la liste{1,1,0,0}
. (c'est-à-dire n'importe lequel de{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}
)Cyclique tourner à droite.
Remplacez la première valeur de cellule par la deuxième valeur de cellule (c.-à-d. Annulez le décalage de la première cellule)
Partition
b
en (hauteur).Faites-en une image dynamique (constamment mise à jour), dont la largeur est de 50 (largeur)
Version automate cellulaire (186 octets)
Exemple de sortie (entrées: 16, 10)
la source
MATLAB,
255210 octetsC'est mon premier golf, donc il y a probablement des améliorations à apporter.
Merci à Luis de m'avoir aidé à économiser 45 octets :)
Explication:
Malheureusement, cela ne sauvegarde pas l'animation, il l'exécute simplement. Afin de le sauvegarder, j'ai besoin d'un programme de capture d'écran ou tout réécrire à l'aide
imwrite
. Au lieu de cela, je fournirai deux images montrant des heures différentes, pourn=15,m=30
.la source
dec2bin([4 2 1 6 3 5])-48
au lieu de[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]
..95
au lieu de0.95
. Vous pouvez également remplacer.95
par.94
et se débarrasser dek=k(k~=r);
(parce que 0,94 + 0,06 / 6 = 0,95, voir ma réponse pour une explication plus détaillée)c=dec2bin(1:6)-48
car l'ordre n'a pas d'importanceMATL ,
5247 octetsL'entrée est un tableau
[ncols nrows]
. La sortie est une figure avec des graphiques vectoriels.Exemple exécuté pour 15 colonnes × 10 lignes:
Comment ça marche
Le temps de pause a été défini sur 15 ms (pour le même nombre d'octets que 25 ms) pour essayer de compenser le temps de traitement.
Pour conserver la couleur avec une probabilité de 19/20 (changez-la avec 1/20), nous procédons comme suit:
Ainsi, la probabilité de conserver la couleur est de 47/50 + 3 / (50 * 6) = 19/20.
la source
MATLAB,
153147 octetsRemarque : Le GIF montré est de l'ancienne version, ce qui est agréable car il n'affiche pas les axes (voir l'historique des modifications), mais était extrêmement lent en raison de la mise en œuvre de
imshow
. Pour la version actuelle, la réponse MATLAB de Chelsea G. ou la réponse MATL de Luis Mendo montrent le même résultat que ma version actuelle.La taille est considérée comme un
2x1
vecteur, alors appelez par exemple:Cette réponse exploite les subtilités du langage MATLAB. Par exemple,
x
est initalisé comme unem x n
matrice nulle, mais l'indexation dite linéaire permet un décalage circulaire avec des indices unidimensionnels. Un typage faible permet une multiplication avec des logiques, de sorte que lesif
instructions sont évitées (une astuce que j'ai beaucoup utilisée à l'époque de la programmation sur une calculatrice TI-84). Même si une palette de couleurs est lue par ligne, MATLAB la traite comme une matrice normale, de sorte qu'elleeye(3)
peut être utilisée pour créer du rouge, du vert et du bleu, et1-eye(3)
les trois autres couleurs. Un simplereshape
ramène le vecteur linéaire sous forme matricielle, qui est mappé aux couleurs souhaitées à l'aideind2rgb
. Finalement,imagesc
, montre l'image, montrée à la taille de figure par défaut (qui est assez grande pour les exigences). Comme par hasard aurait-il,imagesc
ne me dérange pas les valeurs étant en dehors de la plage spécifiée, donceye
peut être utilisé pour initialiser la matrice puisque les deux1
et0
sont considérés comme rouge.la source
Python 3.6 (316 octets)
Utilisation des codes de couleurs ANSI et des nouveaux littéraux de chaîne formatés de Python 3.6 ( PEP 489 ) (la
f"{X}"
magie).Sinon, c'est juste assez basique, mais du python obscurci. La largeur et la hauteur sont transmises comme arguments sur la ligne de commande.
la source
w,h=map(int,sys.argv[1:])
, le déballage fonctionne avec n'importe quel itérable (de la bonne taille), l'appel à la liste est superflu."\x1b["
=>"\33["
(en utilisant octal au lieu des échappements hexadécimaux), puis l'abréviation X et les chaînes de formatage le rendent réellement plus long (et en vous débarrassant def""
vous, vous obtenez la compatibilité avec n'importe quel python3). (cela le ramènera à 301 octets).{x}
une fois ... mais vous gagnez toujours en vous débarrassantX
.