Pixel aléatoire poussant

20

Votre tâche est simple: écrire un programme qui remplacera des pixels aléatoires dans un rectangle noir 16px * 8px (largeur par hauteur) par un pixel blanc.

Les trous doivent être uniformément aléatoires et vous devez sortir l'image 16px par 8 px avec les pixels blancs insérés.

Remplacez seulement 1 pixel par colonne (16 pixels remplacés au total)

Vous ne prenez aucune entrée et vous ne pouvez pas compter sur l'image stockée ailleurs sur l'ordinateur.

Il s'agit de donc le programme avec le plus petit nombre de victoires!

GracefulLemming
la source
1
La sortie doit-elle changer lors de l'exécution du programme plusieurs fois?
Quentin
@Quentin yes it should
GracefulLemming

Réponses:

7

MATL , 15 14 13 octets

8tE2$r&S1=3YG

Exemple (avec le compilateur MATL exécuté sur MATLAB):

entrez la description de l'image ici

Ou essayez-le sur MATL Online! (S'il ne s'exécute pas la première fois, appuyez à nouveau sur "Exécuter" ou actualisez la page). Notez que l'image est mise à l'échelle par l'interpréteur en ligne pour une meilleure visualisation.

Il s'agit d'un portage de ma réponse Octave / MATLAB (voir l'explication ici). Voici les déclarations équivalentes:

MATL        Octave / MATLAB
----        ---------------
8tE         8,16
2$r         rand(...)
&S          [~,out]=sort(...)
1=          ...==1 
3YG         imshow(...)
Luis Mendo
la source
6

Pyth - 16 15 octets

Sort l'image vers o.png.

.wCm.S+255mZ7y8

Exemple d'image:

Maltysen
la source
3

Octave / MATLAB, 48 37 35 octets

[~,z]=sort(rand(8,16));imshow(z==1)

Exemple (sur Octave):

entrez la description de l'image ici

Explication

           rand(8,16)                  % 8×16 matrix of random values with uniform
                                       % distribution in (0,1)
[~,z]=sort(          );                % Sort each column, and for each output the
                                       % indices of the sorting. This gives an 8×16
                                       % matrix where each column contains a random
                                       % permutation of the values 1,2,...,8 
                              z==1     % Test equality with 1. This makes all values 
                                       % except 1 equal to 0
                       imshow(    )    % Show image, with grey colormap
Luis Mendo
la source
3

C, 85100 octets

main(c){char a[138]="P5 16 8 1 ";for(srand(time(0)),c=17;--c;a[9+c+(rand()&112)]=1);write(1,a,138);}

Écrit un fichier image PGM sur stdout (appelez-le avec prog >out.pgm).

Non golfé et expliqué:

main(c) {
    // A buffer large enough to contain the whole image,
    // pre-filled with the PGM header.
    // This is a binary greyscale (P5) image with only two levels (1),
    // Because a binary bitmap would require pixel packing.
    char a[138] = "P5 16 8 1 ";

    // c iterates from 16 to 1 over the columns
    for(
        srand(time(0)), c = 17;
        --c;

        // (rand() % 8) * 16 is equivalent to (rand() & 7) << 4
        // Since all bits are equally random, this is equivalent
        // to rand() & (7 << 4), that is rand() & 112.
        // This picks a pixel from the first column, which is then
        // offset to the correct column by c - 1 + 10
        // (10 is the length of the header).
        a[9 + c + (rand() & 112)] = 1
    )
        ; // Empty for body

    // Write the whole buffer to stdout
    write(1,a,138);
}

Mises à jour:

  • OP a précisé que la sortie devrait changer à chaque exécution, perdu 15 octets à srand(time(0))( :()
Quentin
la source
3

Traitement, 74 73 octets

fill(0);rect(0,0,15,7);stroke(-1);for(int i=0;i<16;)point(i++,random(8));

Exemple de sortie:

entrez la description de l'image ici

Explication

fill(0);               //sets the fill colour to black
rect(0,0,15,7);        //draws a 16*8 black rectangle
stroke(-1);            //set stroke colour to white
for(int i=0;i<16;)     // for-loop with 16 iterations
 point(i++,random(8)); //  draw a point at x-coordinate i and a random y coordinate
                       //  the colour of the point is white since that is the stroke colour
Kritixi Lithos
la source
2

Rubis, 61 octets

puts'P116 8';puts Array.new(16){[*[1]*7,0].shuffle}.transpose

Il s'agit d'un programme complet qui génère l'image au format netpbm sur stdout.

Exemple de sortie:

puts'P116 8';   # output the netpbm header (P1 for black and white, 16x8)
puts            # then output the data as follows:
Array.new(16){  # make a 16-element array and for each element,
[*[1]*7,0]      # generate the array [1,1,1,1,1,1,1,0] (1=black 0=white)
.shuffle}       # shuffle the array
.transpose      # transpose the rows/columns of the 2d array (so that each column
                # has one white pixel)
Poignée de porte
la source
2

Befunge, 90 octets

Cela génère un fichier PBM écrit sur stdout.

>030#v_\2*>>?1v
:v9\$<^!:-1\<+<
|>p1+:78+`!
>"P",1..8.28*8*v
.1-\88+%9p:!#@_>1-::88+%9g:!!

Essayez-le en ligne!

Explication

Les trois premières lignes composent le générateur de nombres aléatoires, stockant 16 nombres aléatoires de 3 bits (c'est-à-dire dans la plage 0-7) sur la dixième ligne du champ de jeu. La ligne quatre écrit l'en-tête PBM, et la dernière ligne génère ensuite les pixels de l'image. Cela se fait en comptant les 16 nombres aléatoires lors de la sortie des pixels - lorsque le nombre correspondant à une colonne particulière atteint zéro, nous émettons un 1 plutôt qu'un 0.

Exemple de sortie (zoomée):

Exemple de sortie

James Holderness
la source
1

Mathematica, 77 60 octets

Image[{RandomInteger@7+1,#}->1&~Array~16~SparseArray~{8,16}]

Exemple de sortie

entrez la description de l'image ici

Explication

{RandomInteger@7+1,#}->1&~Array~16

Établissez des règles de remplacement pour chaque colonne; remplacer une position sélectionnée au hasard par 1.

... ~SparseArray~{8,16}

Créez un SparseArrayavec une taille 8x16 à partir des règles de remplacement. L'arrière-plan est 0par défaut. (8 x 16 car Mathematica compte d'abord les lignes)

Image[ ... ]

Convertissez le SparseArrayen un Imageobjet.

Version 77 octets

ReplacePixelValue[Image@(a=Array)[0&~a~16&,8],{#,RandomInteger@7+1}->1&~a~16]
JungHwan Min
la source
1

HTML + JavaScript, 148 octets

c=O.getContext`2d`;for(x=16;x--;){r=Math.random()*8|0;for(y=8;y--;)c.fillStyle=y-r?'#000':'#fff',c.fillRect(x,y,1,1)}
<canvas id=O width=16 height=8>

Washington Guedes
la source
0

R, 76 octets

a=matrix(0,8,16);for(i in 1:16)a[sample(1:8,1),i]=1;png::writePNG(a,'a.png')

Utilise le package pngpour sortir dans un fichier.
Exemple de sortie:

entrez la description de l'image ici

plannapus
la source
0

QBasic, 59 octets

RANDOMIZE TIMER
SCREEN 9
FOR x=0TO 15
PSET(x,RND*8-.5)
NEXT

Assez simple. Le -.5est nécessaire car PSETavec des arguments non entiers, il utilise l'arrondi au plus proche au lieu de floor ou truncate (et -.5est plus court que INT()).

L'image en question est affichée dans le coin supérieur gauche de la fenêtre de sortie. Un exemple (recadré):16 points aléatoires

DLosc
la source
0

Java, ( cela importe-t-il même les octets, importation AKA 244 + 18 = 262)

import java.awt.*;static void l(){new Frame(){public void paint(Graphics g){int x=50;int i=16;g.setColor(Color.BLACK);g.fillRect(x,x,16,8);g.setColor(Color.WHITE);for(;i>0;i--){int y=(int)(Math.random()*8);g.drawLine(x+i,x+y,x+i,x+y);setVisible(1>0);}}}.show();}

Était bizarre parce que le système de coordonnées comprend le volet de la fenêtre de trame ... Vous devez donc mettre en mémoire tampon au moins 26 octets ou rien ne s'affiche, d'où le x=50bit.

Urne de poulpe magique
la source
Je sais que ça fait longtemps, mais vous pouvez le jouer à 238 octets: import java.awt.*;v->{new Frame(){public void paint(Graphics g){int x=50,i=16,y;g.setColor(Color.BLACK);g.fillRect(x,x,i,8);for(g.setColor(Color.WHITE);i>0;g.drawLine(x+i,x+y,x+i--,x+y),setVisible(1>0))y=(int)(Math.random()*8);}}.show();}(Modifications apportées: statique supprimé; Java 8 lambda; certains intsupprimés; i=16réutilisés; mettez des choses dans la boucle for pour supprimer les crochets et ;)
Kevin Cruijssen
0

Postscript (65 octets)

0 0íkà0ícà8íc0 8ícííB1à1íù16{0 randàíj0.5í©ík1 0íÖíß1 0í≠}íÉ

Version non golfée:

0 0 moveto
16 0 lineto
16 8 lineto
0 8 lineto
closepath
fill
1 1 1 setrgbcolor
16{0 rand 16 mod 0.5 sub moveto 1 0 rlineto stroke 1 0 translate}repeat
goose121
la source
0

SmileBASIC, 30 octets

FOR I=0TO 15GPSET I,RND(8)NEXT
12Me21
la source
0

Puce-8, 12 octets

0xA201 'Load sprite at address 201 (which is the second byte of this instruction)
0xC007 'Set register 0 to a random number from 0 to 7 (rnd & 0x7)
0xD101 'Draw sprite. x = register 1, y = register 0, height = 1
0x7101 'Add 1 to register 1
0x3110 'If register 1 is not 16...
0x1202 'Jump to second instruction

Dessine l'image à l'écran.

12Me21
la source
0

Tcl / Tk, 163

Deux approches différentes rendent le même octet:

grid [canvas .c -w 16 -he 8 -bg #000 -highlightt 0]
.c cr i 8 4 -i [set p [image c photo -w 16 -h 8]]
set x 0
time {$p p #FFF -t $x [expr int(rand()*8)];incr x} 16

grid [canvas .c -w 16 -he 8 -bg #000 -highlightt 0]
.c cr i 8 4 -i [set p [image c photo -w 16 -h 8]]
time {$p p #FFF -t [expr [incr x]-1] [expr int(rand()*8)]} 16

entrez la description de l'image ici

sergiol
la source
0

VBA Excel, 86 105 octets

en utilisant la fenêtre immédiate

Cells.RowHeight=42:[a1:p8].interior.color=0:for x=0to 15:[a1].offset(rnd*7,x).interior.color=vbwhite:next
remoel
la source
Cette solution ne fait malheureusement pas le carré des cellules de la feuille active, comme cela est requis pour les solutions pixel art Excel VBA - Une solution plus valable seraitCells.RowHeight=42:[A1:P8].Interior.Color=0:For x=0To 15:[A1].Offset(Rnd*7,x).Interior.Color=-1:Next
Taylor Scott
ah oui j'ai oublié. Je me souviens l'avoir ajusté manuellement. Merci :)
remoel
(et vous pouvez utiliser -1au lieu de vbWhite- explication complète des raisons ici )
Taylor Scott