Enquanto rabiscava em papel quadriculado no outro dia, criei a fonte de espaço negativo acima para dígitos. Caso você ainda não tenha visto, os espaços entre as formas acima produzem a proporção áurea 1,618033988749 . Nesse desafio, sua tarefa é pegar um número como entrada e renderizá-lo exatamente como o exemplo acima mostra.
Aqui está como eles são criados. Todas as linhas estarão em uma grade regular, de modo que os dígitos individuais sejam compostos por um pequeno número de células da grade. Aqui estão as formas dos 10 dígitos (ignoraremos o ponto decimal para este desafio):
Sim, o 7 difere do exemplo da proporção áurea na parte superior. Eu meio que estraguei tudo. Nós vamos com este.
Observe que cada dígito tem cinco células de altura e três células de largura. Para renderizar um número, você pode imaginar colocando todos os seus dígitos um ao lado do outro, de modo que exista exatamente uma coluna vazia entre cada par de dígitos. Por exemplo, tomando 319
como entrada, escreveríamos:
Observe que adicionamos uma coluna vazia inicial e final. Agora invertemos as células:
A saída deve ser os limites dos polígonos resultantes:
É claro que você pode gerar o resultado de qualquer outra maneira, desde que a saída renderizada pareça a mesma.
Entrada
- Você pode escrever um programa ou função, recebendo entradas via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função, como uma sequência ou lista de dígitos. (Você não pode usar um número, pois isso não permitirá que você suporte zeros à esquerda.)
- Você pode assumir que não haverá mais 16 dígitos na entrada.
Saída
- A saída pode ser exibida na tela ou gravada em um arquivo em um formato de imagem comum.
- Você pode usar gráficos de varredura e vetoriais.
- Em ambos os casos, a proporção das células da grade subjacente precisa ser 1 (ou seja, as células devem ser quadrados).
- No caso de gráficos raster, cada célula deve cobrir pelo menos 20 por 20 pixels.
- As linhas não devem ter mais de 10% do tamanho da célula. Estou disposto a dar margem de um ou dois pixels devido ao aliasing aqui.
- Linhas e plano de fundo podem ter duas cores claramente distinguíveis, mas as formas criadas pelas linhas não devem ser preenchidas (ou seja, a parte interna também deve ser a cor do plano de fundo).
- Não deve haver lacunas dentro de cada loop fechado.
- Obviamente, todo o resultado deve estar visível.
Casos de teste
Aqui estão 10 entradas, que juntas cobrem todos os pares possíveis de dígitos adjacentes, bem como todos os dígitos iniciais e finais possíveis:
07299361548
19887620534
21456837709
39284106657
49085527316
59178604432
69471338025
79581224630
89674235011
97518264003
E aqui estão os resultados esperados para aqueles:
Certifique-se de que seu código também funcione quando receber um único dígito (não quero incluir os resultados esperados aqui, porque eles devem ser óbvios, e a seção do caso de teste está cheia o suficiente).