Antecedentes / Descrição
Nota: como aponta @HelkaHomba, os identificadores reais do GitHub não são realmente aleatórios, mas baseados no hash de um nome de usuário
O avatar padrão do GitHub é uma imagem de 5x5 pixels. Uma cor é escolhida aleatoriamente e, em seguida, pixels aleatórios são preenchidos em um lado (direito ou esquerdo, tamanho 2x5) usando essa cor. Em seguida, esse lado é copiado e virado para o outro lado, através do eixo y. Os pixels restantes que não foram preenchidos são # F0F0F0 ou rgb (240.240.240).
Os pixels da coluna central (tamanho 1x5) são preenchidos aleatoriamente, usando a mesma cor que anteriormente.
Saída
Nota: para este desafio, ignoraremos o espaço que envolve os avatares do GitHub
O programa deve gerar um arquivo de imagem de 5x5 pixel. Consulte http://meta.codegolf.stackexchange.com/a/9095/42499 para obter detalhes específicos
Exemplos
Nota: estes foram obviamente ampliados de 5x5 para que você possa vê-los
Boa sorte!
fonte
Respostas:
Pitão - 27 bytes
Obviamente, não funciona online, mas você pode imprimir códigos de cores aqui .
fonte
Perl 5 , 77 bytes
Isso não é competitivo, pois possui apenas uma paleta de 256 cores, funciona apenas em terminais que suportam códigos de escape ANSI e, na verdade, não produz uma imagem quadrada de 5 pixels, mas pensei em publicá-la de qualquer maneira, pois era divertido jogar golfe. baixa.
Nota: o caracter
\e
é realmente ASCII\x1B
.Uso
Explicação
Nada particularmente inteligente, exceto talvez:
$-
para arredondar automaticamente o número da cor para uso na sequência de escape, usada em vez de$n=0|rand 254
.Saída de exemplo
fonte
MATL ,
3629 bytesIsso salva o resultado no arquivo
a.png
.Substituir
'a'
por2
no código exibe a imagem (ampliada) em vez de salvar um arquivo:Aqui está um exemplo de saída:
Explicação
fonte
Na verdade, 53 bytes
Experimente online!
Na verdade, é ruim no processamento de strings. Eu acho que já mencionei isso antes. Este programa gera uma imagem netpbm P6 usando o CP437, como o seguinte:
Isso pode ser convertido em PNG usando o ImageMagick:
Versão PNG ampliada:
Explicação:
fonte
ppm
imagem.Python,
167164155148 bytesSaída em ppm
range(5)
para" "*5
print
map
uma vez que somentestr(p)
foi usadaexec""*5
vezfor _ in " "*5:
Algumas melhorias em relação ao código antigo baseado em string:
fonte
Swift 2.3,
593585 bytesAtualizar
Swift 3, 551 bytes
Estou na WWDC e acabei de adquirir o Xcode 8 beta com o Swift 3. A Apple fez algumas das chamadas da CoreGraphics mais "Swifty" e posso reduzir o número de bytes.
Código Swift 2 Ungolfed:
Esta resposta assume que o UIKit está disponível e usa a estrutura do Cocoa Touch.
Alguns exemplos de imagens de saída:
Sei que não posso competir com a maioria das outras respostas, mas queria tentar isso como um desafio pessoal. Definitivamente, há espaço para melhorias com esta resposta, mas acho que será difícil obter isso abaixo de algumas centenas de bytes devido ao comprimento dos nomes dos métodos de escrita de imagem UIKit e CoreGraphics. Optei por escrever um arquivo PNG real em vez de valores PPM como um exercício para mim, mas respostas mais curtas definitivamente seriam possíveis se eu usasse o formato PPM.
Já começou como uma perda por ter de declarar uma variável a semente
srand48
comtime
. Eu escolhi issoarc4random()
ouarc4random_uniform()
porque, em última análise, eu perderia mais bytes com esses. Eu proponho o rng a ser usadodrand48
para gerar uma cor aleatória e escolho quando escrever uma cor em um pixel.CGSize
vsCGSizeMake
eCGRect
vsCGRectMake
:Alterno entre as funções da API C em linha e suas extensões Swift para encontrar o construtor mais curto para cada uma.
CGSizeMake
acaba sendo mais curto queCGSize()
, eCGRect
acaba sendo mais curto queCGRectMake()
:Eu teria que criar
CGFloat
sx
ey
devido à natureza do loop for. Eu realmente não estou emocionado com o loop 2D e se a igualdade verifica, mas eu estava realmente lutando para encontrar um caminho mais curto. Definitivamente, há espaço para cortar alguns bytes aqui.Telefonar
CGContextFillRects
com uma matriz deCGRect
estruturas é mais barato do que telefonarCGContextFillRect
duas vezes com dois valores diferentes; portanto, economizo alguns bytes com a matriz e o ponteiro.Também economizo 27 bytes por não ligar
UIGraphicsEndImageContext()
. Embora isso normalmente seja um "bug" no código de produção, não é necessário para este programa de brinquedos.Cores:
As cores também são difíceis de lidar, já que estou criando
UIColor
objetos, mas preciso escrever umCGColor
tipo opaco para cada pixel. O código mais curto que encontrei para criar uma cor aleatória foi usar oUIColor
construtor e obter o resultadoCGColor
dissoUIColor
. Mesmo com branco. Se eu estivesse usando a estrutura do Cocoa em vez do Cocoa Touch, poderia salvar alguns bytes usandoCGColorGetConstantColor()
, mas infelizmente esse método não está disponível no SDK do Cocoa Touch.Escrevendo para o arquivo:
A gravação em um arquivo leva quase 100 bytes. Não sei ao certo como otimizar isso. Em alguns sistemas, dependendo de suas permissões, pode ser necessário usar o diretório Documents, que seria ainda mais longo:
Definitivamente aberto a novas otimizações.
Editar 1: salvou alguns bytes reorganizando algumas declarações de variáveis.
fonte
Mathematica,
1051029894 bytes
é o operador Transpose .Editar 1: salvou 3 bytes substituindo
Round
+RandomReal
porRandomInteger
Editar 2: salvou 4 bytes substituindo
RandomInteger
porRandomChoice
Editar 3: salvou 4 bytes substituindo
RandomColor
eGrayLevel
porRandomReal
fonte
MATLAB, 102 bytes
Olá, esta é a minha solução matlab:
A entrada
x
da função é o nome do arquivo de saída. Por exemplo:produz uma imagem png chamada 'output.png'.
Aqui estão os resultados de algumas execuções deste código.
fonte
Dyalog APL,
4342 bytes'P3',5 5 256,∊(3⍴240)(?3⍴256)[⌈(⊢+⌽)?5 5⍴0]
'P3',5 5a,∊(3⍴240)(?3⍴a←256)[⌈(⊢+⌽)?5 5⍴0]
Direita para esquerda:
?5 5⍴0
gera uma matriz 5 × 5 de números aleatórios entre 0 e 1 ( mas nunca 0 ou 1 )(⊢+⌽)
é um trem que adiciona a matriz com seu reflexo⌈
teto, retorna 1 ou 2 para cada elemento(3⍴240)(?3⍴256)
cores - branco-ish e um aleatório[ ]
use cada elemento da matriz como um índice em cores'P3',5 5 256,∊
achatar e adicionar cabeçalhofonte
PHP, 236 bytes
Sei que esse é um desafio antigo, mas gosto de me desafiar.
Ungolfed:
Saída de amostra:
fonte
Javascript ES6, 296 bytes
Nota: não produz um arquivo, desenha em uma tela.
Veja em ação neste JS Fiddle .
fonte