随机像素戳


20

您的任务很简单:编写一个程序,用白色像素替换黑色16px * 8px矩形(宽度乘高度)中的随机像素。

孔必须均匀一致,并且您应该输出插入了白色像素的16px x 8 px图像。

每列仅替换1个像素(总共16个替换像素)

您不做任何输入,也不能依赖存储在计算机其他位置的图像。

这是因此字节数最短的程序将获胜!


1
多次执行程序时输出是否应该更改?
昆汀

@Quentin是的,应该
GracefulLemming

Answers:


7

MATL15 14 13字节

8tE2$r&S1=3YG

示例(在MATLAB上运行MATL编译器):

在此处输入图片说明

或在MATL Online上尝试(如果它不是第一次运行,请再次按“运行”或刷新页面)。请注意,图像由在线解释器缩放以实现更好的可视化。

这是我的Octave / MATLAB答案的端口(请参阅此处的说明)。以下是等效的语句:

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

6

Pyth- 16 15字节

将图像输出到o.png

.wCm.S+255mZ7y8

示例图片:


3

八度/ MATLAB,48 37 35字节

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

示例(在八度音阶上):

在此处输入图片说明

说明

           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,85100字节

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

PGM图像文件写入stdout(使用调用prog >out.pgm)。

脱节并解释:

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

更新:

  • OP已阐明输出应随每次执行而更改,丢失15个字节至srand(time(0)):(

3

处理中,74 73字节

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

样本输出:

在此处输入图片说明

说明

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个字节

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

这是一个完整程序,将netpbm格式的图像输出到stdout。

样本输出:

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个字节

这将生成写入标准输出的PBM文件。

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

在线尝试!

说明

前三行构成随机数生成器,在游戏场的第十行中存储16个随机的3位数字(即0-7范围内)。第四行写出PBM标头,然后最后一行生成图像的像素。这是通过在输出像素时递减16个随机数来完成的-当对应于特定列的数字达到零时,我们输出1而不是0。

样本输出(缩放):

样品输出


1

Mathematica,77个 60字节

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

样本输出

在此处输入图片说明

说明

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

为每列制定替换规则;将随机选择的职位替换为1。

... ~SparseArray~{8,16}

SparseArray根据替换规则创建尺寸为8x16的。0默认情况下是背景。(8x16,因为Mathematica首先计算行数)

Image[ ... ]

将转换SparseArrayImage对象。

77字节版本

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

1

HTML + JavaScript,148个字节

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个字节

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

使用包png输出到文件。
输出示例:

在此处输入图片说明


0

QBasic,59个字节

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

非常简单。-.5之所以需要,是因为PSET非整数参数使用最近舍入而不是使用floor或truncate(并且-.5比短INT())。

有问题的图像显示在输出窗口的左上角。一个(裁剪的)示例:16个随机点


0

Java,(字节是否重要,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();}

因为坐标系统包括框架窗口窗格而x=50显得有些呆滞...因此,您需要缓冲至少26个字节,否则将不显示任何内容,因此该位就不会出现。


我知道已经有一段时间了,但是您可以将其压缩到238个字节:(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();}所做的更改:静态删除; Java 8 lambda;int删除了一些;i=16重用;将内容放入for循环中以删除括号和;
Kevin Cruijssen

0

后记(65个字节)

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

非高尔夫版本:

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个字节

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

0

Chip-8,12个字节

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

在屏幕上绘制图像。


0

Tcl / Tk,163

两种不同的方法呈现相同的字节范围:

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

在此处输入图片说明


0

VBA Excel,86105字节

使用即时窗口

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

不幸的是,此解决方案无法像Excel VBA像素艺术解决方案所要求的那样使活动表的单元格方形化-一种更有效的解决方案是Cells.RowHeight=42:[A1:P8].Interior.Color=0:For x=0To 15:[A1].Offset(Rnd*7,x).Interior.Color=-1:Next
Taylor Scott

啊是的我忘了 我记得我是手动调整的。谢谢:)
取消删除

(并且您可以使用- -1而不是vbWhite- 这里的完整说明)
Taylor Scott
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.