"깃 허브"아바타 생성


31

배경 / 설명

참고 : @ HelkaHomba가 지적했듯이 실제 GitHub ID 아이콘 은 실제로 무작위가 아니라 사용자 이름의 해시를 기반으로합니다.

기본 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 2016 년

5
더 작은 샘플 이미지를 제안합니다. 이들은 필요한 것보다 더 많은 공간을 차지합니다. 또한 이것들에 대한 기술 용어는 "identicons"이며 실제로는 무작위가 아니라 사용자 이름의 해시를 기반으로합니다 (그러나 도전에 대해 무작위로 사용하는 것이 좋습니다).
Calvin 's Hobbies

@HelkaHomba 감사합니다. 더 좋은 예를 추가했습니다.
MCMastery

1
"랜덤 픽셀"은 동일한 크기의 다른 모든 픽셀과 독립적으로 각 픽셀이 0.5 확률로 채색되거나 비어 있음을 의미한다고 가정합니다. 그리고 "무작위 색"은 각 RGB 구성 요소가 [0, 255]에서 독립적으로 균일 함을 의미합니다. 옳은?
Luis Mendo 2016 년

1
실제 이미지를 출력하지 않기 때문에 올바른 답변이라고 생각하지 않았지만 ANSI 코드를 사용하여 명령 줄 버전을 만들었습니다. gist.github.com/anonymous/3c879c5b01983a07fb7da7a25d778f1b !
Dom Hastings

답변:



10

펄 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실제로 아스키 문자입니다 \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

결과가 file에 저장됩니다 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
εεεεεεå♠ƒεεεεεεå♠ƒå♠ƒεεεå♠ƒå♠ƒεεεεεεεεεεεεεεεεεεεεεå♠ƒεεεεεεå♠ƒå♠ƒå♠ƒå♠ƒå♠ƒ

ImageMagick을 사용하여 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 명령 줄의 길이를 답에 추가해야합니다. : /
ZeroOne

@ZeroOne 그것은 허용되는 이미지 형식입니다 - 그것은 A의 ppm이미지.
Mego

나는 정정되었다! 죄송합니다. 설명을 해주셔서 감사합니다. 이미지 형식에 대한 학습이 필요한 것 같습니다. :)
ZeroOne 2016 년

6

파이썬 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
  • EDIT1 : range(5)" "*5
  • 편집 2 : 처음에 바이트를 눌렀습니다. print
  • Edit3 : 사용 된 목록 이해 map만으로 대체 str(p)되었습니다.
  • 편집 4 : 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
척 모리스

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에 있으며 Swift 3와 함께 Xcode 8 베타 버전을 얻었습니다.

스위프트 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을 사용할 수 있고 Cocoa Touch 프레임 워크를 사용한다고 가정합니다.

출력 이미지 예 :

1 2 삼

나는 다른 대부분의 답변과 경쟁 할 수 없다는 것을 알고 있지만 개인적으로 도전하기를 원했습니다. 이 답변으로 개선의 여지가 분명히 있지만 UIKit 및 CoreGraphics 이미지 작성 방법 이름의 길이로 인해 수백 바이트 미만으로 낮추기가 어려울 것이라고 생각합니다. PPM 값 대신 실제 PNG 파일을 직접 작성하기로 선택했지만 PPM 형식을 사용하면 더 짧은 답변이 가능합니다.

이미 씨앗에 변수를 선언함으로써 손실로 시작 srand48과 함께 time. 나는 이것을 선택 arc4random()했거나 arc4random_uniform()궁극적으로는 더 많은 바이트를 잃을 것이기 때문입니다. drand48임의의 색상을 생성하고 픽셀에 색상을 쓸 때 선택 하는 rng를 시드합니다 .

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

내가 만들어야 할 것입니다 CGFloatxy반복문의 특성. 나는 2D 루프에 크게 감명받지 않았고 평등이 확인되면 더 짧은 길을 찾기 위해 고심하고있었습니다. 여기에 몇 바이트를 줄일 공간이 있습니다.

구조체 CGContextFillRects배열로 호출 하는 것은 두 개의 다른 값으로 두 번 CGRect호출하는 것보다 저렴 CGContextFillRect하므로 배열과 포인터로 몇 바이트를 절약합니다.

또한을 호출하지 않고 27 바이트를 저장 UIGraphicsEndImageContext()합니다. 이것은 일반적으로 프로덕션 코드에서 "버그"이지만이 장난감 프로그램에는 필요하지 않습니다.

그림 물감:

UIColor객체를 만들지 만 CGColor각 픽셀에 불투명 한 유형을 작성해야하기 때문에 색상도 처리 하기가 어렵습니다. 임의의 색상을 만드는 가장 짧은 코드는 UIColor생성자 를 사용 하고 CGColor그로부터 얻는 것입니다 UIColor. 흰색과 동일합니다. Cocoa Touch 대신 Cocoa 프레임 워크를 사용하는 경우을 사용하여 일부 바이트를 절약 할 수 CGColorGetConstantColor()있지만 불행히도 Cocoa Touch SDK에서 해당 방법을 사용할 수 없습니다.

파일에 쓰기 :

파일에 쓰려면 거의 100 바이트가 걸립니다. 이것을 최적화하는 방법조차 확실하지 않습니다. 권한에 따라 일부 시스템에서는 더 긴 Documents 디렉토리를 사용해야 할 수도 있습니다.

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]

Mathematica 그래픽

는 IS 트랜스 연산자 .

편집 1 Round+ RandomReal를 + 로 바꾸어 3 바이트 저장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')

'output.png'라는 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⍴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);

언 골프 드 :

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

자바 스크립트 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

맞습니다 – 임의의 16 진수 값을 생성하는 코드는 버그였습니다. 답변의 링크를 업데이트했습니다!
Pierlo Upitup
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.