Esta é uma variação quine .
Introdução
Todos nós escrevemos código curto, porque algumas razões obscuras , mas o que fazemos, ocupam pelo menos 144 pixels / byte (com uma fonte de 12px). Mas o que aconteceria se codificássemos nosso código em imagens? Esta é sua tarefa hoje.
Desafio
Sua tarefa é ler seu próprio código-fonte (são permitidos quines inadequados, por exemplo, literalmente ler o arquivo de origem) e criar uma imagem a partir dele, definindo os componentes vermelho, verde e azul de um pixel com base no ASCII valor do personagem.
Exemplo:
Nós temos a string "Olá, mundo!"
Hello world!
Vamos converter isso em valores ASCII:
72 101 108 108 111 32 119 111 114 108 100 33
Mapeie os valores RGB para ele (se o comprimento do código-fonte não for divisível por 3, use 0s como os caracteres restantes):
__________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------
Em seguida, criamos a imagem com a menor área dela. Como temos 4 conjuntos de valores RGB, a menor imagem será uma imagem 2 * 2, passando do pixel superior esquerdo para a direita:
E obtemos essa imagem muito colorida (redimensionada, de modo que seja pelo menos visível, também comprova o tamanho da imagem)
Regras / Informações adicionais
- Não há entrada
- A saída deve ser como um arquivo separado ou em uma janela separada.
- Para caracteres multibyte, divida o caractere em 2 bytes.
- O código-fonte deve ter pelo menos 1 byte de comprimento
- A imagem deve ser a dos tamanhos possíveis, com a maior relação largura / altura a 1
- A contagem de pixels na imagem deve ser exatamente o teto (contagem de bytes / 3), nenhum pixel extra deve ser adicionado
Pontuação
Este é um código-golfe , então a menor resposta em bytes vence.
fonte
height = N
ewidth = 1
? Eu acho que você quer dizer largura / altura mais próxima de 1.Respostas:
Na verdade, 12 bytes
Experimente online!
Este programa também funciona em sério.
Este programa gera uma imagem PPM , que é aceitável por padrão .
Imagem de saída (ampliada em 50x):
Explicação:
fonte
MATLAB,
817269 bytesIsso cria uma função anônima que pode ser colada na janela de comando e executada usando
ans()
. Quando executado, isso cria uma imagem de 23 pixels (primária), portanto, a representação mais quadrada é uma matriz simples de pixels.Explicação
Quando colada na janela de comando, a função anônima se atribui automaticamente à variável
ans
. Então, de dentro da função anônima, usamos:que avalia
char(ans)
no espaço de nomes da janela de comando e não no espaço de nomes local da função anônima. Portanto, é capaz de converter a própria função anônima em uma representação de seqüência de caracteres.Depois, temos as seguintes operações que são mais diretas:
fonte
ans
ideia!ans
até a primeira execução ser concluída, o que resulta emans
se tornar a própria função. Na segunda vez, ele está usando o código "próprio" (bem, na verdade, é o código de uma função anônima separada, mas idêntica). Dito isto, não conheço o MATLAB, por isso posso estar errado.evalin
para chamarchar(ans)
no espaço de trabalho base. Eleevalin
é avaliado apenas em tempo de execução, mesmo queans
não esteja definido quando você o cola na janela de comando, quando você chamaans()
para executar esta função anônima,ans
é definido e aevalin
chamada dentro da função anônima pode acessá-lo. Portanto, você não precisa executá-lo duas vezes. Se eu pudesse contar com ele sendo executado duas vezes,evalin('base', 'char(ans)')
seria substituído por simplesmentechar(ans)
Javascript (ES6)
324312309 bytesTenho certeza de que isso poderia ser um pouco jogado:
Novas linhas de legibilidade:
Resultado
fonte
f=()=>{
Aqui, basta fazerf=_=>
, -1 byte, apenas não usá-lo, o javascript é vagamente digitadoJavascript ES6 - 216 bytes
Ungolfed:
Nota:
f
retorna uma tela.Exemplo de execução (pressupõe que haja um
<body>
para anexar):Deve despejar a seguinte imagem na página (ampliada):
fonte
PowerShell v4, 64 bytes
Ele obtém o conteúdo de seu próprio nome de arquivo, lança a string como uma matriz de caracteres, adiciona algum cabeçalho PPM e define o conteúdo como a.ppm como saída. 64 bytes tornam 11x2 pixels:
fonte
Node.js, 63 bytes
Envia a imagem para um arquivo nomeado
P6
que está no PPM formato (P6).Aqui está uma representação PNG (7x3 pixels):
fonte
PHP, 226 bytes
Golfe
Versão ungolfed
Digite esse script em um arquivo chamado 'p.php' e execute-o. Você precisa de seu próprio método de execução de script PHP, porque este lê de um arquivo local.
Imagem de saída:
fonte
Caracteres Java 511
O comprimento da solução leva a uma imagem maior, o que é legal, porque essas imagens são realmente legais.
Observe que há uma nova linha invisível à direita! Ele lê o arquivo de origem, que deve ser "Q.java" e cria uma imagem "Q.png", com a seguinte aparência:
ou 100x dimensionado
fonte
APL (Dyalog) , 33 bytes
Requer
⎕IO←0
qual é o padrão em muitos sistemas. Além disso, a AutoFormatação deve estar desativada para preservar o programa exatamente como fornecido.Hex B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
Unicode 28 2282 2395 4E 50 55 54 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27
Cria
P
: P3 11 1 255 185 186 253 78 80 85 84 187 248 13 80 13 194 205 253 65 86 178 13 3 11 1 255 13 194 187 200 253 78 82 13 22 13 Oque você salva e solta aqui para ver:
⎕NR'f'
N ested R ePresentation do programa f⊃⌽
escolha o último elemento (lit. primeiro do reverso) (linha)'␍ɫ␉⍣',
preceda os quatro caracteres (tipo de arquivo, largura, altura, max)⎕AV⍳
encontrar índices correspondente na Uma Tomic V ector (o conjunto de caracteres⍕
formatar como texto'P',
anexar uma carta(
…)
Aplique a seguinte função tácita:⊂
pegue o argumento inteiro [e entre em]⎕NPUT
N Ative [arquivo], Put [ele, com um nome que consiste em]⊃
o primeiro caractere ("P")fonte
Python, 81 bytes
A saída está no formato PPM.
É assim que a imagem se parece:
Ampliados:
fonte
q
P6
formato, não precisará converter em ordinais. Além disso, para RGB de 8 bits,255
deve ser usado em vez de256
.q
uma vez, como parece, se livrar da tarefa e substituí-la diretamente - você economizará três bytes.print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))
. São -4 bytes, tho!