Chọc Pixel ngẫu nhiên


20

Nhiệm vụ của bạn rất đơn giản: viết chương trình sẽ thay thế các pixel ngẫu nhiên trong một hình chữ nhật 16px * 8px màu đen (chiều rộng theo chiều cao) bằng pixel trắng.

Các lỗ phải ngẫu nhiên đồng đều và bạn nên xuất hình ảnh 16px x 8 px với các pixel trắng được chèn.

Chỉ thay thế 1 pixel trên mỗi cột (tổng số 16 pixel thay thế)

Bạn không nhận bất kỳ đầu vào nào và bạn không thể dựa vào hình ảnh được lưu trữ ở nơi khác trên máy tính.

Đây là vì vậy chương trình nào có số lần thắng ngắn nhất!


1
Có nên thay đổi đầu ra khi thực hiện chương trình nhiều lần?
Quentin

@Quentin đúng vậy
GracefulLemming

Câu trả lời:


7

MATL , 15 14 13 byte

8tE2$r&S1=3YG

Ví dụ (với trình biên dịch MATL chạy trên MATLAB):

nhập mô tả hình ảnh ở đây

Hoặc dùng thử tại MATL Online!(Nếu nó không chạy lần đầu tiên, nhấn "Chạy" lần nữa hoặc làm mới trang). Lưu ý rằng hình ảnh được thu nhỏ bởi trình thông dịch trực tuyến để hiển thị tốt hơn.

Đây là một cổng của câu trả lời Octave / MATLAB của tôi (xem giải thích ở đó). Dưới đây là các tuyên bố tương đương:

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

6

Pyth - 16 15 byte

Đầu ra hình ảnh để o.png.

.wCm.S+255mZ7y8

Hình ảnh ví dụ:


3

Octave / MATLAB, 48 37 35 byte

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

Ví dụ (trên Octave):

nhập mô tả hình ảnh ở đây

Giải trình

           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 byte

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

Viết một tệp hình ảnh PGM vào thiết bị xuất chuẩn (gọi nó bằng prog >out.pgm).

Ungolfed và giải thích:

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

Cập nhật:

  • OP đã làm rõ rằng đầu ra sẽ thay đổi theo mỗi lần thực thi, mất 15 byte thành srand(time(0))( :()

3

Đang xử lý, 74 73 byte

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

Đầu ra mẫu:

nhập mô tả hình ảnh ở đây

Giải trình

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 byte

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

Đây là một chương trình đầy đủ đưa hình ảnh ở định dạng netpbm thành thiết bị xuất chuẩn.

Đầu ra mẫu:

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 byte

Điều này tạo ra một tệp PBM được ghi vào thiết bị xuất chuẩn.

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

Hãy thử trực tuyến!

Giải trình

Ba dòng trên cùng tạo nên bộ tạo số ngẫu nhiên, lưu trữ 16 số 3 bit ngẫu nhiên (tức là trong phạm vi 0-7) trên dòng thứ mười của sân chơi. Dòng bốn viết tiêu đề PBM và dòng cuối cùng tạo các pixel của hình ảnh. Điều này được thực hiện bằng cách đếm xuống 16 số ngẫu nhiên khi các pixel là đầu ra - khi số tương ứng với một cột cụ thể đạt đến 0, chúng ta xuất ra 1 thay vì 0.

Đầu ra mẫu (phóng to):

Sản lượng mẫu


1

Toán học, 77 60 byte

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

Đầu ra mẫu

nhập mô tả hình ảnh ở đây

Giải trình

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

Tạo quy tắc thay thế cho từng cột; thay thế một vị trí được chọn ngẫu nhiên bằng 1.

... ~SparseArray~{8,16}

Tạo một SparseArraykích thước với kích thước 8x16 từ các quy tắc thay thế. Nền là 0mặc định. (8x16 vì Mathicala đếm hàng trước)

Image[ ... ]

Chuyển đổi SparseArraythành một Imageđối tượng.

Phiên bản 77 byte

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

1

HTML + JavaScript, 148 byte

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 byte

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

Sử dụng gói pngđể xuất ra một tập tin.
Ví dụ đầu ra:

nhập mô tả hình ảnh ở đây


0

QBasic, 59 byte

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

Khá đơn giản. Điều -.5này là cần thiết bởi vì PSETvới các đối số không nguyên sử dụng từ tròn đến gần nhất thay vì sàn hoặc cắt ngắn (và -.5ngắn hơn INT()).

Hình ảnh trong câu hỏi được hiển thị ở góc trên cùng bên trái của cửa sổ đầu ra. Một ví dụ (cắt):16 chấm ngẫu nhiên


0

Java, ( Nó thậm chí không quan trọng Byte, AKA 244 + 18 nhập = 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();}

Rất khó khăn vì hệ thống tọa độ bao gồm khung cửa sổ khung ... Vì vậy, bạn cần đệm ít nhất 26 byte hoặc không có gì hiển thị, do đó x=50bit.


Tôi biết đã được một lúc, nhưng bạn có thể chơi nó tới 238 byte: 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();}(Thay đổi được thực hiện: loại bỏ tĩnh; Java 8 lambda; một số intđã bị xóa; i=16sử dụng lại; đặt mọi thứ vào vòng lặp for để xóa dấu ngoặc và ;)
Kevin Cruijssen

0

Bản ghi (65 byte)

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

Phiên bản bị đánh cắp:

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

Chip-8, 12 byte

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

Vẽ hình ảnh trên màn hình.


0

Tcl / Tk, 163

Hai cách tiếp cận khác nhau biểu hiện ở cùng một phạm vi byte:

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

nhập mô tả hình ảnh ở đây


0

VBA Excel, 86 105 byte

sử dụng cửa sổ ngay lập tức

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

Rất tiếc, giải pháp này không tạo ra các ô của ô vuông hoạt động, như được yêu cầu cho các giải pháp nghệ thuật pixel VBA của Excel - Một giải pháp hợp lệ hơn sẽ làCells.RowHeight=42:[A1:P8].Interior.Color=0:For x=0To 15:[A1].Offset(Rnd*7,x).Interior.Color=-1:Next
Taylor Scott

à vâng tôi quên mất Tôi nhớ tôi đã điều chỉnh nó bằng tay. Cảm ơn :)
làm lại

(và bạn có thể sử dụng -1thay vì vbWhite- giải thích đầy đủ về lý do tại sao ở đây )
Taylor Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.