Meninos e meninas estão animados para ver Fifty Shades of Grey na tela prateada, nós apenas queremos codificar sem nos incomodar, então aqui está um desafio para escolher nosso cérebro.
Voce tem que:
- Imprima na tela cinquenta quadrados preenchidos com um tom diferente de cinza
- Se o seu idioma de escolha não possuir recursos de processamento de imagem , você poderá gerar um arquivo de imagem
- Os quadrados devem estar visíveis, pelo menos 20 x 20 pixels
- Você não pode usar números aleatórios, a menos que tenha certeza de que cada tom é único.
- Você não pode se conectar a nenhum serviço em nenhuma rede
- Você não pode ler nenhum arquivo no seu programa.
- Você não pode usar nenhuma biblioteca fora das bibliotecas padrão do seu idioma preferido.
Este é o código de golfe, então o código mais curto vence.
code-golf
graphical-output
jsedano
fonte
fonte
Respostas:
MATLAB, 24 bytes
Segunda tentativa, agora realmente em conformidade com as regras.
O 'I' significa 'InitialMagnification', mas aparentemente o Matlab completará automaticamente os nomes nos pares nome / valor. Claro que é um bom truque de golfe!
fonte
Mathematica, 30 bytes
Aqui está outra abordagem do Mathematica:
ou
O primeiro simplesmente cria uma matriz
e o segundo
Em seguida,
ArrayPlot
plota-os como uma grade e, por padrão, usa a escala de cinza para visualizar os valores.fonte
ArrayPlot
.ArrayPlot@{Range@50}
, que é de apenas 20 bytes.CJam - 23 (sem saída gráfica real)
Como o CJam não pode desenhar na tela (ainda?), Escrevi um programa que gera uma imagem no formato pgm simples .
Salve a saída em um arquivo chamado 50.pgm e abra com um visualizador / editor de imagens.
Experimente online
O resultado fica assim:
Explicação:
fonte
No line should be longer than 70 characters.
Mathematica
72 61 59 43 3534 bytesVersão atual (34 bytes)
Versão anterior (59 bytes), graças a Martin Büttner.
Bordas azuis adicionadas para destacar a posição dos quadrados.
Número de quadrados:
Primeira tentativa (72 bytes)
Se os quadrados puderem se sobrepor. Como observa Zgarb, existe uma possibilidade remota de que um quadrado oculte outro.
fonte
Sábio -
26243529 caracteresSe parece com isso:
Tentativas anteriores : Primeiro eu tive
Matrix([range(50)]).plot()
, entãomatrix_plot([range(50)])
. Eles se pareciam com isso:O usuário @flawr apontou que os quadrados produzidos com as configurações padrão são muito pequenos. A adição de uma
figsize
opção o corrige, mas são 6 caracteres a mais que a versão 5x10 na parte superior desta resposta:fonte
R,
47 42 39 38 37 3635 bytesSupondo que eles possam se sobrepor, isso funciona.
Symbols
requer um vetor que contém o tamanho de cada quadrado e estou economizando espaço reutilizando o mesmo vetor para todos os parâmetros de função. A maior praça é sempre 1 polegada de largura. Com 50:99 como o intervalo de números inteiros, o menor quadrado terá cerca de meia polegada de largura, portanto, 36 pixels a 72 dpi.Obrigado a todos pelos comentários e sugestões, sou muito novo no R, então tudo isso é muito educativo.
Versões prévias:
Imagem anterior:
fonte
symbols(x<-50:99,sq=x,bg=gray(x/99))
f = function (a, b) { a; b}
e depois ligandof(x <- 5, x)
. Isso funciona conforme o esperado. Depois de reverter os argumentos naf
definição (erm(x)
), ele não funciona mais.symbols(x,,,x<-50:99,bg=gray(x/99))
Java - 180
Bem simples, apenas desenhando caixas.
Com quebras de linha:
fonte
int i;
vez de,int i=1
mas depois usar++i
no primeiro uso de ei
nãoi++
na última ocorrência, economizaria 2 bytes. BTW: Eu nem sabia que você pode fazer um programa em java semclass MyClass ... public static void main(...
!!!BBC BASIC, 57
Os quadrados devem ter pelo menos 20 pixels, mas não há nada a dizer que eles devem ter o mesmo tamanho, então acho que isso se qualifica.
Pode ser possível reduzi-lo usando mais códigos VDU de baixo nível. Mas a mudança desse padrão para um menos interessante provavelmente não o tornará mais curto.
fonte
F.n=51TO2S.-1V.19;-1,n,n,n:RECTANGLEFILL0,0,n*20N.
ipython 2, 54 bytes
O melhor que pude fazer foi com um programa ipython. Iniciar o ipython
ipython -pylab
e executar este programa mostrará um gráfico com 50 tons de cinza em 50 quadrados:Resultado:
Solução 2:
Aqui está outro programa (61 bytes):
que exibe a seguinte janela:
fonte
JavaScript (
72,70, 67 bytes)72: original (emprestando o
■
uso inteligente da resposta do Sphinxxx ):70: roubando descaradamente Ismael Miguel (que merece os votos), um loop for mais curto e permitindo que o navegador corrija a falta de # continuar o código de cores ...
67 bytes (65 caracteres): trocando a entidade pelo caractere unicode:
fonte
i=51
. Se contei corretamente, existem apenas 49 quadrados?for(i=0;i++<50;)document.write('<font color=#'+i+i+i+' size=7>■')
ou similar. Não testado, mas pode funcionar!#
caractere para ter uma solução de 70 bytes.for(i=90;i;)document.write('<font color=#'+i+i+i--+' size=7>■')
- MAS, pelo menos nas configurações padrão do meu navegador (OSX / Chrome), a caixa é um pouco menor que 20x20 de qualquer maneira, portanto, essas soluções baseadas em ■ são questionáveis.C ++,
9883 caracteresOk, então você precisará de um emulador de terminal que suporte cores verdadeiras. Para mac os, há as construções noturnas do iTerm2, por exemplo. Para o unix, acredito que o konsole o suporta. Aqui está uma lista, apenas no caso: https://gist.github.com/XVilka/8346728#now-supporting-truecolor
Compile com g ++ (\ e depende do compilador).
Para que os quadrados tenham área suficiente, você precisará alterar o tamanho da fonte do terminal.
O uso de bibliotecas C em vez de C ++ permite raspar alguns caracteres.
C,
6158 caracteresEste é o mesmo programa, mas em C, que assume declarações de funções não tipadas para retornar int e que não precisa incluir inclusões para algumas das funções padrão da biblioteca, como neste caso, printf. Sugerida por @cartographer. Três caracteres a menos graças a @ user3601420
Compila com alguns avisos (por assumir o tipo de retorno do main como int e incluir implicitamente a declaração de printf).
fonte
int
frente do main e compilar com apenas alguns avisos com o gcc.i
o primeiro argumento principal, como em:main(i){for(i=51;i--;)printf(...
\e
→\33
Python 2,
125115104 bytesSaída de amostra:
Boa e velha tartaruga. Este foi o único método que eu consegui pensar no Python que imprime imagens em uma tela usando apenas as bibliotecas padrão.
O formato quadrado da tartaruga é de 21 por 21, o que é muito conveniente. Isso pode ser visto pesquisando
turtle.py
:Se você tem um monitor de alta resolução ou não se importa de alguns quadrados fora da tela, são 93 bytes:
Demo
(Esta demonstração usa o Skulpt adaptando o snippet encontrado aqui . Ele está incluído apenas para ter uma idéia do que o código faz - tive que modificar alguns bits para fazê-lo funcionar.)
Mostrar snippet de código
fonte
J (
434140383329 caracteres)Após sugestões de randomra .
Esta solução não exibe nada, pois a biblioteca padrão de J não contém rotinas da GUI. Em vez disso, giro uma imagem e a escrevo na saída padrão. A saída é aleatória, garantindo que todas as tonalidades sejam distintas. Aqui está um exemplo de saída e a imagem convertida em png e girada em 90 ° para facilitar a visualização:
fonte
50
partir do cabeçalho na parte gerada usando 50 * 50 quadrados economiza um byte:1!:2&4'P2 50 2500 ',":(,*:#i.)50
.1!:2&4'P2 ',":(,*:,],*:#i.)50
por 29 caracteres! Btwplot
não faz parte da biblioteca J padrão?plot
é um dos pacotes auxiliares que você pode baixar do gerenciador de pacotes. Eu dificilmente veria isso como parte da biblioteca padrão .Excel vba, 81
Na janela imediata:
na planilha ativa:
{81 tons é tanto código quanto 50}
fonte
cells(i,j)
você precisavai>0
ej>0
.For i=1 To 50:Cells(i,1).Interior.Color=RGB(i*5,i*5,i*5):Next
R ,
37.32 caracteres 1 :No entanto, a exibição para isso parece… meh (a imagem girou 90 ° para se ajustar melhor ao texto; comprimento do lado quadrado original compactado> 20px):
Aqui está uma versão melhor que plota os quadrados em ordem aleatória dentro de uma matriz (50 caracteres):
(E sim, os três quadrados adjacentes de cores aparentemente idênticas são na verdade três tons diferentes de cinza.)
1 Sim, outra resposta R,
e nem mesmo o mais curto(agora o mais curto para R) - desculpas. Estava faltando uma renderização bonita em R.fonte
image(matrix(1:50,5),c=gray(1:50/51))
Matlab 35 graças a sanchises
Matlab 36
Exibe 50 quadrados preenchidos com os valores de cinza 1 a 50 e 2 retângulos adicionais preenchidos com os valores de cinza 0 e 51:
Matlab, 45
fonte
JavaScript, 87
90bytesIsso gera quadrados para o HTML, porque é realmente o único método de saída gráfica do JavaScript. Graças ao edc65 por remover 3 bytes.
fonte
for(i=90;i>40;)document.write('<p style=background:#'+i+i+i--+';height:9ex;width:9ex>')
. Não é possível usar um único dígito porque cinzas não seria única (# 111 mesma cor # 111111)1cm
ou 19mm
seria melhor e mais amplamente suportado. Sem alterar sua contagem de bytes.PHP,
968874 bytesObrigado a Ismael Miguel por salvar 22 bytes!
Grava 50
<p>
s com 9 mm de altura e largura (que deve ser maior que 20 px na maioria das telas), empilhados um sobre o outro, todos com uma pequena diferença de tonalidade.Resultado gerado (a imagem é reduzida e girada 90 °):
fonte
Matlab - 33 bytes
Apesar dos comandos detalhados, o resultado ainda é bastante compacto. Parece um pouco melhor se você substituir
surf
comsurface
, mas que custa 3 caracteres.Se você não perceber o 50º quadrado cinza, é porque ele é um pouco maior que os outros!
fonte
ndgrid
! (2 bytes a menos). E cada quadrado tem um cinza diferente ?Javascript (
7771 bytes):Esta resposta não é mais baseada no IE11. Funciona porque o navegador converte os códigos de cores incorretos em códigos utilizáveis (adicionando
#
ao número).Aqui está o código:
O Firefox ainda tem a peculiaridade de fazer círculos.
(Edição pequena: alterada
for(i=61;i-->9;)
parafor(i=59;i-->9;)
porque estava produzindo 52 quadrados)Resposta antiga:
Isso é baseado na minha resposta PHP e usa quase as mesmas maneiras de fazer os quadrados:
Não é a resposta mais curta, mas vale a pena adicionar aqui.
Esta solução não é compatível com o Chrome (produz várias cores verdes) e Firefox (o mesmo resultado, mas produz círculos? OO WTH?)
Como se trata de código-golfe, uma solução que trabalha com uma versão específica ou um software específico é aceitável.
fonte
<hr>
, provavelmente para torná-lo mais suave. Nenhuma pista sobre o que acontece com as cores. De qualquer forma, tenho o meu +1 por me confundir.Piet- 2 * 103 = 206
Isso é único, pois o código fonte e a saída cumprem o desafio:
A maior parte é decorativa, então contei apenas as duas primeiras fileiras, que ficam sozinhas bem. Produz um ppm em escala de cinza como alguns outros já fizeram.
fonte
JavaScript - 70 bytes
fonte
font:3em a
oufont-size:3em
. Estou com uma votação negativa devido ao tamanho das caixas. Até você consertar.i--
vez dei-=1
.<b>
tag. Não mudará o código de forma alguma, exceto garantindo que o texto fique em preto. Isso não é um requisito, mas pode ser uma boa ideia.Processando, 66 caracteres:
fonte
PHP (
626063.72716259 bytes):Eu fiz o menor que pude encontrar:
Este é exatamente o mesmo código da minha resposta Javascript (com 71 bytes) .
Mas MUITO mais curto!
Isso tem uma peculiaridade no Firefox: em vez de quadrados, o Firefox faz círculos ! (Entre na loucura!)
Além disso, todos os navegadores produzem a cor certa (mesmo com a falta
#
nocolor
atributo).Envios e log de alterações inválidos :
Resposta antiga, com 62 bytes.
Todos os tons estão perfeitamente alinhados.
Essa solução não funcionará no Chrome (produzirá quadrados com várias cores) e no Firefox (que cria círculos OO Sim, circula com
<hr>
! A régua horizontal é um círculo no Firefox!).Você pode testá-lo no IE11 e deve ficar bem.
(simplesmente removido de cima)
Eu notei algo horrível: estava produzindo em
#111
vez de#010101
algumas cores.Isso significava que algumas cores estavam se repetindo.
Portanto, tive que sacrificar alguns bytes:
Produz as 50 tonalidades em perfeita ordem, de mais clara a mais escura.
Devido a um argumento correto feito por @ edc65 , eu tive que adicionar
width=20
, para produzir quadrados perfeitos .Reduzido mais um byte, substituindo
f!=$c
porf>$c
, que funciona perfeitamente.Versão final, sem
width=20
:Isso é inválido porque é necessário gerar quadrados.
Isso produz os tons de mais claro para mais escuro.
Redução de 1 byte alternando para um
while
loop, assim:Primeira solução:
Isso não tem os tons ordenadamente ordenados, mas existem 50 diferentes.
Não há nada afirmando que eles devem ser pedidos, mas há um requisito de tamanho.
Espero poder reduzir muito mais.
Você pode testá-lo em http://writecodeonline.com/php/ (clique em "Exibir como HTML").
fonte
CSS (87 caracteres)
Usa animação;)
A versão executável é mais longa, pois o Webkit ainda precisa do prefixo do fornecedor. :(
Se for permitido um
<a>
elemento vazio e aleatório, podemos reduzi-lo para apenas 72 caracteres:Vejo? CSS é uma linguagem de programação legítima!
fonte
R, 36 bytes
Eu posso diminuir a resposta do freekvd trivialmente.
(Desculpe por não fazer um comentário sob a solução dele. O Stackexchange ainda não me permite fazer comentários, votar etc.).
fonte
PostScript, 34 bytes
Na codificação ISO-Latin-1:
Este é o equivalente binário a:
(Isso pressupõe que você o esteja usando em um dispositivo com pelo menos 1000 pontos [= 10 polegadas = 25,4 cm] de largura.)
fonte
0f 4e 75 a3 ...
.DrRacket - 83
Apenas para ativar o DrRacket 1 ano após "Introdução ao desenho sistemático de programas".
EDIT :
fonte
2htdp/image
parahtdp/image
, altere a string"solid"
para o símbolo'solid
. Para uma economia maior, altere(range 9 209 4)
para(range 50)
: os tons de cinza precisam ser distintos, não fáceis de distinguir pelo olho humano!for/set
:(require htdp/image)(for/set([i 50])(rectangle 50 50'solid(make-color i i i)))
C # - 173
Usando LINQPAD
Expandido :
Saída :
fonte
for(int i=0;i<250;i+=5)
e, em seguida,FromArgb(i,i,i)
eRectangle(i*4,0,20,20)
dá 168FillRectangle()
tem uma sobrecarga que leva o retângulo coordena directamente, para que possa remover onew Rectangle()
e fugir com 153JavaScript, 152 bytes.
Ok, talvez essa não seja a melhor solução, mas aqui está a minha.
Aqui está a saída com o flutuador css à esquerda (para facilitar a contagem dos quadrados) e sem:
fonte
var
eliminando todas as palavras-chave e removendo espaços em branco desnecessários. Além disso, inclua o nome do idioma e a contagem de bytes na sua resposta.var
palavras - chave.c+=5
vez dec=c+5
. Além disso, você pode salvar 2 caracteres colocandon=c.toString()
no final da linha anterior e, em seguida, essa linha no final da linha anterior novamente. Portanto, sua segunda linha seriafunction w(){if(c<250){n=c.toString()
px
a altura e a largura.