रैंडम पिक्सेल पोकिंग


20

आपका कार्य सरल है: एक प्रोग्राम लिखें जो यादृच्छिक पिक्सल को एक काले 16px * 8px आयत (ऊंचाई द्वारा चौड़ाई) को एक सफेद पिक्सेल के साथ बदल देगा।

छेद समान रूप से यादृच्छिक होना चाहिए, और आपको सफेद पिक्सेल के साथ 16 पीएक्स 8 पीएक्स छवि को आउटपुट करना चाहिए।

प्रति कॉलम केवल 1 पिक्सेल बदलें (16 कुल प्रतिस्थापित पिक्सेल)

आप कोई इनपुट नहीं लेते हैं, और आप कंप्यूटर पर कहीं और संग्रहीत की जा रही छवि पर भरोसा नहीं कर सकते।

यह इसलिए सबसे कम बायटेकाउंट जीत के साथ कार्यक्रम!


1
कार्यक्रम को कई बार निष्पादित करते समय आउटपुट में बदलाव होना चाहिए?
क्वेंटिन

@Quentin हाँ यह होना चाहिए
GracefulLemming

जवाबों:


7

MATL , 15 14 13 बाइट्स

8tE2$r&S1=3YG

उदाहरण (MATLAB पर चलने वाले MATL संकलक के साथ):

यहां छवि विवरण दर्ज करें

या इसे MATL ऑनलाइन पर आज़माएं! (यदि यह पहली बार नहीं चलता है, तो "रन" फिर से दबाएं या पृष्ठ को ताज़ा करें)। ध्यान दें कि छवि बेहतर दृश्य के लिए ऑनलाइन दुभाषिया द्वारा मापी गई है।

यह मेरे ऑक्टेव / MATLAB उत्तर का पोर्ट है (स्पष्टीकरण देखें)। यहाँ बराबर कथन दिए गए हैं:

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

6

पायथ - 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

सी, 85 100 बाइट्स

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

अपडेट:

  • ओपी ने स्पष्ट किया है कि आउटपुट को प्रत्येक निष्पादन के साथ बदलना चाहिए, 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

रूबी, 61 बाइट्स

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

यह एक पूर्ण कार्यक्रम है जो netpbm प्रारूप में छवि को स्टडआउट करने के लिए आउटपुट करता है।

नमूना उत्पादन:

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 बाइट्स

यह एक पीबीएम फ़ाइल को उत्पन्न करने के लिए लिखा गया है।

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

इसे ऑनलाइन आज़माएं!

व्याख्या

शीर्ष तीन पंक्तियाँ यादृच्छिक संख्या जनरेटर बनाती हैं, जो प्लेफील्ड की दसवीं पंक्ति पर 16 यादृच्छिक 3-बिट संख्या (यानी रेंज 0-4 में) का भंडारण करती है। लाइन चार पीबीएम हैडर लिखता है, और अंतिम पंक्ति तब छवि के पिक्सल उत्पन्न करती है। यह 16 यादृच्छिक संख्याओं की गणना करके किया जाता है क्योंकि पिक्सेल आउटपुट होते हैं - जब किसी विशेष कॉलम के अनुरूप संख्या शून्य तक पहुंच जाती है तो हम 0 के बजाय 1 आउटपुट करते हैं।

नमूना आउटपुट (ज़ूम किया हुआ):

नमूना उत्पादन


1

गणितज्ञ, 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 क्योंकि गणितज्ञ पहले पंक्तियों को गिनते हैं)

Image[ ... ]

रूपांतरित करें SparseArrayएक Imageवस्तु में ।

77 बाइट संस्करण

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


0

आर, 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गैर पूर्णांक तर्क के साथ (और गोल करने के लिए निकटतम बजाय फर्श या truncate का उपयोग करता है -.5की तुलना में है कम INT())।

विचाराधीन चित्र आउटपुट विंडो के ऊपरी बाएँ कोने पर प्रदर्शित होता है। ए (फसली) उदाहरण:16 बेतरतीब डॉट्स


0

जावा, ( क्या यह बाइट्स भी मायने रखता है , 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();}

विजयी था क्योंकि समन्वय प्रणाली में फ़्रेम विंडो फलक शामिल है ... इसलिए आपको कम से कम 26 बाइट्स से बफर करने की आवश्यकता है या कुछ भी नहीं दिखाता है, इसलिए x=50बिट।


मुझे पता है कि यह एक समय हो गया है, लेकिन आप इसे 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();}(किए गए परिवर्तन: स्थिर हटाए गए; जावा 8 लैम्ब्डा; कुछ intहटाए गए; i=16पुन: उपयोग किए गए, कोष्ठक को हटाने के लिए फॉर-लूप के अंदर चीजें डालते हैं ;) और
केविन क्रूज़स

0

पोस्टस्क्रिप्ट (65 बाइट्स)

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

Ungolfed संस्करण:

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

स्माइलबासिक, 30 बाइट्स

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

0

चिप -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

टीएलसी / टीके, 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 एक्सेल, 86 105 बाइट्स

तत्काल खिड़की का उपयोग कर

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

यह समाधान दुर्भाग्यवश, एक्टीवेट स्क्वायर की कोशिकाओं को नहीं बनाता है, जैसा कि एक्सेल VBA पिक्सेल आर्ट सॉल्यूशंस के लिए आवश्यक है - एक अधिक मान्य समाधान होगाCells.RowHeight=42:[A1:P8].Interior.Color=0:For x=0To 15:[A1].Offset(Rnd*7,x).Interior.Color=-1:Next
टेलर स्कॉट

आह हाँ मैं भूल गया। मुझे याद है कि मैंने इसे मैन्युअल रूप से समायोजित किया था। धन्यवाद :)
रेमोएल

(और आप -1इसके बजाय का उपयोग vbWhiteक्यों कर सकते हैं - यहाँ क्यों की पूरी व्याख्या )
टेलर स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.