J'ai toujours aimé les écrans remplis de pixels colorés de manière aléatoire. Ils sont intéressants à regarder et les programmes qui les dessinent sont amusants à regarder.
Le défi
Remplissez votre écran ou une fenêtre graphique avec des pixels de couleur.
Les règles
- Votre programme doit avoir une chance égale de choisir toutes les couleurs (c.-à-d. Dans la plage
#000000
de#FFFFFF
) ou toutes les couleurs pouvant être affichées sur votre système. - Votre programme doit continuer à afficher des pixels aléatoires jusqu'à ce qu'il soit arrêté manuellement (il ne peut pas se terminer seul).
- Les pixels peuvent avoir n'importe quelle taille, à condition que votre sortie ait au moins 40 x 40 "pixels".
- Votre programme doit être exécuté à une vitesse telle qu'il puisse remplacer chaque pixel de l'écran / de la fenêtre au moins une fois après trois minutes d'exécution.
- Votre programme doit choisir des couleurs véritablement aléatoires et des points à remplacer, c’est-à-dire aléatoires avec tous les points / couleurs également probables. Cela ne peut pas sembler aléatoire. Il doit utiliser un paramètre ou supérieur, et le résultat ne peut pas être identique à chaque fois.
- Votre programme doit avoir une chance égale de choisir toutes les couleurs à chaque itération .
- Votre programme doit remplacer un seul pixel à la fois.
- Votre programme ne peut utiliser ni Internet ni votre système de fichiers (
/dev/random
et/dev/urandom
excepté).
Exemple
Votre sortie pourrait ressembler à ceci si elle était arrêtée à un moment aléatoire:
Le gagnant
La réponse la plus courte dans chaque langue gagne. S'amuser!
It must use a pRNG or better
Réponses:
Minecraft 1.12 Blocs de commande Redstone,
4 3552 872 octets(Taille déterminée par la taille du fichier de bloc de structure enregistré.)
Voici un aperçu complet de YouTube , mais je vais essayer de décrire le code ci-dessous.
Routine d'installation:
Ceci établit la grille 40x40 des supports d’armure Minecraft. Les supports d'armure sont nécessaires car Minecraft n'a aucun moyen de substituer des variables aux coordonnées mondiales . La solution de contournement consiste donc à faire référence à l'emplacement de ces entités de stand d'armure.
Ce support nommé est fondamentalement notre "curseur" pour placer tous les supports dont nous aurons besoin. Le bloc redstone dans la dernière étape "alimente" les blocs proches (y compris nos blocs de commande), lance donc la prochaine boucle:
À ce stade, notre grille est complète:
Sélecteur de couleur aléatoire
Les répéteurs violets au centre de cette image choisissent une couleur aléatoire à l’aide de la commande suivante:
Ce "@r []" est la sauce magique, il sélectionne une entité aléatoire dans le monde qui correspond aux conditions données . Dans ce cas, il trouve une armure dans un rayon de 9 blocs et nous avons mis en place 16 armures, une pour chaque couleur de laine. Sous la couleur sélectionnée, il place un bloc redstone (qui alimente les deux blocs de commande de chaque côté).
Sélecteur de pixels aléatoire
Placer le bloc redstone sous la couleur de laine sélectionnée déclenche deux autres blocs de commande:
Cette première ligne utilise notre même commande magique @r pour choisir n'importe quel support d'armure sur la carte entière (aucune restriction de rayon, ce qui inclut la grille 40x40), et place une laine de la couleur sélectionnée au-dessus de sa tête. Le X détermine la couleur et va de 0 à 15. La deuxième commande supprime le bloc redstone pour qu'il soit prêt à partir.
J'ai 5 blocs répéteurs violets, et redstone fonctionne par "ticks" 20 fois par seconde, je place donc 100 pixels par seconde (moins certains chevauchements de couleurs). Je l'ai chronométré et je couvre généralement toute la grille en 3 minutes environ.
C'était amusant, je vais essayer de rechercher d'autres défis qui pourraient également fonctionner dans Minecraft. Un grand merci à lorgon111 pour sa série de tutoriels sur YouTube Command Block .
EDIT: Réduit sérieusement la taille de la structure sauvegardée, passant à 2 872 octets sauvegardés :
Testé en tirant la structure sauvegardée dans un nouveau monde, tout fonctionne toujours comme prévu.
EDIT 2 : lien Dropbox en lecture seule vers le fichier de structure NBT
Walk through est dans ma vidéo YouTube , mais voici les étapes:
\structures
dossier que vous créez avec la sauvegarde actuelle du monde./give @p structure_block
-le et/tp @p -12, 56, -22
sautez au bon endroit pour commencer.la source
shortest answer in each language wins
et c'est la réponse la plus courte dans Minecraft: P ont un extra +15sh + ffmpeg, 52 octets
Ffmpeg compte-t-il comme un esolang? :RÉ
Malheureusement, pix_fmt est requis, car ffmpeg utilise par défaut yuv420p. Cela ne répond pas à l'exigence "doit avoir la même probabilité de toutes les couleurs de pixel possibles". Idéalement,
cif
est un raccourci pour une taille vidéo assez importante qui utilise moins d' espace que « 40x40 ».Sans surprise, optimiser ce gif avec gifsicle n'a absolument rien fait. C'est 4MiB.
la source
C sur POSIX,
98969592 octets-3 grâce à Tas
Celui-ci choisit entre 16 couleurs (gris foncé, rouge, vert, bleu, orange, cyan, violet, gris clair, noir, rose, bleu clair, jaune, cyan clair, magenta, blanc) et les imprime directement sur le terminal.
Notez que si votre GPU est trop lent, cela peut sembler mettre à jour tout l'écran en même temps. Il se passe pixel par pixel, mais C est rapide.
Solution alternative qui rend les couleurs plus distinctes:
Preuve que cela se passe pixel par pixel (capture d'écran d'un autre programme):
Wow, ça a l'air presque en 3 dimensions ...
la source
;
pour compiler correctement mais semble fonctionner très bien autre que ça! B-)while
àfor
.#define r rand()
utilisant ensuiter%40, r%40, r%2, r%8
JS + HTML
162 + 32 (194)124 + 13 (137) octetsMerci à Luke et aux autres commentateurs de m'avoir sauvé de nombreux octets.
la source
<canvas id=c>
devrait suffire car je pense que la taille par défaut de l'canvas
élément est300 x 150 px
supérieure à la "taille de la fenêtre d' affichage "99 x 99 px
. Quoi qu'il en soit, bonne solution.2d
. (Vous ne savez pas comment formater cela, mais si "2d" est un modèle de modèle, il n'a pas besoin de parenthèses.) (Suppression de mes suggestions précédentes.)with
déclaration pour supprimer toutes les occurrences deb.
:r=n=>n*Math.random()|0 setInterval("with(c.getContext`2d`)fillStyle='#'+r(2**24).toString(16),fillRect(r(99),r(99),1,1)")
MATL, 28 octets
Essayez-le sur MATL Online . J'ai ajouté une pause d'une demi-seconde (
.5Y.
) à cette version.Explication
la source
TI-BASIC (84 + C (S) E uniquement),
3735 octetsEn raison de limitations matérielles, cela risque de planter, car chaque fois qu'un programme est imbriqué dans un programme dans TI-BASIC , 15 Ko de RAM sont alloués pour "conserver un signet" dans le programme parent. Cela fonctionnerait bien sur une calculatrice "théorique" avec une RAM infinie, mais si nous voulons qu'elle fonctionne indéfiniment sur une vraie calculatrice, nous pouvons simplement l'envelopper dans une
While 1
boucle pour 2 octets supplémentaires :Les calculatrices de la famille TI-83 avec écrans couleur (TI 84 + CE et CSE) prennent en charge 15 couleurs. Ils ont des codes de couleur à
10
travers24
. Ceci parcourt tous les pixels dans un5!
carré de 120 sur 120 ( ) et attribue à chacun une couleur aléatoire.Résultat:
la source
5!
si je voulais 120 pixels.For(
1 octet,Pxl-On(
1 octet,randInt(
2 octets, etc.MATLAB, 56 octets
La sortie ressemble à l'image ci-dessous. Un "pixel" change à la fois et une seule des couleurs RVB change.
Pourquoi? Les couleurs dans MATLAB sont représentées sous forme de matrice 3D, une couche pour R, G et B. Le code ci-dessus modifie une seule des couches par itération. Tous les pixels et tous les calques peuvent être modifiés. Par conséquent, si vous attendez un peu, toutes les couleurs sont également possibles dans toutes les positions.
Ajoutez
pause(t)
à l'intérieur de la boucle pour faire une pause det
secondes entre chaque image.Vous devez l'arrêter avec Ctrl+ C.
la source
where
Your program must have an equal chance of picking all colors/points each iteration
. Votre programme remplit-il cela?Bash + coreutils,
5956 octets\e[48;5;COLORm
est le degré d’échappement à la couleur de fond.Chaque "pixel" a la chance d'être à chaque fois dans la plage [0..16777215].
la source
jot
:for((;;)){ printf "\e[48;5;`jot -r 1 0 16777215`m ";}
Javascript + HTML 118 + 13 (131 octets)
#7
n'est pas une couleur valide ou#777
et#777777
sont de la même couleur (2x les chances)la source
Excel VBA,
13110285 octetsFonction de fenêtre immédiate VBE anonyme qui utilise une fonction d’aide (voir ci-dessous) pour générer un tableau de cellules de couleur aléatoire dans la plage
A1:AN40
de l’objet feuille active.Remarque: cette solution est limitée aux installations 32 bits de MS Excel (et donc d'Office dans son ensemble), car
8^8
elles ne seront pas compilées sur les versions 64 bits de VBA.Exemple de sortie
La version précédente
Fonction d'assistance
Affiche un int aléatoire dans l'intervalle [0,255]
la source
C #,
369288287 octets88 octets sauvegardés grâce à @CodyGray.
Un programme complet qui obtient la poignée de l'écran et sa taille, puis commence à dessiner de façon aléatoire des pixels. Notez que cela pourrait bloquer votre carte graphique lors de son exécution. De plus, si l'écran ou tout contrôle décide de repeindre à tout moment, les pixels seront perdus et devront être redessinés.
Remarque: lorsque vous exécutez, maintenez le focus sur la fenêtre pour la tuer, vous devez appuyer sur Alt + F4 ou appuyer sur le bouton de fermeture. Le faire lorsque vous ne pouvez pas voir l'écran est un peu difficile.
Je ne pouvais pas enregistrer ce travail, avec ScreenToGif, car cela obligeait à repeindre pour que les pixels soient supprimés. Cependant, voici une capture d'écran de celle-ci après environ 10-15 secondes, et je pense que j'ai peut-être bloqué mon PC! L'espace dans le coin supérieur droit est l'endroit où l'écran a forcé une nouvelle peinture au moment même où j'ai pris la capture d'écran.
Version complète / formatée:
Une version pour
308227226 octets qui s’appuie uniquement sur la région 0-40:Exemple de sortie pour celui-ci:
la source
Graphics.FromHwnd((IntPtr)0)
fonctionnerait également et serait beaucoup plus court que P / InvokingGetDC
. Bien entendu, votre code est toujours semblable à celui de Tas et présente une fuite folle de ressources. C'est pourquoi il arrête votre machine après seulement une courte période d'exécution.GetDC
ne retourne pasIntPtr.Zero
si l'envoi queFromHdc
cela ne fonctionnera pas.FromHdc
, je suggère que vous appeliezFromHwnd
. Notez que lorsque vous appelezGetDC
pour obtenir le contrôleur de domaine pour un handle de fenêtre, vous transmettez un pointeur NULL (0) en tant que handle de fenêtre.Console C #,
233220189188 octetsUtilise "tout" (Windows) 16 couleurs de console.
Merci pour la "fonctionnalité" qui permet d’aliaser des classes en C # via la
using
directive.Modifier # 1
Supprimé des espaces.
Suppression de zéros de Random.Next ()
Est allé à
namespace system{...}
Modifier # 2
La taille minimale de la grille est 40x40
Un octet en déclarant Random dans l'en-tête de la boucle
Supprimé
public
de la méthode MainEdit # 3
Il s'avère que ce
using C=Console;
n'est pas le meilleur qui soit.using static Console
ressemble beaucoup à la méthode VB.Net pour "importer" des classesJ'abandonne: TheLethalCoder a rendu cela possible
Code original pour adapter la taille de la fenêtre à 207 octets:
Image originale:
la source
namespace System
devrait économiser des octets,r.Next
peut supprimer le zéro, je crois, supprimer les espaces non pertinents,namespace System{}
est plus court queusing System;
. Soin d'expliquer?Main
. Les souvenirs non fondés sont les meilleurs!Traitement, 90 octets
développé et commenté:
Idéalement, je pourrais utiliser un index de pixels au lieu de x, y location, mais l'
pixels[]
accès à Processing nécessite des opérationsloadPixels()
pré etupdatePixels()
post, d'où l'utilisation deset()
.point()
fonctionnerait aussi, mais a plus de caractères et nécessitestroke()
. La zone aléatoire est en réalité 99x99 pour économiser quelques octets (au lieu de 100x100), mais cela devrait couvrir 40x40 avec chaque pixel dans une telle zone à remplacer.Le bruit Perlin () est utilisé à la place de random () pour le garder plus pseudo-aléatoire et un octet plus court. La valeur est calculée une fois, mais utilisée deux fois: une fois pour la position aléatoire, puis encore une fois pour la couleur.
La couleur est réellement
ARGB
(00000000 à FFFFFFFF) (pas RVB) (points bonus?: D).la source
set()
est un truc très propre et peut être très utile pour Conseils pour jouer au golf dans le traitementPython, 133 octets
Je ne suis pas tout à fait sûr que cela corresponde aux spécifications, car c'est sur une toile dans une zone 40x40.
Essayez-le en ligne - version sans
eval
, qui ne fonctionne pas dans Trinketla source
colormode
est1.0
pas255
.colormode
et il n'y en aurait pas: /dot(1,R(0,255),R(0,255),R(0,255))
fonctionne pas non plus?dot
est censé accepter(width,*color)
. Ce n'est pas Python: pJavaScript utilisant Canvas
340 316324 octetsversion complète
la source
Traitement, 112 octets
Je ne peux pas garantir que chaque pixel est remplacé toutes les 3 minutes, mais cela semble être le cas. Au moins les chances qu’il manque un pixel, sur un total de 1600, en mettant à jour un aléatoire 30 fois par seconde, soit un total de 5400 mises à jour par minute, font qu’il est improbable qu’il en manque un.
Ungolfed:
Le programme est vraiment simple. Ouvrez une fenêtre de 40 x 40 pixels et chaque image (30 par seconde par défaut) prend une couleur aléatoire et tracez un point situé à une coordonnée aléatoire entre 0 et le paramètre. 40 pour les coordonnées en pixels, 255 pour les couleurs.
la source
size(40,40);
et changerpoint
enpoint(random(99),random(99));
? (ou 100 au lieu de 99 si 99 ne fonctionne pas)size
fonction DOIT être la première ligne de code dans la fonction de configuration (les raisons sont compliquées), je ne peux donc pas contourner ce problème . Je peux changer toutes les occurrences de 40 à 99. Je ne l'ai tout simplement pas fait, car cela ne m'a pas épargné d'espace. Je suis principalement allé avec la taille minimale pour augmenter les chances que chaque pixel soit rafraîchi en 3 minutessetup()
fonction sur la dernière version de Processing sur ma machine fonctionne correctement sans erreur.HTML + SVG + PHP, 245 octets
Étendu
Exemple pour une sortie sans balise meta et dans une version supérieure
la source
C ++ sous Windows, 125 octets
Les nouvelles lignes sont nécessaires et incluses dans le nombre d'octets.
Boucle indéfiniment, sélectionne de manière aléatoire une valeur comprise entre 0 et 255 (inclus) pour les valeurs de ligne et de colonne, attribue des valeurs R, V, B aléatoires entre 0 et 255 (inclus)
la source
#include
s. (Et oui, il existe des compilateurs non Visual Studio C pour Windows.)Python 3.6 + Tkinter, 281 octets
la source
tkinter
s'agit d'une bibliothèque standard, vous n'avez pas besoin de l'inclure dans l'en-têtec.create_image((20,20),i) File "C:\Python36\lib\tkinter\__init__.py", line 2483, in create_image return self._create('image', args, kw) File "C:\Python36\lib\tkinter\__init__.py", line 2474, in _create *(args + self._options(cnf, kw)))) _tkinter.TclError: unknown option "pyimage1"
JavaScript (ES7) + HTML utilisant SVG, 129 + 10 = 139 octets
Version SVG fortement inspirée de l'
<canvas>
approche de @ Octopus .JS
HTML
Puisque l'extrait de pile aime casser le script en analysant la
<rect>
balise, voici un CodePen .la source
6502 Assembly, 92 bytes
Sortie:
Explication:
la source
LOGO, 71 octets
Le seul langage que je connaisse, n'étant pas ésotérique / spécialement conçu pour le golf-code, et ayant une
forever
fonction. Une idée de lamap
part?la source
shortC ,
6656 octets-10 octets grâce au Dr. Rand. : P
Aucun lien TIO, car vous ne pouvez évidemment pas imprimer sur le type de terminal requis en ligne.
la source
Perl (sur * nix), 69 octets
Les
\x1b
s sont des caractères d'échappement littéraux.S'appuie sur la
stty
commande et fonctionne bien sur OS X.Semblable à d’autres approches, mais j’ai aimé la combinaison de tous les paramètres dans un seul appel à la
printf
pensée que je partagerais. Tue mon terminal.Deux fois plus de pixels, 83 octets
Cette approche utilise un bloc Unicode
▄
et une couleur de premier plan et d’arrière-plan aléatoires qui donne un pixel plus carré. Tue mon terminal aussi, mais a l'air plus cool.la source
\e
. Et sur StackExchange cela peut être représenté par␛
.-e
! J'ai également besoin d'augmenter le nombre d'octets de celui avec l'unicode. Oops! Merci pour le rappel!Bash, 104 octets
Les
\e
s sont des caractères d'échappement littéraux.Ce sont en gros des traductions de ma soumission Perl, mais en utilisant une syntaxe de style bombe bombe à la bombe! Pas aussi intelligent que l'autre entrée bash qui écrit directement sur l'écran, j'en ai bien peur.
Plus de pixels, 130 octets
Identique à ma réponse Perl, cela utilise un caractère Unicode pour le premier plan et colorie également l’arrière-plan de chaque pixel.
la source
"\e[48;5;%im"
. Pourquoi les 48 et 5 sont-ils nécessaires?\e[48;2;RRR;GGG;BBBm
mais très peu d'émulateurs de terminaux le prennent en charge ... :(38;5
indique également le premier plan et le48;5
fond de désordre. misc.flogisoft.com/bash/tip_colors_and_formattingLangage machine x86 (mode réel) pour IBM PC,
2019 octetsCela nécessite un processeur avec l'
rdrand
instruction et un adaptateur VGA (réel ou émulé). Ce qui précède peut être copié dans un bloc de démarrage ou un fichier MS-DOS * .COM.Pour essayer ceci, compilez ce qui suit et enregistrez la sortie dans un fichier du type
floppy.img
et démarrez l'image sur une machine virtuelle.la source
Super Chip (48) ?, 12 octets
Je ne suis pas sûr du nom exact, mais je devais utiliser celui-ci au lieu de Chip-8 normal à cause de la limitation de 40x40 pixels.
la source
QBIC , 34 octets
Malheureusement, QBIC ne définit pas de
SCREEN
mode par défaut, ce qui consomme des octets.PSET
est une commande illégale dans le contexte graphique par défaut de QBIC.Explication
Échantillon de sortie
@Anonymous a détecté une erreur dans la
rnd()
fonction de QBIC . Fixation qui donne la sortie ci-dessous. Merci!la source
FUNCTION getRandomNumber! (Bottom!, Top!) ↵ RANDOMIZE TIMER 'this sets the random number generator ↵ IF Bottom > Top THEN ... END IF ↵ getRandomNumber = INT((Top - Bottom + 1) * RND + Bottom) ↵ END FUNCTION
Vos nombres aléatoires ne sont que des hachages de l'heure actuelle.6502 Assembly, 582 bytes
Ouf, c'était amusant. Fait plus ou moins la même chose que ma solution Applesoft BASIC.
la source
Powershell,
128126124 octets-2 octets merci @Veskah
Sortie:
Sortie de code VS:
la source