एक "GitHub" अवतार उत्पन्न करें


31

पृष्ठभूमि / विवरण

नोट: जैसा कि @HelkaHomba बताते हैं, वास्तविक GitHub पहचानकर्ता वास्तव में यादृच्छिक नहीं हैं, लेकिन उपयोगकर्ता नाम के आधार पर

डिफ़ॉल्ट GitHub अवतार एक 5x5-पिक्सेल छवि है। एक रंग को यादृच्छिक रूप से उठाया जाता है, और फिर यादृच्छिक रंग उस रंग का उपयोग करके एक तरफ (दाएं या बाएं, 2x5 आकार) में भरे जाते हैं। फिर उस पक्ष की प्रतिलिपि बनाई जाती है और दूसरी तरफ y- अक्ष में फ़्लिप की जाती है। उस पर छोड़े गए पिक्सल # F0F0F0, या आरजीबी (240,240,240) में नहीं भरे गए हैं।

केंद्र स्तंभ के पिक्सेल (1x5 आकार) को पहले के समान रंग का उपयोग करके यादृच्छिक रूप से भरा जाता है।

उत्पादन

नोट: इस चुनौती के लिए हम GitHub अवतारों को घेरने वाले स्थान की अनदेखी करेंगे

कार्यक्रम को 5x5 पिक्सेल छवि फ़ाइल का उत्पादन करना चाहिए। विशेष के लिए http://meta.codegolf.stackexchange.com/a/9095/42499 देखें

उदाहरण

नोट: ये स्पष्ट रूप से 5x5 से बढ़ाए गए थे ताकि आप उन्हें देख सकें

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

सौभाग्य!


@trichoplax आउटपुट एक 5x5 पिक्सेल छवि है, धन्यवाद। 5x5 पिक्सेल के आसपास के स्थान पर भी ध्यान दें (उदाहरण GitHub अवतारों में दिखाया गया है) को बाहर रखा जाना चाहिए।
MCMastery

5
मैं कुछ छोटे नमूना चित्र सुझाता हूँ। ये आवश्यकता से अधिक स्थान ले लेते हैं। इसके अलावा इनके लिए तकनीकी शब्द "पहचानकर्ता" है और वे वास्तव में यादृच्छिक नहीं हैं, लेकिन उपयोगकर्ता नाम के हैश पर आधारित हैं (लेकिन चुनौती के लिए उन्हें यादृच्छिक होना ठीक है)।
केल्विन के शौक

@HelkaHomba धन्यवाद, मैंने बेहतर उदाहरण जोड़े।
MCMastery

1
मेरा मानना ​​है कि "यादृच्छिक पिक्सेल" का अर्थ है कि प्रत्येक पिक्सेल समान आकार के अन्य सभी पिक्सेल से स्वतंत्र रूप से 0.5 प्रायिकता के साथ रंगीन या रिक्त है। और "यादृच्छिक रंग" का अर्थ है कि प्रत्येक आरजीबी घटक स्वतंत्र रूप से [0, 255] पर समान है। सही बात?
लुइस मेंडो

1
मुझे नहीं लगा कि यह एक वैध उत्तर था क्योंकि यह एक वास्तविक छवि का उत्पादन नहीं करता है, लेकिन मैंने एएनएसआई कोड का उपयोग करके एक कमांड लाइन संस्करण बनाया है: gist.github.com/anonymous/3c879c5b01983a07fb7da7b7d25d778f1b !
डोम हेस्टिंग्स

जवाबों:


12

पायथ - 27 बाइट्स

.wC+Kc3O^Cm,240O256 3 15_PK

स्पष्ट रूप से ऑनलाइन काम नहीं करता है, लेकिन आप इसे यहाँ रंग कोड प्रिंट कर सकते हैं ।


10

पर्ल ५ , 77 बाइट्स

यह गैर-प्रतिस्पर्धात्मक है क्योंकि इसमें केवल 256 रंग का पैलेट है, केवल टर्मिनलों पर काम करता है जो एएनएसआई से बचने के कोड का समर्थन करता है और वास्तव में 5 पिक्सेल वर्ग छवि का उत्पादन नहीं करता है, लेकिन मुझे लगा कि मैं इसे वैसे भी पोस्ट करूंगा क्योंकि यह मजेदार गोल्फिंग था। नीचे।

sub x{"\e[48;5;@{[rand>.5?$-||=rand 254:254]}m  "}say$}=x,$b=x,x,$b,$}for 0..4

नोट:\e वास्तव में ASCII वर्ण है \x1B

प्रयोग

perl -E 'sub x{"\e[48;5;@{[rand>.5?$-||=rand 254:254]}m  "}say$}=x,$b=x,x,$b,$}for 0..4'

व्याख्या

विशेष रूप से चालाक के अलावा कुछ भी नहीं:

  • उपयोग $-एस्केप अनुक्रम में उपयोग के लिए स्वचालित रूप से दौर रंग संख्या के लिए, के बजाय इस्तेमाल किया $n=0|rand 254

उदाहरण आउटपुट

हाँ, आप अपने -boink- टर्मिनल पर, जो भी आखिरी रंग था, उससे चिपके रहेंगे।


9

MATL , 36 29 बाइट्स

5l$rtP+!kllII$r*O16tQ/XE'a'YG

यह फ़ाइल में परिणाम बचाता है a.png

कोड 'a'द्वारा प्रतिस्थापित 2करने से फ़ाइल को सहेजने के बजाय छवि (स्केल की गई) प्रदर्शित होती है:

5l$rtP+!kllII$r*O16tQ/XE2YG

यहाँ एक उदाहरण आउटपुट है:

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

व्याख्या

5l$r     % 5×5 matrix of independent random values with uniform distribution
         % on the interval (0,1)
tP+!     % Duplicate, flip vertically, add, transpose. This gives a horizontally
         % symetric matrix. Center column pixels are uniformly distributed on the 
         % interval (0,2). Rest have a triangular distribution on (0,2)
k        % Round down. In either of the above cases, this gives 0 and 1
         % with the same probability
llII$r   % 1×1×3 array of independent random numbers with uniform distribution
         % on (0,1). This is the foreground color.
*        % Multiply the two arrays with broadcast. Gives a 5×5×3 array. Ones in the
         % 5×5 array become the random foreground color. Zeros remain as zeros.
O        % Push 0
16tQ/    % 16, duplicate, add 1, divide: gives 16/17, or 240/255
XE       % Replace 0 by 16/17: background color
'a'      % Push file name
YG       % Write image to that file

7

दरअसल, 53 बाइट्स

3'≡*;╗`┘#8╙r-J┌`MΣ╝5`3"2rJ└"£n3╟;RdX+Σ`nkΣ"P6 5 5 255

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

वास्तव में स्ट्रिंग प्रसंस्करण में खराब है। मुझे लगता है कि मैंने पहले भी इसका उल्लेख किया है। यह प्रोग्राम निम्न की तरह CP437 का उपयोग करते हुए एक P6 netpbm इमेज को आउटपुट करता है:

P6 5 5 255
εεεεεεå♠ƒεεεεεεå♠ƒå♠ƒεεεå♠ƒå♠ƒεεεεεεεεεεεεεεεεεεεεεå♠ƒεεεεεεå♠ƒå♠ƒå♠ƒå♠ƒå♠ƒ

यह ImageGagick का उपयोग करके PNG में बदला जा सकता है:

seriously -f prog.srs | convert - out.png

PNG संस्करण को स्केल किया गया:

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

स्पष्टीकरण:

3'≡*;╗`┘#8╙r-J┌`MΣ╝5`3"2rJ└"£n3╟;RdX+Σ`nkΣ"P6 5 5 255
3'≡*                                                   push "≡≡≡" (char 240, 3 times)
    ;╗                                                 save a copy to reg0
      `┘#8╙r-J┌`M                                      map:
       ┘#                                                cp437 char code, as list ([240])
         8╙r-J                                           random value in range(2**8) that is not 240
              ┌                                          char code
                 Σ╝                                    concatenate, push to reg1
                   5`3"2rJ└"£n3╟;RdX+Σ`n               do this 5 times:
                     3"2rJ└"£n                           do this 3 times:
                       2rJ└                                randomly pick 0 or 1, push the value in that register
                              3╟                         push the top 3 items to a list
                                ;RdX+                    duplicate, reverse, discard first value, append (mirror the list)
                                     Σ                   concatenate
                                       kΣ              push stack as list, concatenate
                                         "P6 5 5 255   prepend header

क्षमा करें, लेकिन "P6 netpbm" अनुमत छवि स्वरूपों की निर्दिष्ट सूची में नहीं है, इसलिए आपको संभवतः अपने जवाब में ImageMagick कमांड लाइन की लंबाई जोड़ना चाहिए। : /
ज़ीरो


मुझे सही साबित होना है! इस बारे में क्षमा करें, और स्पष्टीकरण के लिए धन्यवाद। ऐसा लगता है कि मुझे छवि प्रारूपों पर कुछ सीखने की ज़रूरत है। :)
ज़ीरो

6

पायथन, 167 164 155 148 बाइट्स

पीपीएम के रूप में आउटपुट

from random import*
print"P3 5 5 255"
C,P=choice,[[240]*3,[randint(0,255)for _ in"RGB"]]
exec"a,b=C(P),C(P);print' '.join(map(str,a+b+C(P)+b+a));"*5
  • Edit1: range(5) से" "*5
  • Edit2: पहले एक बाइट को देखा print
  • Edit3: के साथ प्रतिस्थापित सूची समझ map केवल के बाद सेstr(p) तब से उपयोग की गई है
  • Edit4: exec""*5बजायfor _ in " "*5:

पुराने, स्ट्रिंग-आधारित कोड में कुछ सुधार:

from random import*
print "P3 5 5 255"
j,c,a=' '.join,choice,['']*5
P=["240 "*3,j([str(randint(0,255))for _ in"RGB"])]
for _ in a:a=[c(P)]*5;a[1]=a[3]=c(P);a[2]=c(P);print j(a)

आप हेडर में एक स्थान के साथ newlines की जगह ले कर कुछ बचा सकता है। युक्ति सिर्फ व्हाट्सएप के लिए कॉल करती है। netpbm.sourceforge.net/doc/ppm.html
चक मॉरिस

5

स्विफ्ट 2.3, 593 585 बाइट्स

var t = 0,g = UIGraphicsGetCurrentContext(),c = UIColor(hue:CGFloat(drand48()),saturation:1,brightness:1,alpha:1).CGColor
srand48(time(&t))
UIGraphicsBeginImageContext(CGSizeMake(5,5))
for x in 0..<3 {for y in 0..<5 {CGContextSetFillColorWithColor(g,drand48()>0.5 ? c : UIColor.whiteColor().CGColor)
var r = [CGRect(x:x,y:y,width:1,height:1)]
if x<2 {let m = x==0 ? 4 : 3;r.append(CGRect(x:m,y:y,width:1,height:1))}
CGContextFillRects(g,&r,r.count)}}
let i = UIGraphicsGetImageFromCurrentImageContext()
UIImagePNGRepresentation(i)!.writeToURL(NSURL(string:"/a/a.png")!,atomically:true)

अद्यतन करें

स्विफ्ट 3, 551 बाइट्स

var t = 0,g = UIGraphicsGetCurrentContext()!,c = UIColor(hue:CGFloat(drand48()),saturation:1,brightness:1,alpha:1).cgColor
srand48(time(&t))
UIGraphicsBeginImageContext(CGSize(width:5,height:5))
for x in 0..<3 {for y in 0..<5 {g.setFillColor(drand48()>0.5 ? c : UIColor.white().cgColor)
var r = [CGRect(x:x,y:y,width:1,height:1)]
if x<2 {let m = x==0 ? 4 : 3;r.append(CGRect(x:m,y:y,width:1,height:1))}
g.fill(&r,count: r.count)}}
let i = UIGraphicsGetImageFromCurrentImageContext()!
try!UIImagePNGRepresentation(i)!.write(to: URL(string:"/a/a.png")!)

मैं WWDC में हूं और स्विफ्ट 3 के साथ सिर्फ Xcode 8 बीटा मिला। Apple ने कुछ CoreGraphics कॉल को "Swifty" कहा, और मैं bytecount को कम करने में सक्षम हूं।

स्विफ्ट 2 कोड Ungolfed:

var t = 0
srand48(time(&t))

UIGraphicsBeginImageContext(CGSizeMake(5,5))
let context = UIGraphicsGetCurrentContext()
let color = UIColor(hue: CGFloat(drand48()),saturation:1,brightness:1,alpha:1).CGColor

for x in 0..<3 {
    for y in 0..<5 {
        CGContextSetFillColorWithColor(context, drand48() > 0.5 ? color : UIColor.whiteColor().CGColor)
        var rects = [CGRect(x:x,y:y,width:1,height:1)]

        if x < 2 {
            let mirror = x==0 ? 4 : 3
            rects.append(CGRect(x: mirror, y: y, width: 1, height: 1))
        }

        CGContextFillRects(context, &rects, rects.count)
    }
}


let image = UIGraphicsGetImageFromCurrentImageContext()
UIImagePNGRepresentation(image)!.writeToURL(NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains:.UserDomainMask).first!.URLByAppendingPathComponent("a.png"), atomically:true)

यह उत्तर मानता है कि UIKit उपलब्ध है और कोको टच फ्रेमवर्क का उपयोग करता है।

कुछ उदाहरण आउटपुट चित्र:

1 2 3

मुझे पता है कि मैं अधिकांश अन्य उत्तरों के साथ प्रतिस्पर्धा नहीं कर सकता, लेकिन मैं इसे व्यक्तिगत चुनौती के रूप में शॉट देना चाहता था। इस उत्तर के साथ सुधार के लिए निश्चित रूप से जगह है, लेकिन मुझे लगता है कि UIKit और CoreGraphics की इमेज राइटिंग मेथड नामों की लंबाई के कारण इसे कुछ सौ बाइट्स से नीचे लाना मुश्किल होगा। मैंने अपने लिए एक अभ्यास के रूप में PPM मानों के बजाय एक वास्तविक PNG फ़ाइल लिखने का विकल्प चुना, लेकिन यदि मैंने PPM प्रारूप का उपयोग किया तो छोटे उत्तर निश्चित रूप से संभव होंगे।

मैं पहले से ही बीज के srand48साथ एक चर घोषित करने के लिए एक नुकसान के रूप में बाहर शुरू करते हैं time। मैंने इसे चुना arc4random()या arc4random_uniform()क्योंकि अंततः मैं उन लोगों के साथ अधिक बाइट्स खो देगा। मैं बीज का उपयोग करने के लिए बीजdrand48 यादृच्छिक रंग उत्पन्न करने के करने के और पिक्सेल पर रंग लिखने के ।

CGSizeबनाम CGSizeMakeऔर CGRectबनाम CGRectMake:

मैं इनलाइन सी एपीआई फंक्शंस और उनके स्विफ्ट एक्सटेंशन के बीच स्विच करता हूं ताकि प्रत्येक के लिए सबसे छोटा कंस्ट्रक्टर खोजा जा सके। CGSizeMakeसमाप्त होने से छोटा होता है CGSize(), और CGRectसमाप्त होने से छोटा होता है CGRectMake():

CGSizeMake(5,5)
CGSize(width:5,height:5)

CGRect(x:x,y:y,width:1,height:1)
CGRectMake(CGFloat(x),CGFloat(y),1,1)

मुझे CGFloats xऔर बनाना होगाy पाश के लिए की प्रकृति के कारण। मैं वास्तव में 2D लूप से रोमांचित नहीं हूं और अगर समानता की जांच होती है, लेकिन मैं वास्तव में एक छोटा रास्ता खोजने के लिए संघर्ष कर रहा था। यहाँ कुछ बाइट्स शेव करने के लिए निश्चित रूप से कमरा है।

दो अलग-अलग मूल्यों के साथ दो बार कॉल करने की तुलना में CGContextFillRectsएक सरणी के साथ कॉल करना CGRectसस्ता है CGContextFillRect, इसलिए मैं सरणी और पॉइंटर के साथ कुछ बाइट्स बचाता हूं।

मैं कॉल न करके 27 बाइट भी बचा लेता हूं UIGraphicsEndImageContext()। हालांकि यह आम तौर पर उत्पादन कोड में "बग" होगा, यह इस खिलौना कार्यक्रम के लिए आवश्यक नहीं है।

रंग की:

रंग भी एक दर्द से निपटने के लिए हैं, क्योंकि मैं UIColorऑब्जेक्ट्स बना रहा हूं, लेकिन CGColorप्रत्येक पिक्सेल को एक अपारदर्शी प्रकार लिखने की आवश्यकता है । एक यादृच्छिक रंग बनाने के लिए मैंने जो सबसे छोटा कोड पाया, वह था UIColorकंस्ट्रक्टर का उपयोग करना और उसी CGColorसे प्राप्त करना UIColor। सफेद के साथ भी। अगर मैं कोकोआ टच के बजाय कोको फ्रेमवर्क का उपयोग कर रहा था, तो मैं कुछ बाइट्स का उपयोग करके बचा सकता हूं CGColorGetConstantColor(), लेकिन दुर्भाग्य से कोको टच एसडीके में यह विधि अनुपलब्ध है।

फाइल करने के लिए लेखन:

किसी फ़ाइल में लिखना लगभग 100 बाइट्स लेता है। मुझे यकीन नहीं है कि कैसे भी इस बारे में अनुकूलन किया जा सकता है। आपकी अनुमति के आधार पर कुछ प्रणालियों पर, आपको दस्तावेज़ निर्देशिका का उपयोग करने की आवश्यकता हो सकती है जो कि अधिक लंबी होगी:

UIImagePNGRepresentation(i)!.writeToURL(NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains:.UserDomainMask).first!.URLByAppendingPathComponent("a.png"), atomically:true)

निश्चित रूप से आगे अनुकूलन के लिए खुला।

संपादित करें 1: कुछ चर घोषणाओं को पुनर्व्यवस्थित करके कुछ बाइट्स को बचाया।


5

गणितज्ञ, 105 102 98 94 बाइट्स

c=1~RandomReal~3;r@l_:={c,4{4,4,4}/17}~RandomChoice~{l,5};Image[Join[#,r@1,Reverse@#]&@r@2]

गणितज्ञ ग्राफिक्स

है पक्षांतरित ऑपरेटर

1 संपादित करें: 3 बाइट्स को Round+ के RandomRealसाथ बदलकर सहेजा गयाRandomInteger

संपादित करें 2: की जगह 4 बाइट सहेजा RandomIntegerसाथRandomChoice

संपादित 3: 4 बाइट्स को बदलकर RandomColorऔर के GrayLevelसाथ सहेजा गयाRandomReal


4

MATLAB, 102 बाइट्स

नमस्ते, यह मेरा matlab समाधान है:

p=@(x)(imwrite(floor(randi(2,5,2)*[eye(2) ones(2,1)./2 fliplr(eye(2))]),[0.9412*[1 1 1];rand(1,3)],x))

xफ़ंक्शन का इनपुट आउटपुट फ़ाइल का नाम है। उदाहरण के लिए:

p('output.png')

एक png छवि बनाता है जिसे 'output.png' कहा जाता है।

यहां इस कोड के कुछ निष्पादन के परिणाम हैं।

output1.png output2.png output3.png output4.png


3

डायलॉग एपीएल, 43 42 बाइट्स

'P3',5 5 256,∊(3⍴240)(?3⍴256)[⌈(⊢+⌽)?5 5⍴0]

'P3',5 5a,∊(3⍴240)(?3⍴a←256)[⌈(⊢+⌽)?5 5⍴0]

दाएं से बाएं:

?5 5⍴00 और 1 के बीच यादृच्छिक संख्याओं का 5 × 5 मैट्रिक्स उत्पन्न करता है ( लेकिन कभी 0 या 1 नहीं )

(⊢+⌽) एक ट्रेन है जो मैट्रिक्स को उसके प्रतिबिंब के साथ जोड़ती है

छत, प्रत्येक तत्व के लिए 1 या 2 देता है

(3⍴240)(?3⍴256) रंग - सफेद-ईश और एक यादृच्छिक

[ ] मैट्रिक्स के प्रत्येक तत्व को रंगों में एक सूचकांक के रूप में उपयोग करें

'P3',5 5 256,∊ समतल करें और शीर्ष लेख जोड़ें


2

PHP, 236 बाइट्स

मैं जानता हूं कि यह एक पुरानी चुनौती है लेकिन मैं खुद को चुनौती देना पसंद करता हूं।

$o=imagecreate(5,5);$t=imagecolorallocate;$r=rand;for($c=[$t($o,240,240,240),$t($o,$r(0,255),$r(0,255),$r(0,255))];$y++<5;)for($x=-2,$a=[];$x<3;)imagesetpixel($o,$x+2,$y,isset($a[$v=abs($x++)])?$a[$v]:($a[$v]=$c[$r(0,1)]));imagepng($o);

Ungolfed:

// Store these frequently used functions
$t=imagecolorallocate;
$r=rand;

// Create 5x5 image
$o=imagecreate(5, 5);

// Define array of the possible colors
$c=[$t($o,240,240,240),$t($o,$r(0,255),$r(0,255),$r(0,255))];

// Loop over y axis
for($y=0;$y++<5;) {

    // This stores values for colors used in the current row indexed by the absolute value of x starting from -2
    $a = [];

    // Loop over x axis
    for($x=-2;$x<3;) {

        // Set a pixel of a random color for current coordinate. If it exists in the array, use the array value.
        imagesetpixel($o,$x+2,$y, isset($a[$v=abs($x++)]) ? $a[$v] : ($a[$v]=$c[rand(0,1)]) );
    }     

    // Empty the array
    $a = [];
}

// Output as PNG
imagepng($o);

नमूना आउटपुट:

गीथूब अवतार

गीथूब अवतार


2

जावास्क्रिप्ट ईएस 6, 296 बाइट्स

नोट: एक फ़ाइल का उत्पादन नहीं करता है, एक कैनवास पर खींचता है।

इसे इस जेएस फिडेल में एक्शन में देखें ।

s=20;W='#fff';M=Math;R=M.random;ctx=document.getElementById('c').getContext('2d');cr=`#${M.floor(R()*16777215).toString(16).slice(0,3)}`;f=Array(5).fill();a=f.map((_,i)=>f.map((_,j)=>R()*2|0));a.map((c,x)=>c.map((v,y)=>{ctx.fillStyle=y>=3?c[y==3?1:0]?cr:W:c[y]?cr:W;ctx.fillRect(y*s,x*s,s,s);}));

साइट पर आपका स्वागत है! :)
DJMcMayhem

इसे चलाने के बाद कुछ समय बाद यह उत्पन्न हुआ इस शीर्ष छोड़ दिया में एक भी काला पिक्सेल, और कुछ नहीं - दो बार। यकीन नहीं तो यह कोड या फिडेल के साथ एक समस्या है।
FlipTack

सही - यादृच्छिक हेक्स मूल्य उत्पन्न करने के लिए कोड छोटी गाड़ी थी। जवाब में लिंक अपडेट किया!
पियरलो अपिटअप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.