สร้างอวตาร“ GitHub”


31

พื้นหลัง / คำอธิบาย

หมายเหตุ: เนื่องจาก @HelkaHomba ชี้ให้เห็นตัวตนที่แท้จริงของ GitHub นั้นไม่ใช่การสุ่ม แต่ขึ้นอยู่กับการแฮชของชื่อผู้ใช้

avatar GitHub เริ่มต้นคือภาพขนาด 5x5 พิกเซล สีจะถูกเลือกแบบสุ่มและจากนั้นจะมีการเติมพิกเซลแบบสุ่มในด้านหนึ่ง (ขวาหรือซ้ายขนาด 2x5) โดยใช้สีนั้น จากนั้นด้านนั้นจะถูกคัดลอกและพลิกไปอีกด้านหนึ่งข้ามแกน y พิกเซลที่เหลืออยู่ซึ่งไม่ได้กรอกคือ # F0F0F0 หรือ rgb (240,240,240)

พิกเซลของคอลัมน์กลาง (ขนาด 1x5) จะถูกป้อนแบบสุ่มโดยใช้สีเดียวกันกับก่อนหน้านี้

เอาท์พุต

หมายเหตุ: สำหรับความท้าทายนี้เราจะไม่สนใจพื้นที่ที่ล้อมรอบรูปประจำตัวของ GitHub

โปรแกรมควรส่งไฟล์ภาพขนาด 5x5 พิกเซล ดูhttp://meta.codegolf.stackexchange.com/a/9095/42499สำหรับข้อมูลเฉพาะ

ตัวอย่าง

หมายเหตุ: สิ่งเหล่านี้ถูกย่อขยายจาก 5x5 เพื่อให้คุณเห็นได้

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

โชคดี!


@trichoplax ผลลัพธ์เป็นภาพขนาด 5x5 พิกเซลขอบคุณ นอกจากนี้ควรเว้นช่องว่างรอบ ๆ 5x5 พิกเซล (ที่แสดงในตัวอย่างอวตาร GitHub) ด้วย
MCMastery

5
ฉันขอแนะนำภาพตัวอย่างขนาดเล็กลง สิ่งเหล่านี้ใช้พื้นที่มากเกินความจำเป็น นอกจากนี้ระยะทางเทคนิคเหล่านี้คือ "ไอเดนทิคอน" และพวกเขาจะไม่จริงแบบสุ่ม แต่ขึ้นอยู่กับกัญชาชื่อผู้ใช้ที่ ( แต่มีพวกเขาสุ่มสำหรับความท้าทายเป็นดี)
งานอดิเรกของ Calvin

@HelkaHomba ขอบคุณฉันเพิ่มตัวอย่างที่ดีกว่า
MCMastery

1
ฉันถือว่า "พิกเซลสุ่ม" หมายความว่าแต่ละพิกเซลมีสีหรือว่างเปล่าโดยมีความน่าจะเป็น 0.5 โดยไม่ขึ้นกับพิกเซลอื่น ๆ ที่มีขนาดเท่ากัน และ "สีแบบสุ่ม" หมายถึงส่วนประกอบ RGB แต่ละตัวมีความสอดคล้องกันใน [0, 255] แก้ไข?
Luis Mendo

1
ฉันไม่รู้สึกว่ามันเป็นคำตอบที่ถูกต้องเพราะมันไม่ได้ส่งออกภาพที่แท้จริง แต่ฉันสร้างบรรทัดคำสั่งโดยใช้รหัส ANSI: gist.github.com/anonymous/3c879c5b01983a07fb7da7a25d778f1b !
Dom Hastings

คำตอบ:


12

Pyth - 27 ไบต์

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

เห็นได้ชัดว่าไม่ทำงานออนไลน์, แต่คุณสามารถมีได้พิมพ์รหัสสีที่นี่


10

Perl 5 , 77 ไบต์

นี่ไม่ใช่การแข่งขันเนื่องจากมีจานสี 256 สีใช้งานได้กับเทอร์มินัลที่รองรับรหัสหลบหนี ANSI เท่านั้นและไม่ส่งออกภาพสี่เหลี่ยมจัตุรัสขนาด 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

ตัวอย่างผลลัพธ์

ใช่คุณจะติดอยู่กับอะไรก็ตามสีสุดท้ายคือทั่วทั้งสถานีปลายทางของคุณ


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

ลองออนไลน์!

ที่จริงแล้วการประมวลผลสตริงไม่ดีจริง ๆ ฉันคิดว่าฉันเคยพูดถึงเรื่องนี้มาก่อน โปรแกรมนี้แสดงภาพ P6 netpbm โดยใช้ CP437 ดังต่อไปนี้:

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

สามารถแปลงเป็น PNG โดยใช้ ImageMagick:

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 ลงในคำตอบของคุณ : /
ZeroOne


ฉันยืนแก้ไข! ขออภัยเกี่ยวกับสิ่งนั้นและขอขอบคุณสำหรับการชี้แจง ดูเหมือนว่าฉันต้องเรียนรู้เกี่ยวกับรูปแบบของภาพ :)
ZeroOne

6

Python, 167 164 155 148 ไบต์

เอาต์พุตเป็น ppm

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
  • แก้ไข 1: range(5)ถึง" "*5
  • แก้ไข 2: ผลักไบต์ไปก่อน 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)

คุณสามารถประหยัดได้ไม่กี่รายการโดยแทนที่บรรทัดใหม่ด้วยช่องว่างในส่วนหัว สเป็คเพียงแค่เรียกใช้ช่องว่าง netpbm.sourceforge.net/doc/ppm.html
Chuck Morris

5

Swift 2.3, 593 585 bytes

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)

ปรับปรุง

Swift 3, 551 bytes

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 และเพิ่งได้รับ Xcode 8 beta พร้อม Swift 3 Apple ทำให้ CoreGraphics บางสายเรียก "Swifty" มากขึ้นและฉันสามารถลดจำนวน bytecount ได้

Swift 2 code 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 พร้อมใช้งานและใช้กรอบการทำงาน Cocoa Touch

ตัวอย่างภาพที่ส่งออก:

1 2 3

ฉันรู้ว่าฉันไม่สามารถแข่งขันกับคำตอบอื่น ๆ ส่วนใหญ่ แต่ฉันต้องการที่จะให้ภาพนี้เป็นความท้าทายส่วนบุคคล แน่นอนว่ามีห้องสำหรับการปรับปรุงด้วยคำตอบนี้ แต่ฉันคิดว่ามันยากที่จะลดขนาดลงต่ำกว่าไม่กี่ร้อยไบต์เนื่องจากความยาวของชื่อวิธีการเขียนภาพ UIKit และ CoreGraphics ฉันเลือกที่จะเขียนไฟล์ PNG จริงแทนที่จะเป็นค่า PPM เป็นการออกกำลังกายสำหรับตัวเอง แต่คำตอบที่สั้นกว่านั้นจะเป็นไปได้แน่นอนถ้าฉันใช้รูปแบบ PPM

ฉันแล้วเริ่มต้นเป็นความสูญเสียโดยไม่ต้องประกาศตัวแปรเมล็ดพันธุ์ด้วยsrand48 timeฉันเลือกสิ่งนี้มากกว่าarc4random()หรือarc4random_uniform()เพราะในที่สุดฉันจะเสียจำนวนไบต์ที่มากกว่า ฉันหว่าน rng เพื่อใช้drand48ในการสร้างสีแบบสุ่มและเลือกเวลาที่จะเขียนสีไปยังพิกเซล

CGSizevs CGSizeMakeและCGRectvs CGRectMake:

ฉันสลับระหว่างฟังก์ชั่นอินไลน์ C API และส่วนขยาย Swift เพื่อค้นหาตัวสร้างที่สั้นที่สุดสำหรับแต่ละรายการ 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ด้วยอาร์เรย์ของCGRectstructs นั้นถูกกว่าการโทรCGContextFillRectสองครั้งด้วยสองค่าที่แตกต่างกันดังนั้นฉันจึงประหยัดสองสามไบต์ด้วยอาร์เรย์และตัวชี้

ฉันยังประหยัด 27 UIGraphicsEndImageContext()ไบต์โดยไม่ได้เรียกร้อง แม้ว่าปกติแล้วจะเป็น "บั๊ก" ในรหัสการผลิต แต่ก็ไม่จำเป็นสำหรับโปรแกรมของเล่นนี้

สี:

สีก็เป็นความเจ็บปวดที่ต้องจัดการด้วยเนื่องจากฉันสร้างUIColorวัตถุ แต่ต้องเขียนCGColorชนิดทึบแสงให้แต่ละพิกเซล รหัสที่สั้นที่สุดที่ฉันพบในการสร้างสีสุ่มคือการใช้UIColorตัวสร้างและได้รับจากCGColor UIColorเหมือนกันกับสีขาว หากฉันใช้เฟรมเวิร์ก Cocoa แทน Cocoa Touch ฉันอาจบันทึกบางไบต์ที่ใช้CGColorGetConstantColor()แต่น่าเสียดายที่วิธีนี้ไม่สามารถใช้งานได้ใน Cocoa Touch SDK

เขียนไปยังไฟล์:

การเขียนไฟล์มีขนาดเกือบ 100 ไบต์ ฉันไม่แน่ใจว่าจะทำสิ่งนี้อย่างไรให้เกิดประโยชน์สูงสุด ในบางระบบขึ้นอยู่กับการอนุญาตของคุณคุณอาจต้องใช้ไดเรกทอรีเอกสารซึ่งจะยิ่งนานขึ้น:

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

เปิดแน่นอนเพื่อเพิ่มประสิทธิภาพเพิ่มเติม

แก้ไข 1:บันทึกสองสามไบต์โดยจัดเรียงการประกาศตัวแปรใหม่


5

Mathematica, 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

Dyalog APL, 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⍴0สร้างเมทริกซ์สุ่มขนาด 5 × 5 ระหว่าง 0 ถึง 1 ( แต่ไม่เคย 0 หรือ 1 )

(⊢+⌽) เป็นรถไฟที่เพิ่มเมทริกซ์ด้วยการสะท้อน

เพดานผลตอบแทน 1 หรือ 2 สำหรับแต่ละองค์ประกอบ

(3⍴240)(?3⍴256) สี - ขาว -ish และสุ่มหนึ่ง

[ ] ใช้แต่ละองค์ประกอบของเมทริกซ์เป็นดัชนีในสี

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

ตัวอย่างผลลัพธ์:

อวตาร Github

อวตาร Github


2

Javascript ES6, 296 ไบต์

หมายเหตุ:ไม่สร้างไฟล์ดึงไปยังพื้นที่วาดภาพ

ดูการทำงานในJS Fiddleนี้

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

ขวา - รหัสเพื่อสร้างค่าเลขฐานสิบหกแบบสุ่มนั้นเป็นรถ อัปเดตลิงก์ในคำตอบ!
Pierlo Upitup
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.