Escreva um programa ou função que receba um número inteiro positivo N e produza uma imagem de pixel N × N do logotipo "G" do Google, de acordo com esta construção *:
Por exemplo, se N for 400, deve ser gerado um logotipo de 400 × 400 pixels, com dimensões e cores corretas:
Deve parecer preciso, independentemente de quão grande ou pequeno seja o N. por exemplo, aqui é N = 13:
Seu código não precisa se conectar à Internet. Por exemplo, não é permitido dimensionar um svg hospedado externamente. (Escalar um svg codificado no seu código seria bom.)
O anti-aliasing pode ser usado ou não. Você decide.
Observe que a barra horizontal do "G" não se estende até a borda direita da imagem. O círculo se curva normalmente para dentro na borda direita antes de ser cortado.
O código mais curto em bytes vence.
* A construção do logotipo foi simplificada para este desafio. A construção correta pode ser vista aqui e aqui .
fonte
.svg
e codificá-lo em nossa solução, ou temos que fazê-lo originalmente?Respostas:
Mathematica,
229226225224221206169 bytesObrigado @MartinEnder por 1 byte, @ChipHurst por 37 bytes!
Que desafio divertido!
Explicação
Iterar de 1 a 4 ...
Converta os códigos hexadecimais de cores em
RGBColor
objetos, para que possam ser aplicados ao gráfico do logotipo do Google. Altere a paleta de cores para a<input>
th th color.Crie um retângulo preenchido (cubóide 2D), cujos cantos diagonais são (0, -1) e (sqrt (24), 1).
Gere quatro quartos preenchidos
Annulus
, centralizados na origem, com raio interno 3 e raio externo 5. Não passe alémArcCsc@5
(onde o segmento azul termina).Crie um gráfico com o tamanho N x N, de x = -5 a x = 5 (remove o preenchimento).
Saídas
N = 10
N = 100
N = 200
N = 10000 (clique na imagem para resolução máxima)
fonte
C (Windows), 311 bytes
Pega "N" como argumento de linha de comando e desenha diretamente na tela.
Sem golfe:
fonte
0xF48542
e0xFFFFFF
em números inteiros.gcc g.c -lgdi32
mingw.-1>>8
também podem funcionarPython 2,
244220 bytesusando a transformação de Martin Rosenau no plano [-1,1] ^ 2 e golfe menor, como remover
0.
ou suportesExplicação:
Saída como PPM binário, uso:
Exemplos
solução anterior de 244 bytes
Versão beta não destruída antes da eliminação if / else:
fonte
1for
funciona.1for
saída de amostra @Cyoce adicionada0.x
pode ser reduzido a.x
:)JavaScript (ES6),
408 ... 321317 bytes384 383 371 367 359 327 316 308304 bytes de JavaScript +2413 bytes para o elemento da tela1 byte salvo ao desenhar no sentido anti-horário.
11 bytes salvos no HTML graças a Conor O'Brien.
12 bytes salvos usando o
with
bloco graças ao Prinzhorn.4 bytes salvos com melhor uso de
z=q-y/2
.8 bytes salvos usando
parentNode
ebackground
obrigado a Alexis Tyler.32 bytes salvos usando um desenho mais preciso do arco / barra azul, para que eu não precise mais apagar parte dele.
11 bytes salvos configurando canvas css em vez de seu parentNode, graças a Tejas Kale.
8 bytes salvos usando
with
emap
com uma única instrução, `2d` em vez de('2d')
, emn/5
vez de,.2*n
e inicializando o plano de fundo noprompt(...)
.4 bytes salvos substituindo
Math.PI/4
por.7854
o que parece precisão suficiente graças ao RobAu.Explicação:
As dimensões da tela são iniciadas com a entrada do usuário e o fundo é definido como branco.
q
é inicializado.Para cada cor, desenha a parte do círculo, com alguns ajustes para a última (azul). A barra é desenhada para cada cor no mesmo local e com as mesmas dimensões, para que apenas a última (azul) fique visível.
fonte
<canvas id=d></canvas>
deve funcionar e<canvas id=d>
pode funcionar.d.style
funciona também. O que permite(f = d.style).width = f.height = n = prompt() + 'px';
.785398
em vez deMath.PI/4
raspar 2 bytes (ou mais se menos precisão é ok.BBC BASIC, 177 bytes
Faça o download do intérprete em http://www.bbcbasic.co.uk/bbcwin/download.html
O BBC BASIC usa 2 unidades = 1 pixel, portanto, plotamos um G de
n
unidades de raio (= n / 2 pixels) no centron,n
.A idéia é traçar uma série de linhas radiais, mudando de cor conforme apropriado. Verificou-se que havia pequenas lacunas entre as linhas devido ao truncamento dos números quando convertidos em pixels, portanto, na verdade, triângulos finos são plotados.
Quando a varredura de linhas estiver concluída, o cursor estará no canto superior direito da área azul. Uma única coordenada para o canto oposto na diagonal é fornecida para desenhar um retângulo para concluir a forma.
Ungolfed
fonte
HTML / JS,
680624 bytesPara obter 624 bytes, remova o último
;
, isso é necessário para o snippet abaixo devido à maneira como importa o HTML. Além disso, o Firefox parece não suportarimage-rendering: pixelated
e precisa-moz-crisp-edges
(em vez disso, obrigado @alldayremix !), O que cria uma solução do Firefox +7, mas isso funciona no Chrome conforme o esperado.Utiliza JavaScript para solicitar
N
e um<style>
bloco para posicionar / colorir os elementos. Usa elementos HTML básicos, em vez de aplicar estilos a uma tela (que, ao que parece, foi uma abordagem muito mais curta!). Essa é uma abordagem renovada usando umadata:
imagem de plano de fundo do URI em vez de apenas elementos coloridos. Eu mantive a abordagem anterior abaixo, caso essa nova funcione em menos navegadores.Eu pensei que isso seria muito menor do que acabou sendo, mas mesmo assim foi um exercício interessante!
Versão anterior:
fonte
image-rendering: -moz-crisp-edges
vez depixelated
. Irá adicionar uma nota para esse efeito. Eu gosto bastante do estilo gradiente! :)Bash com Imagemagick (mas realmente Postscript),
268255249 bytesDuplicou a escala para remover
setlinewidth
, substituiu um fator de escala pordup
e mesclou um espaço naA
variável (não é possível comC
porque$C45
é analisado como "a variávelC45
").Obrigado a joojaa por sugerir essas edições!
Escala antiga, 255 bytes
Pega N como argumento único e gera como o.png.
Postscript Ungolfed para Escala Antiga
fonte
61.2 dup scale
. Também é possível adicionar um espaço em CC=' setrgbcolor 5 5 4 '
e raspar 4 espaços. Se você projetou isso em meia escala, então você pode omitir2 setlinewidth
MATLAB,
189184 bytesdestroçado
fonte
Perl 5,
486477476450 (+7 para-MImager
sinalizador) = 457 bytesEu salvei alguns bytes graças ao Dada usando
new
chamadas funcionais e eliminando as parênteses, e usando empop
vez do$ARGV[0]
ponto e vírgula final. Economizei um pouco mais colocando isso$n=pop
onde é usado pela primeira vez e usando a notação de espaço para nome Perl 4 em'
vez de::
.Requer o módulo Imager , que precisa ser instalado a partir do CPAN. Leva um número inteiro como argumento de linha de comando. A imagem não é anti-alias, por isso é um pouco feia.
Copie o código abaixo em um arquivo g.pl. Precisamos de +7 bytes adicionais para o
-MImager
sinalizador, mas ele salva alguns bytes porque não precisamosuse Imager;
.Aqui estão vários tamanhos:
N = 10
N = 100
N = 200
O código completamente não destruído é direto.
Este post anteriormente tinha o código em forma de imagem de saída. Como isso é contra as regras do código de golfe, tive que removê-lo. Veja o histórico de revisões se você quiser dar uma olhada. Usei o Acme :: EyeDrops para criar isso, com uma forma que criei a partir de uma imagem criada com o próprio programa que converti para a arte ASCII. O código que ofusquei já estava com o golfe, o que pode ser visto substituindo o primeiro
eval
por aprint
.fonte
pop
vez de$ARGV[0]
.$h=($n=pop)/2
em vez de$n=pop;...;$h=$n/2
.new Imager::Color"#$_"
em vez deImager::Color->new("#$_")
. (e você esqueceu de largar o último ponto e vírgula). Mas, mais uma vez, são apenas alguns pequenos detalhes, seu código é realmente ótimo! (Eu não poderia ter feito isso! Eu nem sabiaImager
, o que é bastante conveniente!) #Imager'Color
com o delimitador de namespace Perl 4 salva outro byte. :)-MImager
é mais curto do queuse Imager;
:)$n=pop
nasnew
args salva os parênteses e um ponto e vírgulaPHP + SVG, 300 bytes
A parte de escala é
width=<?=$_GET[w]?>
Saída para o valor 333
fonte
"
) e o próximo atributo? Por exemplo<svg width="333" viewBox="0 0 10 10">
-><svg width="333"viewBox="0 0 10 10">
M 0,5 A 5 5 0 0 1 5,0 V 2 A 3,3 0 0 0 2,5
=>M0,5A5 5 0 0 1 5,0V2A3,3 0 0 0 2,5
echo
declaração, use uma string entre aspas para permitir variáveis embutidas e remover o ponto e vírgula:echo'<use xlink:href="#c"fill="#'.$k.'"transform="rotate($v,5,5)"/>';
=>echo"<use xlink:href='#c'fill='#$k'transform='rotate($v,5,5)'/>"
<rect x=5 y=4 fill=#4285f4 width=4.9 height=2 />
(Aqui, você vai precisar de um espaço antes do/
, no entanto.)Logotipo, 258 bytes
... porque eu acho que os logotipos devem ser feitos usando o Logo . Isso é implementado como uma função. Eu o desenvolvi usando o interpretador de logotipos on-line da Calormen.com
Inicialmente, tentei desenhar cada segmento e preenchê-lo com tinta, mas isso acabou sendo maior do que o esperado. Houve muito movimento desperdiçado no retorno e tal. Em vez disso, decidi fazer uma varredura de gráfico polar, ajustando a cor com base no cabeçalho. A parte mais difícil da matemática foi fazer a geometria da curva no topo do retângulo do G. Você poderia cortar alguns decimais e ter menos precisão, mas eu queria que isso fosse preciso com cerca de três dígitos para acomodar os tamanhos de tela típicos.
Golfe
Amostra
g 200
Ungolfed
fonte
JavaScript (ES7),
285258254252251 bytesSolicita a largura do logotipo (até 999) e o desenha em uma tela, pixel por pixel.
Edit : A versão inicial estava convertendo coordenadas cartesianas em coordenadas
(x,y)
polares(r,a)
, mas na verdade não precisamos do ângulo. É mais simples (e significativamente mais curto) fazer apenas comparações entrex
ey
descobrir em que trimestre estamos.Editar : salvou 1 byte graças à ETHproductions.
JS,
251224220218217 bytesHTML, 34 bytes
Versão ES6:
258231227225224 + 34 = 258 bytesLargura máxima recomendada para o trecho: 190.
fonte
<-
e-->
operadores?" Eu acho que é o que acontece quando você pensa em operadores hipotéticos para uma linguagem hipotética por 24 horas ...: P-->
como o início (?) De um comentário html, se este for colocado dentro de<script>
tags em um arquivo html.123 --> comment
gera um erro no console do meu navegador (Firefox 49), enquanto--> comment
não.C #, 276 + 21 = 297 bytes
276 bytes para o método + 21 bytes para importação System.Drawing.
Baseado no algoritmo de Martin Rosenau. Obrigado por fazer a parte mais difícil de criar uma maneira de construir a imagem!
26:
400:
fonte
0xFF...
JS /CSS / HTML (+ JS),400 +701644617593 +1739097 121 =714 bytes914774754730Usa gradientes lineares em vez de transformações. Editar: salvou 140 bytes graças a @darrylyeo. Economizou 20 bytes usando um elemento extra em vez de um gradiente. Economizou 24 bytes graças ao @DBS. Economizou 16 bytes graças a @Hedi. De trás para frente, as várias camadas são:
a
O círculo azulb
Um retângulo branco para obscurecer a parte acima da barrac
O quarto superior esquerdo vermelho / amarelod
O octante vermelho no canto superior direitoe
O quarto esquerdo inferior amarelo / verdef
O quarto inferior direito verde / azulg
O círculo branco internoh
A barra azul horizontalfonte
a
,b
,i
,s
, etc. Use*
em vez dediv
para o seletor CSS.background
como uma abreviação debackground-image
.border-radius
. Por exemplo, emc{border-radius:100% 0 0;
vez dec{border-top-left-radius:100%;
Ruby 2.3.1,
376359 bytesUsando a gema RMagick.
Exemplos
50x50
250 x 250
500 x 500
1000 x 1000
O arquivo usa dois parâmetros - o primeiro é a dimensão e o segundo é o nome do arquivo para salvar a saída como.
Ungolfed
Inicialmente, eu comecei a resolver isso usando oily_png / chunky_png, mas isso provavelmente acabaria muito complicado em comparação com o RMagick. A função .ellipse do RMagick tornou isso fácil e o trabalho principal foi o ajuste das formas / tamanhos de tudo.
Esta é minha primeira submissão ao Code Golf (primeira resposta da SE também) e eu me considero apenas um pouco intermediário com Ruby. Se você tem alguma opinião sobre melhorias / dicas, sinta-se à vontade para compartilhar!
fonte
Python 2,
378373 bytesEu realmente queria fazer isso usando
turtle
. Eu tive que limpar meu conhecimento de Geometria para isso, calculando ângulos e comprimentos não fornecidos na descrição do desafio.Edit: removed
up()
, pois isso remove a pequena lasca de branco entre verde e azul e faz com que o círculo interno pareça melhor. Isso torna o programa ainda mais lento.Editar: substituído
9*n
por2*n
para acelerar. Eu determinei que ainda criaria um círculo suave.Notas:
n
se você removerspeed(0)
, o que adicionei apenas para velocidade.circle
crescimentoO(n)
, pois determina quantos lados o polígono inscrito para desenhar o círculo possui.Experimente online
Ungolfed: Experimente online
Curiosidade:
Trinket
é um anagrama doTkinter
pacote GUI do Python e a base paraturtle
.fonte
n
para mim? Se não parecer bom, talvez seja necessário colocar algunssqrt
s para ser mais exato. Eu arredondado para os milésimos.PHP + GD,
529449 bytesIsso pega um parâmetro de string de consulta
n
e gera uma versão PNG do logotipo do tamanho especificado.Ungolfed:
N = 13:
N = 200:
fonte
imagecolorallocate
; basta atribuir 0xRRGGBB como cor às funções de desenho. Um pouco mais de golfe e o tamanho é de 329 bytes:,imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,($m=[4359668,3450963,0xfbbc05,0xea4335,0xffffff])[4]);for($j=-11.6;$e=[45,135,225,315][$k];$j=$e)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$e,$m[$k++],0);$a($i,$h,$h,$n*.6,$n*.6,0,0,$m[4],0);imagefilledrectangle($i,$h,$h-$n*.1,$h+$h*.98,$h+$h*.2,$m[0]);imagepng($i,"g.png");
execute com-r
, leve a entrada da linha de comando e faça a saída parag.png
.[$k
tem que ser[+$k
. Mas este também deve funcionar:imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,$w=2**24-1);$j=-11.6;foreach([$b=4359668,3450963,0xfbbc05,0xea4335]as$c)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$j=45+90*$k++,$c,0);$a($i,$h,$h,$p=$n*.6,$p,0,0,$w,0);imagefilledrectangle($i,$h,$n*.4,$n*.99,$p,$b);imagepng($i,"g.png");
(291 bytes)imagecolorallocate
. Vou atualizar minha resposta com seu código. Mas você precisa enviar para o nome do arquivo? Você não pode simplesmente deixar de fora o nome do arquivoimagepng
e apenas enviá-lo para o stdout?Java, 568 bytes
Não é o idioma mais forte para o golfe, mas aqui está minha tentativa sincera:
Uso:
Versão sem golfe - a idéia básica é trabalhar no sistema de coordenadas u, v ∈ [-0,5, 0,5] e calcular a distância e o ângulo de cada pixel do centro da imagem:
Minha implementação calcula e desenha pixels brutos. É possível criar uma implementação alternativa que use rotinas gráficas de alto nível, como Graphics2D e Arc2D, para fazer o desenho, especialmente com anti-aliasing.
fonte
Go, 379 bytes
A função
f
usa um únicoint
argumento (o fator de escala) e gera uma imagem SVG dimensionada adequadamente.Experimente online no Ideone.
Exemplo de saída:
Parece errado apaziguar nossos senhores do Google em qualquer linguagem de programação, exceto a própria.
fonte
CJam, 141
Experimente online
Produz a imagem no formato ASCII ppm.
Para uma versão de arte ASCII mais agradável de ser visualizada no navegador, tente este código . Também ajuda a visualizar o algoritmo.
Explicação:
fonte
JavaScript (ES6) (+ SVG), 293 bytes, não concorrente
Infelizmente, a junção da linha redonda não é exatamente o efeito solicitado, mas é bem próximo.
fonte
FreeMarker + HTML / CSS, 46 + 468 = 514 bytes
HTML:
CSS:
Supondo que o processador FreeMarker seja executado com uma variável
n
conjunto de , representando entrada.Explicação dos números mágicos:
Tudo é baseado em um invólucro de 10x10px e, em seguida, redimensionado
n/10
.Ungolfed JSFiddle
fonte
transform:scale(n)
portransform:scale(<?=$_GET[n])?>
(PHP). Em javascript, você pode anexar a parte CSS ao estilo Element343 octetos de Haskell
Explicação
fonte
0x7C
/124
/|
) . Nesse caso, seriam 338 septetos de Haskell . Mas, considerando como o padrão de 8 bits a um byte se tornou no armazenamento de dados nas últimas duas décadas, acho que o termo “bytes” é suficientemente específico sem vencer o cavalo morto.SAS -
590536521 bytesIsso usa o recurso de anotação GTL . A entrada é especificada em uma variável de macro na primeira linha. Por alguns bytes extras, você pode definir a coisa toda como uma macro. Ele ainda se infiltra abaixo do Java e de algumas das respostas em HTML, mesmo que você precise definir um modelo de gráfico nulo apenas para poder plotar qualquer coisa!
Eu deixei a linha entrar para um pouco de legibilidade, mas não estou contando isso para o total, pois funciona sem eles.
Editar: eliminou mais alguns bytes através do uso de macrars, configurações padrão e escolha de operadores.
Edit 2: se livrou dos
do-end
blocos para aif-then-else
lógica e de alguma forma ainda funciona - eu não entendo completamente como. Além disso, eu descobri aeuclid
função!fonte
SCSS - 415 bytes
Recebe informações como
$N: 100px;
e<div id="logo"></div>
, não tenho certeza se elas devem contar no total ...Demo no JSFiddle
fonte
Haskell com pacote JuicyPixels , 306 bytes
Exemplo de uso:
Provavelmente isso poderia ser melhorado. A idéia é passar uma função para
generateImage
selecionar o pixel (cor realmente) que deve ir na posição x, y. Para isso, usamos um lambda que adicionan
como parâmetro e os converte em flutuadores ao mesmo tempo. A#
função basicamente verifica se estamos no ringue, na barra ou em nenhum dos dois. Se for o anel para o qual passamos o bastão%
, se a barra retornarmos azul, caso contrário, branco.%
verifica em qual quadrante estamos e retorna a cor apropriada, se não for azul. O azul é um caso especial, pois precisamos garantir que ele não fique envolto em vermelho; portanto, somente retornamos em azul sey
estiver abaixo da "linha da barra", caso contrário, retornamos em branco. Essa é a visão geral.fonte
Processing.py - 244 bytes + 1 byte para o número de dígitos em N
Vamos começar com o código. Isso pode ser colado no ambiente de processamento e executado (mudando
N
para tamanhos diferentes).Trapaça pequena: o círculo que recorta uma parte do logotipo é desenhado na tonalidade em escala de cinza 205 do Processing, que é a cor padrão do plano de fundo. Exportar isso para uma imagem não seria o mesmo. Isso salva uma chamada para
background(255)
.Explicação
Exemplos
N
= 400N
= 13 (o tamanho mínimo do processamento é 100x100)Nota
Se permitirmos editar manualmente vários valores para
N
as chamadas explícitassetup
edraw
não forem necessárias, o número será reduzido para 213 bytes + 3 bytes por dígitoN
.fonte