Esse desafio consiste em codificar um intérprete para uma linguagem de descrição de pintura Mondrian (MPDL).
Definição de idioma
A linguagem opera em uma pilha de retângulos. Um retângulo é definido por sua coordenada superior esquerda e inferior direita. As coordenadas devem ser números inteiros. A pilha é inicializada com um único retângulo com atributos(1,1,254,254)
Cada comando tem o seguinte formato:
<character><integer>
Existem três comandos:
v<integer>
: faça uma divisão vertical no último retângulo da pilha, na posição indicada pelo parâmetro (como porcentagem). O retângulo de origem é removido da pilha e substituído pelos dois novos retângulos resultantes da divisão. O retângulo esquerdo é pressionado na pilha e o retângulo direito. Como as coordenadas retangulares são números inteiros, as frações devem ser arredondadas para o maior número menor menor.
h<integer>
: divisão horizontal. O retângulo superior é pressionado na pilha e o retângulo inferior.
c<integer>
: remove o último retângulo da pilha e o pinta na cor fornecida como parâmetro. 1 = branco, 2 = vermelho, 3 = azul, 4 = amarelo
Desafio
Escreva um programa que tome como parâmetro uma descrição de pintura e crie uma representação de bitmap de 256x256 dos retângulos pintados. Os retângulos devem ser separados por uma linha preta de 3 pixels. Um retângulo de um ou dois pixels deve ter seus pixels não pretos ocultos pelos pixels pretos da borda.
A entrada pode ser lida como um parâmetro ou como um arquivo, até você. Os comandos devem ser separados por um espaço. Você pode assumir que o arquivo de entrada possui sintaxe correta e não possui espaços à esquerda ou à esquerda, guias, etc. A saída pode ser exibida diretamente na tela ou salva em um arquivo, até você.
O código mais curto vence.
Teste
A seguinte fonte:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Deve produzir a composição II em vermelho, azul e amarelo :
v
eh
argumentos devem estar em pixelsv30 v50 c1 c5 h70 v50 c1 c3 c2
.Respostas:
Perl 5 + ImageMagick - 297
Algo para começar:
Pega entrada na linha de comando e gera
a.gif
.fonte
Haskell - 335
O programa lê as instruções como uma linha do stdin , se isso for inaceitável, me avise.
Compila em um programa que recebe sinalizadores -w width -h height -o outputfile .Produz um arquivo "a.svg", se isso não estiver imediatamente claro no código. Como a saída é uma imagem vetorial, não é 'pixel perfeito'.Esta é minha primeira vez trabalhando com o pacote de diagramas, sinta-se à vontade para apontar os erros que cometi. Especialmente qualquer back-end que me permitisse produzir com menos código seria bom.
Você pode ver algumas das primeiras etapas que tomei ao desenvolver o código em http://paste.hskll.org/get/1737 . Ele difere do código acima em importações e não possui main, pois o paste.hskll.org fornece seu próprio ambiente principal e de desenho.
fonte
Python -
434 405 377 364361Meu primeiro golfe python. Provavelmente isso pode ser melhorado MUITO, então qualquer feedback é apreciado.
fonte
a+=[x]
vez dea.append(x)
. E split não precisa de argumento se estiver separado por espaços em branco.HTML + JavaScript ES6 (407)
Testado com Firefox 32.0.3
fonte
x.charAt(0)
->x[0]
;x.substr
->x.slice
;white yellow
->#fff #ff0
;document.getElementById("c")
->c
... e mais #HTML + JavaScript (ES6) 335
Muito semelhante à resposta @mika - marcação CW.
fonte