sou eu!
A tarefa de hoje é simples: escreva um programa ou uma função que exiba o pequeno sprite Mario ocioso, do Super Mario Bros, no NES, sobre um fundo azul.
Qualquer tipo de entrada é válida desde que exiba esses 12 * 16 pixels em qualquer lugar da tela / janela / navegador.
(EDIT: a imagem exibida pode ser ampliada se o seu idioma não puder fazer pixel art. Você também pode produzir arte ASCII ou arte HTML, mas usando as cores certas.)
Imagem (ampliada em 400%):
Você deve usar as seguintes cores:
- azul: # 6B8CFF
- vermelho: # B13425
- verde / marrom: # 6A6B04
- laranja: # E39D25
O programa mais curto (em número de caracteres) vence!
As brechas padrão se aplicam (especialmente, nenhuma conexão de rede é permitida), mas é permitida a codificação e a exibição de um arquivo de imagem no seu programa. (as entradas usando esse truque serão classificadas separadamente)
Aqui vamos nós!
Classificação atual
Resposta mais curta usando apenas código:
- Mathematica, 141. https://codegolf.stackexchange.com/a/39916/10732 (de Martin Büttner)
- Bash, 158. https://codegolf.stackexchange.com/a/40002/10732 (por hpsMouse)
- ...
Resposta mais curta usando algum tipo de imagem codificada:
- HTML, 102b. https://codegolf.stackexchange.com/a/39923/10732 (por xem e NiettheDarkAbsol)
- PHP, 131b. https://codegolf.stackexchange.com/a/39926/10732 (por NiettheDarkAbsol)
- ...
Respostas:
HTML / JS,
206158153102102
Truque usado: salve o arquivo GIF compactado como um arquivo HTML e adicione <img src = #> no final
Graças a esta entrada: https://codegolf.stackexchange.com/a/39926/10732 por @NiettheDarkAbsol
Demonstração: http://meuziere.free.fr/mario/gif.html
Versões mais antigas:
153
Truque usado: salve o arquivo PNG compactado como um arquivo HTML e adicione <img src = #> no final
158
Truque usado: definindo o dataURI aparado de um PNG compactado como SRC de uma tag IMG e empacotando tudo em caracteres Unicode.
Execute isso no seu console JS:
206
Sem embalagem (206b):
Demo
Ferramentas usadas:
fonte
Mathematica,
412292252212163148143141 caracteresIsso usa notação de sinal de intercalação
^A
para o caractere de controle no ponto de código1
. No Mathematica, eu posso realmente incorporar o personagem literalmente, embora isso leve a todo tipo de feiura ao copiar as coisas. De qualquer forma, o texto acima é 2 caracteres menor que minha versão anterior, e eu os usei com base-4 em vez de base-5 para codificar os índices da paleta de cores. No momento, não posso me incomodar em corrigir a explicação e a captura de tela abaixo, por isso estou deixando você aqui com a versão base 5 original da minha resposta:Estou codificando os pixels em caracteres Unicode (sim, para contar por caracteres!).
Aqui está o que parece no Mathematica:
Veja como funciona:
Primeiro, definimos uma função
f
que transforma seqüências de caracteres Unicode (passadas como o primeiro argumento#
) em listas de números inteiros. Primeiro, obtemos os códigos de caracteres. Esses podem ser interpretados como dígitos de um número 65536 base. E então convertemos esse número em outra base, passada como o segundo argumento#2
.Agora vamos fazer isso para a string Unicode mais longa.
ToCharacterCode
produz esta lista:Tratando isso como base 65536:
E convertendo para a base 5:
Esses são os índices de cores dos pixels, em ordem azul, vermelho, verde e laranja. Nós os usamos para indexar nessa lista de números, que é a paleta de cores.
Agora, a paleta de cores. É isso
"넴╫賿橫ӣ鴥"
. Usamos os índices acima para selecionar a string correta. Em seguida, aplicamos nossa função novamente, mas usando a base 256. Isso gera uma lista de 12 números inteiros:Usamos a
;;
indexação de intervalo para extrair a fatia relevante para a cor atual.Por fim, usamos apenas
Partition
para dividir isso em linhas12
e alimentá-loImage
. Voilà!Edit: Com a embalagem Unicode, o RLE não valia mais a pena. A remoção salvou 50 caracteres.
Edit: Obviamente, sem o RLE, também não há necessidade de ir para a base 16.
Edit: E enquanto estamos nisso, por que não Unicode-pack a paleta de cores também? (Tenho um palpite de que posso economizar um pouco mais, transformando toda a paleta de cores em uma única sequência e usando
Partition
-a também. Tentarei isso mais tarde.)Edit: Sim, isso eliminou outros 5 bytes.
fonte
Java:
398377Simplesmente desenha o sprite descompactando um int para cada coluna. Mostrado em um programa completo:
Captura de tela obrigatória:
fonte
import java.awt.*
.Código da máquina x86, 102 bytes
Como funciona: a imagem é armazenada como uma imagem de 2 bits usando uma paleta. Cada linha da imagem é armazenada como 3 bytes, seguidos por 1 byte da paleta de cores. Isso permite que os dados sejam carregados como um único DWORD. Os doze pixels são impressos mascarando os 2 bits mais baixos do valor, gravando-os na memória de vídeo e, em seguida, deslocando o valor inteiro dois bits à direita. Após a saída dos pixels da linha, o byte da paleta é gravado na paleta VGA. Quando a imagem termina de desenhar, o programa entra em um loop infinito.
Código de montagem para gerar o binário:
Binário codificado na base 64, salve-o como Mario.com para executá-lo: sBPNEMQHvigBgcc0AWatZpOxDInYJAOqZsHrAuL1k7rJA + 6EwHXiwxUAVSwFAEANpb5XCbm / fxq5 / v4j6b9qqV8QwA
Saída de amostra:
fonte
GIF - 93 bytes
A codificação da imagem está aparentemente bem agora, então ... sim? : D
Como visto no Notepad ++
Como PHP - 131 bytes
fonte
Bash + ImageMagick:
350331321 caracteres(Paleta descaradamente roubado de Martin Büttner 's resposta .)
Saída de amostra:
Para inspecioná-lo, adicione
-scale 120
com facilidadeconvert
os parâmetros para obter uma versão em escala de 10x:fonte
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/
;s/do/{/
;s/done/}/
{
..}
. Obrigado, @grawity.Octo / XO-Chip , 70 bytes
O Octo é uma linguagem assembly de alto nível que é compilada em instruções codificadas por código para a máquina virtual CHIP-8 . A Octo fornece algumas extensões personalizadas chamadas "XO-Chip" para o bytecode básico do CHIP-8, incluindo a capacidade de desenhar bitmaps de 4 cores por meio de planos de bits sobrepostos.
Os bytes compilados são os seguintes:
Execute-o aqui no seu navegador: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f
Provavelmente é mais esclarecedor ver a linguagem assembly Octo que produz esse bytecode:
O programa principal é três instruções de dois bytes. Defina o registro do índice de memória
i
no início do segmento de dados, selecione o plano de desenho 3 (3 é uma máscara de bit; isso indica que você deseja desenhar no modo de 4 cores com os dois planos de bit) e, em seguida, desenhe um sprite na posição xey indicada por registradorv0
(inicializado em zero). O 0 final fornece o tamanho do sprite, que nos conjuntos de instruções SuperChip e XO-Chip desenhará um sprite de 16x16. No modo de 4 cores, um bitmap para o primeiro plano é seguido imediatamente por um bitmap para o segundo plano.Para ver como os aviões funcionam, considere este programa modificado que rola um plano para a direita após desenhar mario:
Se você gosta disso, pode gostar de uma de minhas outras soluções escritas com Octo. Na verdade, há um congestionamento de jogo no mês de outubro com base nessa ferramenta.
fonte
Groovy
417386Divertido como o inferno, mas com uma contagem terrível de caracteres. GroovyFX necessário
ungolfed:
fonte
grep()
em vez detoList()
HTML / JS,
427408264256239226 caracteresObfuscatweet,
271270264256239226 caracteresUsando obfuscatweet, conseguiu reduzir isso para <250: D
O código abaixo é o que consiste.
Truque usado: imagem convertida em base4 String de blocos de cores, convertida em String hexadecimal. O índice da base 4 indica cor (0 = azul, 1 = VERMELHO etc.). CSS com um p inline é usado porque divs precisam de conteúdo para expandir (também p é mais curto). Como o CSS precisa começar com uma letra, 'A' é precedido antes das tags CSS.
O preenchimento do CSS fornece pixels. Nada disso usa caracteres Unicode, com os quais não estou muito familiarizado, apesar de provavelmente ficar abaixo de 300 nesse caso. A vantagem relativa de usar o preenchimento é que você pode, como neste caso, ampliar a imagem para o tamanho que desejar para cada pixel. Eu usei 9 pixels, mas se você gastar um caractere extra, poderá obter até 99 pixels por pixel representado.
CSS,
127119118114100130 caracteresMudar de
p
pararp
remove a necessidade dedisplay:inline
, custa +1 char, -15! caracteres!Foram removidas todas as cores e colocadas em uma matriz nos caracteres JS -87. Então eu apenas removi todo o css
JS,
300289280275329325 caracteresTentei cortar o máximo que pude desse JS simples, processando uma cadeia hexadecimal, mas, como é a minha primeira tentativa, é assim que chego usando apenas o que sei. A escrita em HTML foi reduzida por uma função que adiciona tags, e as classes usam o valor base 4 para determinar a cor a ser exibida.
Usando redução adicional, substituiu charAt por [] e removeu a classe A0 e defina azul como cor padrão para p, economizando 10 caracteres adicionais. O custo adicional para usar
rp
tags é compensado por uma enorme perda de CSS.Deslocamento adicional da remoção do bloco de loop while até a adição de '000' para o caso de uso e o fatiamento de -12 a partir dele.
Adicionado JS adicional para cores e, em seguida, coloque o preenchimento. Percebeu um bug no preenchimento que requer 2 caracteres extras para corrigir. Compactou um monte de loops
Arquivo HTML,
430429419399366342 caracteresDemo
fonte
MATLAB,
194193 bytesO código:
E a saída:
Basicamente, converti a imagem do Mario para que cada pixel seja um número de 2 bits. Eu então codifiquei isso na base 32, que é a string mostrada no código. Essa string é remodelada primeiro para 5 x 16 (cada linha (12 px) de números de 2 bits foi codificada na base 32) e depois convertida novamente na base 10. O resultado é convertido novamente, desta vez na base 4, produzindo uma matriz 12x16 de Números de 2 bits. Esses números são plotados usando
imagesc()
. Em seguida, as cores são atribuídas usandocolormap()
um mapa de cores personalizado dos valores hexadecimais necessários.Divertidamente, um terço do número de bytes usados serve apenas para o MATLAB definir as cores corretas após a plotagem. O código de cores é quase o mesmo número de bytes que toda a cadeia base32!
Sem corrigir a cor (remover a
colormap()
chamada), são 135 bytes e esta é a saída para o mapa de cores padrão no MATLAB R2013a:fonte
JavaScript /
CSS/ HTML446430407353328316Joguei o máximo que pude e acabei com algum HTML / JS sujo, mas o que quer que seja ... funciona.
Edit : É isso aí ... eu terminei.
Editar Seriamente feito desta vez.
Javascript
JSFiddle
fonte
*{line-height:1}
, a ajudaria.<div></div>
é mais curto quedocument.createElement('div')
. E jsFiddle não gostadocument.write
i%12?"":"<br>"
.Matlab -
449/3382305bytescompressão parcial + Usando a simetria inferior da imagem:
- Versão parcialmente compactada (332 bytes):
Versão totalmente descompactada (449 bytes):
Saída nos dois casos (ampliada na tela obviamente, a real é 12x16pix):
fonte
C, 4999 bytes
Isso absolutamente não pode competir com algumas das respostas aqui, mas pensei em dar uma chance em C. O código é uma única linha longa, então aqui está um link pastebin. Se você preferir, aqui está uma codificação base64 do código compactado em gzip:
H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==
Notável, pois não requer bibliotecas externas para executar.
Requer terminal xterm, Konsole ou GNOME, porque usa a expansão RGB para os códigos de escape de cores ANSI para produzir as cores corretas (o ANSI não define laranja). Por razões óbvias, o ideone não funciona. Ele pode ser executado no Windows no Cygwin, que usa o xterm (de fato, foi assim que eu o testei). MSYS pode funcionar; Não tenho certeza.
Saída na minha máquina (xterm):
fonte
Excel VBA,
310307295 BytesFunção Janela Anônima do VBE Immediates que gera um Mario para o objeto Activesheet nas células
A1:L16
Sub
Rotina auxiliar aVersão Ungolfed
-3 bytes para remover espaços em branco -12 bytes para usar
[...]
notação sobreRange(...)
notação; mudando de cores hexadecimais para cores intResultado
fonte
Bash 346
festança pura com VT100 como seqüências de escape (desculpe não laranja nessa paleta)
fonte
Pitão, 83 bytes
Isenção de responsabilidade: este não é um candidato vencedor, porque alguns dos recursos do idioma foram criados após a publicação da pergunta.
Aqui está um hex-dump:
Você também pode baixar o programa aqui e executá-lo com
Isso cria um arquivo
o.png
:Explicação:
Existem apenas 4 cores diferentes, portanto, preciso apenas de 2 bits para salvar a cor de cada pixel.
fonte
Processando 2 - 359 caracteres
Eu vi esse desafio e pensei imediatamente na função pixel [] do Processing. Eu esperava que fosse mais curto, mas ainda estou bastante satisfeito com o resultado, considerando que esta é minha primeira tentativa de código de golfe.
ungolfed:
você pode baixar o processamento aqui
fonte
Javascript 515
apenas funcionou, ainda tem que entrar e jogar golfe
fonte
div
s que compõem as linhas por uma tag embutida por padrão. Eu não testei, mas usara
deve funcionar. Você também pode usar embackground
vez debackground-color
.Perl - Ungolfed 927
Vou ter que jogar isso mais tarde. Primeira vez tentando
Image::Magick
.Tenho certeza de que temos muitos deles, mas aqui está o meu:
fonte
Bash Printable:
179158 bytesInspirado na resposta do usuário2485710 .
Você precisa ajustar seu terminal para corresponder exatamente às cores.
fonte
-D
para decodificar e-d
para depuração .Tcl 298
É uma imagem de 2 bits por pixel na base 64. Os pixels são mapeados para os códigos de escape ansi.
fonte
JavaScript - 256 caracteres (161 obfusc-a-twittou)
Método:
Para determinar a ordem ideal para o ciclo de cores, executei o algoritmo de compactação nos dados brutos de cada uma das 24 permutações de [R, G, B, O] e selecionei a que produzia a menor saída (126 era melhor, menos ideal era cerca de 150 e poucos)
O ETA descobriu isso apenas depois de ler as outras respostas usando o obfusca-tweet ...
Mais ideias. - Experimente o intervalo de dados de 3 bits de 0 a 6, com os raros 7,8,9 ganhando 4 extras cada: 60000N. - verifique as permutações do ciclo de cores em todas as direções e velocidades, exceto horizontalmente um pixel de cada vez. - tente várias passagens de renderização para que as cores possam ser colocadas em camadas.
fonte
Javascript,
253240238236Obfuscatweet ed source -
253240238236Sem ofuscação -
395370365361Agradecemos a @compass pelos
<p>
truques de tags e @xem por 2 (5) caracteres.Demo
Ele converte dados da base 36 e converte para a base 4.
fonte
padding:9
faz nada sem uma unidade depois dele. Você também pode usar um elemento de uma letra comoa
ouq
que esteja implicitamente embutido, em vez dep
.document.write
a variável (devemos usardocument.write.bind(document)
), meu melhor foi atribuirdocument
a variável.JavaScript ES6 (HTML + CSS),
19930731953630Usando o Obfusc-a-tweet :
Isso exibe o sprite sem usar nenhuma imagem ou vários elementos; apenas utiliza indevidamente a
box-shadow
propriedade CSS para criar cada pixel. Experimente em http://jsbin.com/pozohiyezo/ . Esta versão não ofuscada tem 307 caracteres :Esta é a versão HTML original, simples de baunilha. Veja em ação em http://jsfiddle.net/gfeLn1ey/1/ .
fonte
Javascript,
256 ou245252 ou 241256
É triste substituir 256, mas 245 é possível se você usar caracteres não imprimíveis:
Há algum problema ao enviar a solução com caracteres não imprimíveis. O argumento de
btoa
deve ser o resultado deatob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")
com 1 símbolo de comprimento adicionado para escapar a barra invertida.Reduza as duas soluções em 4 símbolos: não precisamos de novas para a criação de matrizes.
252
241
Não é necessário escapar nesta versão. O
btoa
argumento do é resultado deatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")
fonte
Perl,
266260257249245 bytesUsa uma abordagem semelhante à solução bash do user2485710 para gravar uma saída no estilo VT100. Retira o N explícito da nova linha, inserindo uma nova linha a cada 12 "vt100 pixels", 12 * 7 = 84.
fonte
SmileBASIC,
147136 caracteresSaída (cortada):
Substituí todos os caracteres nas cadeias de dados por
x
's, eis os códigos de caracteres (no UCS-2):P$
(Paleta):FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Dados da imagem:
0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8
A paleta é armazenada em uma sequência, cada cor (32 bits) é armazenada em dois caracteres (16 bits cada). Os dados da imagem (2 bits por pixel) são armazenados em outra sequência (8 pixels por caractere)
Felizmente, o desafio é classificado em caracteres, pois esse arquivo é significativamente maior se salvo no UTF-8.
fonte
05AB1E , 87 bytes (Não concorrente)
Experimente online!
Saídas:
Como o 05AB1E não pode executar cores ou gráficos de qualquer tipo ... Se isso não for aceitável, vou excluí-lo.
fonte
Bash + 05AB1E
Sinclair BASIC - 573 bytes
OK, o Spectrum não pode mostrar cores RGB conforme especificado, portanto, usou o mais próximo possível.
A string é a cor (1 = azul, 2 = vermelho etc) seguida por uma letra para representar quantas vezes esse bloco se repete (tomando o valor ASCII menos 96 para se tornar 1,2,3 etc). Um número sem letra depois de desenhar apenas um bloco.
"\::"
na linha 60 é como inserir gráficos em um editor de texto antes de se transformar em um arquivo TAP para carregar no emulador de Fuse. (Mostra como um gráfico de bloco sólido na tela).Cada palavra-chave é um byte no Sinclair BASIC, incluiu uma contagem de um comando PEEK após sua geração.
fonte
Perl -
399171 bytesGrava o arquivo gif em stdout.
fonte