Tạo Avatar Avatar của GitHub


31

Mô tả nền

Lưu ý: như @HelkaHomba chỉ ra, các nhận dạng GitHub thực tế không thực sự ngẫu nhiên mà dựa trên hàm băm của tên người dùng

Ảnh đại diện GitHub mặc định là hình ảnh 5x5 pixel. Một màu được chọn ngẫu nhiên và sau đó các pixel ngẫu nhiên được điền vào một bên (phải hoặc trái, kích thước 2x5) bằng cách sử dụng màu đó. Sau đó, bên đó được sao chép và lật sang phía bên kia, qua trục y. Các pixel còn lại không được điền vào là # F0F0F0 hoặc rgb (240,240,240).

Các pixel của cột trung tâm (kích thước 1x5) sau đó được điền ngẫu nhiên, sử dụng cùng màu như trước đây.

Đầu ra

Lưu ý: đối với thử thách này, chúng tôi sẽ bỏ qua khoảng trống chứa hình đại diện GitHub

Chương trình sẽ xuất ra một tệp hình ảnh 5x5 pixel. Xem http://meta.codegolf.stackexchange.com/a/9095/42499 để biết chi tiết

Ví dụ

Lưu ý: những thứ này rõ ràng được tăng tỷ lệ từ 5x5 để bạn có thể thấy chúng

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

Chúc may mắn!


@trichoplax Đầu ra là hình ảnh 5x5 pixel, cảm ơn. Cũng cần lưu ý không gian xung quanh các pixel 5x5 (được hiển thị trong ví dụ về avatar GitHub).
MCM Abbey

5
Tôi muốn đề xuất một số hình ảnh mẫu nhỏ hơn. Những thứ này chiếm nhiều không gian hơn mức cần thiết. Ngoài ra, thuật ngữ kỹ thuật cho những từ này là "nhận dạng" và chúng không thực sự ngẫu nhiên mà dựa trên hàm băm của tên người dùng (nhưng việc đặt chúng ngẫu nhiên cho thử thách là ổn).
Sở thích của Calvin

@HelkaHomba cảm ơn bạn, tôi đã thêm ví dụ tốt hơn.
MCM Abbey

1
Tôi giả sử "pixel ngẫu nhiên" có nghĩa là mỗi pixel được tô màu hoặc trống với xác suất 0,5, độc lập với tất cả các pixel khác có cùng kích thước. Và "màu ngẫu nhiên" có nghĩa là mỗi thành phần RGB được thống nhất độc lập trên [0, 255]. Chính xác?
Luis Mendo

1
Tôi không cảm thấy đó là một câu trả lời hợp lệ vì nó không tạo ra hình ảnh thực tế, nhưng tôi đã tạo một phiên bản dòng lệnh bằng cách sử dụng mã ANSI: gist.github.com/anonymous/3c879c5b01983a07fb7da7a25d778f1b !
Dom Hastings

Câu trả lời:


12

Pyth - 27 byte

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

Rõ ràng là không hoạt động trực tuyến, nhưng bạn có thể có nó in mã màu ở đây .


10

Perl 5 , 77 byte

Điều này không cạnh tranh vì nó chỉ có bảng màu 256, chỉ hoạt động trên các thiết bị đầu cuối hỗ trợ mã thoát ANSI và không thực sự tạo ra hình ảnh vuông 5 pixel, nhưng tôi nghĩ dù sao tôi cũng đăng nó vì nó rất thú vị khi chơi golf xuống.

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

Lưu ý: các \ethực sự là ASCII char \x1B.

Sử dụng

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

Giải trình

Không có gì đặc biệt thông minh ngoại trừ có lẽ:

  • Sử dụng $-để tự động làm tròn số màu để sử dụng trong chuỗi thoát, được sử dụng thay vì $n=0|rand 254.

Ví dụ đầu ra

Vâng, bạn sẽ bị mắc kẹt với bất kỳ màu sắc cuối cùng là gì, trên khắp thiết bị đầu cuối của bạn.


9

MATL , 36 29 byte

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

Điều này lưu kết quả trong tập tin a.png.

Thay thế 'a'bằng 2trong mã sẽ hiển thị hình ảnh (tăng tỷ lệ) thay vì lưu tệp:

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

Đây là một ví dụ đầu ra:

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

Giải trình

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

Trên thực tế, 53 byte

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

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

Trên thực tế là xấu trong xử lý chuỗi. Tôi nghĩ rằng tôi đã đề cập đến điều đó trước đây. Chương trình này xuất ra hình ảnh netpbm P6 bằng CP437, như sau:

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

Điều này có thể được chuyển đổi thành PNG bằng ImageMagick:

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

Phiên bản mở rộng PNG:

đầu ra mẫu

Giải trình:

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

Xin lỗi, nhưng "P6 netpbm" không có trong danh sách được chỉ định của các định dạng hình ảnh được phép, vì vậy bạn có thể nên thêm độ dài của dòng lệnh ImageMagick vào câu trả lời của mình. : /
ZeroOne

@ZeroOne Đây là định dạng hình ảnh được phép - đó là ppmhình ảnh.
Mego

Tôi đứng sửa! Xin lỗi về điều đó, và cảm ơn đã làm rõ. Có vẻ như tôi cần học một số định dạng hình ảnh. :)
ZeroOne

6

Python, 167 164 155 148 byte

Đầu ra là 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
  • Chỉnh sửa1: range(5)để" "*5
  • Edit2: lần đầu tiên đẩy một byte print
  • Edit3: Thay thế việc hiểu danh sách bằng mapchỉ str(p)được sử dụng
  • Chỉnh sửa4: exec""*5thay vào đófor _ in " "*5:

Một số cải tiến so với mã dựa trên chuỗi cũ:

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)

Bạn có thể tiết kiệm một vài bằng cách thay thế các dòng mới bằng một khoảng trắng trong tiêu đề. Thông số kỹ thuật chỉ gọi cho khoảng trắng. netpbm.sourceforge.net/doc/ppm.html
Chuck Morris

5

Swift 2.3, 593 585 byte

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)

Cập nhật

Swift 3, 551 byte

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")!)

Tôi đang ở WWDC và vừa nhận được bản Xcode 8 beta với Swift 3. Apple đã thực hiện một số cuộc gọi CoreGraphics nhiều hơn là "Swifty" và tôi có thể giảm số lượng bằng cách.

Swift 2 mã 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)

Câu trả lời này giả định rằng UIKit có sẵn và sử dụng khung Cacao Touch.

Một số ví dụ hình ảnh đầu ra:

1 2 3

Tôi biết tôi không thể cạnh tranh với hầu hết các câu trả lời khác nhưng tôi muốn đưa ra một thử thách này như một thử thách cá nhân. Chắc chắn có chỗ để cải thiện với câu trả lời này, nhưng tôi nghĩ sẽ khó để đưa nó xuống dưới vài trăm byte do độ dài của tên phương thức viết hình ảnh UIKit và CoreGraphics. Tôi đã chọn viết một tệp PNG thực tế thay vì các giá trị PPM như một bài tập cho chính mình, nhưng câu trả lời ngắn hơn chắc chắn sẽ có thể nếu tôi sử dụng định dạng PPM.

Tôi đã bắt đầu ra như là một sự mất mát bằng cách khai báo một biến để hạt giống srand48với time. Tôi đã chọn cái này hơn arc4random()hoặc arc4random_uniform()vì cuối cùng tôi sẽ mất nhiều byte hơn với những cái đó. Tôi chọn rng để sử dụng drand48để tạo màu ngẫu nhiên và chọn thời điểm viết màu cho pixel.

CGSizevs CGSizeMakeCGRectvs CGRectMake:

Tôi chuyển đổi giữa các hàm C API nội tuyến và các tiện ích mở rộng Swift của chúng để tìm ra hàm tạo ngắn nhất cho mỗi hàm. CGSizeMakecuối cùng ngắn hơn CGSize()CGRectcuối cùng ngắn hơn 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)

Tôi sẽ phải tạo CGFloats xydo tính chất của vòng lặp for. Tôi thực sự không hào hứng với vòng lặp 2D và nếu kiểm tra sự bình đẳng, nhưng tôi thực sự loay hoay tìm một con đường ngắn hơn. Chắc chắn có chỗ để cạo một vài byte ở đây.

Gọi CGContextFillRectsvới một mảng các CGRectcấu trúc rẻ hơn so với gọi CGContextFillRecthai lần với hai giá trị khác nhau, vì vậy tôi lưu một vài byte với mảng và con trỏ.

Tôi cũng lưu 27 byte bằng cách không gọi UIGraphicsEndImageContext(). Mặc dù điều này thường là một "lỗi" trong mã sản xuất, nhưng nó không cần thiết cho chương trình đồ chơi này.

Màu sắc:

Màu sắc cũng là một vấn đề khó giải quyết, vì tôi đang tạo UIColorcác đối tượng nhưng cần phải viết một CGColorloại mờ cho mỗi pixel. Mã ngắn nhất tôi tìm thấy để tạo màu ngẫu nhiên là sử dụng hàm UIColortạo và lấy CGColortừ đó UIColor. Tương tự với màu trắng. Nếu tôi đang sử dụng khung Ca cao thay vì Ca cao cảm ứng, tôi có thể lưu một số byte bằng cách sử dụng CGColorGetConstantColor(), nhưng tiếc là phương pháp đó không có sẵn trong SDK của Touch Touch.

Viết vào tập tin:

Viết vào một tập tin mất gần 100 byte. Tôi không chắc làm thế nào để tối ưu hóa điều này. Trên một số hệ thống tùy thuộc vào quyền của bạn, bạn có thể cần sử dụng thư mục Tài liệu sẽ còn dài hơn:

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

Chắc chắn mở để tối ưu hóa hơn nữa.

Chỉnh sửa 1: Đã lưu một vài byte bằng cách sắp xếp lại một số khai báo biến.


5

Toán học, 105 102 98 94 byte

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

Đồ họa toán học

toán tử Transpose .

Chỉnh sửa 1: Đã lưu 3 byte bằng cách thay thế Round+ RandomRealbằngRandomInteger

Chỉnh sửa 2: Đã lưu 4 byte bằng cách thay thế RandomIntegerbằngRandomChoice

Chỉnh sửa 3: Đã lưu 4 byte bằng cách thay thế RandomColorGrayLevelbằngRandomReal


4

MATLAB, 102 byte

Xin chào, đây là giải pháp MATLAB của tôi:

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

Đầu vào xcủa hàm là tên của tệp đầu ra. Ví dụ:

p('output.png')

tạo ra một hình ảnh png gọi là 'output.png'.

Đây là kết quả của một số thực thi của mã này.

đầu ra1.png đầu ra2.png đầu ra3.png đầu ra4.png


3

APL Dyalog, 43 42 byte

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

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

Phải sang trái:

?5 5⍴0tạo ma trận 5 × 5 các số ngẫu nhiên trong khoảng từ 0 đến 1 ( nhưng không bao giờ 0 hoặc 1 )

(⊢+⌽) là một chuyến tàu thêm ma trận với sự phản chiếu của nó

trần, trả lại 1 hoặc 2 cho mỗi phần tử

(3⍴240)(?3⍴256) màu sắc - trắng-ish và ngẫu nhiên

[ ] sử dụng mỗi phần tử của ma trận làm chỉ mục màu

'P3',5 5 256,∊ làm phẳng và thêm tiêu đề


2

PHP, 236 byte

Tôi biết đây là một thử thách cũ nhưng tôi chỉ thích thử thách bản thân.

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

Ung dung:

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

Đầu ra mẫu:

Hình đại diện của Github

Hình đại diện của Github


2

Javascript ES6, 296 byte

Lưu ý: không tạo ra một tập tin, vẽ vào một khung vẽ.

Xem nó trong hành động trong Fiddle JS này .

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

Chào mừng đến với trang web! :)
DJMcMayhem

Sau khi chạy nó một vài lần nó được tạo ra này hai lần - một điểm ảnh màu đen duy nhất trong top trái, và không có gì khác. Không chắc chắn nếu đây là một vấn đề với mã hoặc fiddle.
FlipTack

Phải - mã để tạo giá trị hex ngẫu nhiên là lỗi. Cập nhật các liên kết trong câu trả lời!
Pierlo Upitup
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.