Random Pixel Poking


20

Ihre Aufgabe ist einfach: Schreiben Sie ein Programm, das zufällige Pixel in einem schwarzen Rechteck von 16 x 8 Pixel (Breite x Höhe) durch weiße Pixel ersetzt.

Die Löcher müssen gleichmäßig zufällig sein, und Sie sollten das 16 x 8 Pixel große Bild mit den eingefügten weißen Pixeln ausgeben.

Ersetzen Sie nur 1 Pixel pro Spalte (insgesamt 16 ersetzte Pixel)

Sie nehmen keine Eingaben vor und können sich nicht darauf verlassen, dass das Bild an anderer Stelle auf dem Computer gespeichert wird.

Dies ist also gewinnt das Programm mit dem kürzesten bytecount!


1
Sollte sich die Ausgabe ändern, wenn das Programm mehrmals ausgeführt wird?
Quentin

@ Quentin ja, sollte es
GracefulLemming

Antworten:


7

MATL , 15 14 13 Bytes

8tE2$r&S1=3YG

Beispiel (mit MATL-Compiler unter MATLAB):

Bildbeschreibung hier eingeben

Oder probieren Sie es bei MATL Online! (Wenn es nicht zum ersten Mal ausgeführt wird, klicken Sie erneut auf "Ausführen" oder aktualisieren Sie die Seite). Beachten Sie, dass das Bild zur besseren Visualisierung vom Online-Interpreter skaliert wird.

Dies ist ein Port meiner Octave / MATLAB-Antwort (siehe Erklärung dort). Hier sind die äquivalenten Aussagen:

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

6

Pyth - 16 15 Bytes

Gibt das Bild an aus o.png.

.wCm.S+255mZ7y8

Beispielbild:


3

Octave / MATLAB, 48 37 35 Bytes

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

Beispiel (auf Oktave):

Bildbeschreibung hier eingeben

Erläuterung

           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

3

C 85 100 Bytes

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);}

Schreibt eine PGM- Image-Datei nach stdout (ruft sie mit auf prog >out.pgm).

Ungolfed und erklärte:

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);
}

Aktualisierung:

  • OP hat klargestellt, dass sich die Ausgabe bei jeder Ausführung ändern soll, verlor 15 Bytes an srand(time(0))( :()

3

Verarbeitung, 74 73 Bytes

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

Beispielausgabe:

Bildbeschreibung hier eingeben

Erläuterung

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

2

Ruby, 61 Bytes

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

Dies ist ein vollständiges Programm, das das Bild im Netpbm-Format an stdout ausgibt.

Beispielausgabe:

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)

2

Befunge, 90 Bytes

Dies erzeugt eine PBM-Datei, die in stdout geschrieben wird.

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

Probieren Sie es online!

Erläuterung

Die oberen drei Zeilen bilden den Zufallszahlengenerator und speichern 16 zufällige 3-Bit-Zahlen (dh im Bereich von 0 bis 7) in der zehnten Zeile des Spielfelds. Zeile vier schreibt den PBM-Header aus, und die letzte Zeile generiert dann die Pixel des Bildes. Dies geschieht, indem die 16 Zufallszahlen bei der Ausgabe der Pixel heruntergezählt werden. Wenn die einer bestimmten Spalte entsprechende Zahl Null erreicht, geben wir statt einer 0 eine 1 aus.

Beispielausgabe (gezoomt):

Beispielausgabe


1

Mathematica, 77 60 Bytes

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

Beispielausgabe

Bildbeschreibung hier eingeben

Erläuterung

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

Erstellen Sie Ersetzungsregeln für jede Spalte. Ersetzen Sie eine zufällig ausgewählte Position durch 1.

... ~SparseArray~{8,16}

Erstellen SparseArraySie aus den Ersetzungsregeln eine mit der Größe 8x16. Der Hintergrund ist 0standardmäßig. (8x16, weil Mathematica zuerst die Zeilen zählt)

Image[ ... ]

Wandeln Sie die SparseArrayin ein ImageObjekt.

77-Byte-Version

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

1

HTML + JavaScript, 148 Bytes

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>


0

R, 76 Bytes

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

Verwendet das Paket pngzur Ausgabe in eine Datei.
Beispielausgabe:

Bildbeschreibung hier eingeben


0

QBasic, 59 Bytes

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

Ziemlich einfach. Das -.5wird benötigt, weil PSETbei nicht ganzzahligen Argumenten anstelle von Floor oder Truncate Round-to-Nearest verwendet wird (und -.5kürzer ist als INT()).

Das betreffende Bild wird in der oberen linken Ecke des Ausgabefensters angezeigt. Ein (beschnittenes) Beispiel:16 zufällige Punkte


0

Java, ( Ist es überhaupt wichtig, Bytes, AKA 244 + 18-Import = 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();}

War wackelig, weil das Koordinatensystem die Rahmenfensterscheibe enthält ... Sie müssen also mindestens 26 Bytes puffern, oder es wird nichts angezeigt, daher das x=50Bit.


Ich weiß, es ist schon eine Weile her, aber Sie können es auf 238 Bytes golfen: 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();}(Änderungen vorgenommen: statisch entfernt; Java 8 Lambda; einige ints entfernt; i=16wiederverwendet; Dinge in die for-Schleife legen, um Klammern zu entfernen und ;)
Kevin Cruijssen

0

Postscript (65 Bytes)

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

Ungolfed-Version:

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

0

SmileBASIC, 30 Bytes

FOR I=0TO 15GPSET I,RND(8)NEXT

0

Chip-8, 12 Bytes

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

Zeichnet das Bild auf dem Bildschirm.


0

Tcl / Tk, 163

Zwei verschiedene Ansätze rendern im selben Byteumfang:

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

Bildbeschreibung hier eingeben


0

VBA Excel, 86 105 Bytes

mit sofortigem Fenster

Cells.RowHeight=42:[a1:p8].interior.color=0:for x=0to 15:[a1].offset(rnd*7,x).interior.color=vbwhite:next

Diese Lösung leider nicht macht die Zellen des Active Platzes, wie erforderlich ist , Excel VBA Pixel - Art - Lösungen - Eine gültige Lösung wäreCells.RowHeight=42:[A1:P8].Interior.Color=0:For x=0To 15:[A1].Offset(Rnd*7,x).Interior.Color=-1:Next
Taylor Scott

ah ja ich habe es vergessen Ich erinnere mich, dass ich es manuell eingestellt habe. Danke :)
Remoel

(und Sie können -1anstelle von vbWhite- vollständige Erklärung, warum hier )
Taylor Scott
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.