Nesta fonte pixelizada de letras maiúsculas do alfabeto, todos os caracteres têm 5 unidades de largura e 5 de altura.
███ ████ ███ ████ █████ █████ ████ █ █ █████ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ██ ██
█████ ████ █ █ █ ████ ████ █ ██ █████ █ █ ███ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ████ ███ ████ █████ █ ████ █ █ █████ ███ █ █ █████ █ █
█ █ ███ ████ ███ ████ ████ █████ █ █ █ █ █ █ █ █ █ █ █████
██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ ████ █ █ ████ ███ █ █ █ █ █ █ █ █ █ █ █
█ ██ █ █ █ █ ██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ███ █ ████ █ █ ████ █ ███ █ █ █ █ █ █ █████
Há também 1 unidade de espaço entre letras e entre linhas, como pode ser visto. Portanto, cada letra pode ocupar até 6 × 6 unidades de espaço.
Suponha que, em vez de usar o caractere de bloco completo ( █
) para formar diretamente as formas das letras, desejássemos usar outras letras na mesma fonte . Isso envolve aumentar as dimensões do texto em seis dobras, para que as letras feitas de blocos completos possam ser usadas como substituições de blocos completos no texto maior.
Se isso não fizesse sentido, espero que este exemplo o faça. Aqui está um A feito de B usando a fonte pixelizada:
████ ████ ████
█ █ █ █ █ █
████ ████ ████
█ █ █ █ █ █
████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
Os B são feitos de blocos completos e o A é feito de B. Observe que os B ainda têm uma unidade entre eles horizontal e verticalmente.
Podemos estender essa idéia usando palavras em vez de apenas letras. Aqui está "ÁGUA" feita de "FOGO":
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █
█████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████
Observe como "FIRE" aparece repetidamente em cada linha e sempre em ordem, não importa quanto espaço haja entre as letras. Três dos casos mais à direita de "FOGO" foram cortados mais cedo por causa do formato das letras de "ÁGUA".
Essa idéia pode ser expandida ainda mais, usando essas palavras feitas de palavras para fazer palavras feitas de palavras feitas de palavras , ou mesmo palavras feitas de palavras feitas de palavras feitas de palavras . Não há limite teoricamente.
Outro exemplo colocaria essa postagem acima do limite de 30k caracteres, mas você pode ver o que se entende por "palavras feitas de palavras feitas de palavras" executando este bacana Stack Snippet. Apenas deixe os parâmetros no padrão e pressione "Go!". Você deve ver a palavra "CÃO", feita com a palavra "CAT", com a palavra "MOUSE".
Digitar qualquer lista de palavras separadas por espaço que contenha apenas letras maiúsculas na caixa de texto produzirá a primeira palavra feita da segunda palavra feita da terceira, feita da quarta, feita de ... etc.
AVISO: A inserção de mais de 4 ou até 3 palavras produzirá MUITO texto e levará muito tempo. Pode travar seu navegador / computador / carro.
Desafio
O objetivo desse desafio é refletir o que o Snippet de pilha faz com o menor número de caracteres.
Você deve escrever um programa que utilize uma sequência de palavras separada por espaço, contendo apenas letras maiúsculas, e que emita a primeira palavra "composta por" a segunda "composta" pela terceira e assim por diante, usando a fonte pixelizada fornecida acima.
A caixa de seleção "Plain ASCII" e os recursos de tamanho da fonte do snippet não precisam ser suportados no seu programa. Espelhar a transformação de listas de palavras em palavras feitas de palavras é o ponto principal e o único requisito.
Detalhes
A entrada deve vir de stdin, a linha de comando, ou você pode simplesmente escrever uma função que aceita uma string.
Você pode assumir que a entrada é sempre válida, ou seja, uma sequência de palavras compostas por letras maiúsculas, separadas por exatamente um espaço, sem espaços à esquerda ou à direita.
A saída deve ir para stdout (ou alternativa semelhante) ou para um arquivo com o nome de sua escolha.
A saída deve ser composto inteiramente de caracteres vazio-espaciais , os caracteres de espaço total , e novas linhas.
- Os caracteres de espaço vazio / espaço total devem ser espaço e bloco completo (
,
█
) respectivamente, ou ponto e X (.
,X
) respectivamente.
- Os caracteres de espaço vazio / espaço total devem ser espaço e bloco completo (
A saída não deve conter nenhuma coluna inicial que contenha apenas caracteres de espaço vazio , embora seja permitida qualquer combinação de caracteres de espaço vazio à direita em qualquer linha.
Portanto, isso é permitido:
X...X.XXXXX.. X...X.X X.X.X.XXXX.... X.X.X.X.. .X.X..XXXXX..
Mas isso não é:
.X...X.XXXXX.. .X...X.X .X.X.X.XXXX.... .X.X.X.X.. ..X.X..XXXXX..
Não deve haver linhas iniciais ou finais contendo apenas caracteres de espaço vazio . Uma única nova linha à direita é opcionalmente permitida.
Aqui está uma versão mais amigável da fonte:
.XXX.
X...X
XXXXX
X...X
X...X
XXXX.
X...X
XXXX.
X...X
XXXX.
.XXX.
X...X
X....
X...X
.XXX.
XXXX.
X...X
X...X
X...X
XXXX.
XXXXX
X....
XXXX.
X....
XXXXX
XXXXX
X....
XXXX.
X....
X....
.XXXX
X....
X..XX
X...X
.XXXX
X...X
X...X
XXXXX
X...X
X...X
XXXXX
..X..
..X..
..X..
XXXXX
....X
....X
....X
X...X
.XXX.
X...X
X..X.
XXX..
X..X.
X...X
X....
X....
X....
X....
XXXXX
X...X
XX.XX
X.X.X
X...X
X...X
X...X
XX..X
X.X.X
X..XX
X...X
.XXX.
X...X
X...X
X...X
.XXX.
XXXX.
X...X
XXXX.
X....
X....
.XXX.
X...X
X...X
X..XX
.XXXX
XXXX.
X...X
XXXX.
X..X.
X...X
.XXXX
X....
.XXX.
....X
XXXX.
XXXXX
..X..
..X..
..X..
..X..
X...X
X...X
X...X
X...X
.XXX.
X...X
X...X
.X.X.
.X.X.
..X..
X...X
X...X
X.X.X
X.X.X
.X.X.
X...X
.X.X.
..X..
.X.X.
X...X
X...X
.X.X.
..X..
..X..
..X..
XXXXX
...X.
..X..
.X...
XXXXX
Pontuação
Este é o código-golfe, pelo que vence o envio mais curto em bytes . Qualquer instância de um bloco completo ( █
) pode ser contada como 1 byte em vez de 3, para que os envios que usam X
não tenham uma vantagem.
fonte
javascript:
Na barra de URL e colar) para fazer a arte ASCII aqui muito, muito mais fácil de ler:$('#question pre').css('line-height',1)
. Resultado: i.stack.imgur.com/XmB8C.png$('#question pre, .answer pre').css('line-height',1)
Respostas:
CJam,
171 165 162 162161 bytesEstou tratando
█
como 1 byte. Descanse todos os caracteres estão dentro do intervalo ASCII, portanto, trate-os como 1 byte também.Você pode usar esta pasta para o código exato
Exemplo de saída para entrada:
Como funciona
Em primeiro lugar
é simplesmente o padrão para cada um dos 27 caracteres (
A-Z
e espaço) que é composto de0
(nasX
posições) e1
(nas.
posições). Após a decodificação, isso fornece uma matriz de 27 elementos de matrizes 2D de 5 linhas e 5 colunas representandoX
e.
para cada um dos 27 caracteres. Vamos chamar essa matriz comoL
.Agora o código restante:
Experimente online aqui
fonte
Python 3, 437 bytes
As formas dos caracteres são codificadas em ASCII. Cada byte ASCII corresponde a uma linha de um caractere, com bits representando blocos de unidades. Não é um esquema muito eficiente, mas é fácil descompactar as máscaras NumPy para cada caractere.
Começamos com uma matriz 2D de 1s. Possui uma coluna para cada caractere na primeira palavra e uma única linha. Em seguida, para cada palavra, criamos uma nova matriz de 0s, seis vezes maior e seis vezes maior que a matriz anterior. Onde a matriz anterior tinha um 1, a seção 6x6 correspondente da nova matriz é preenchida com a máscara de bits do caractere apropriado.
Aqui está um exemplo (com uma fonte extremamente pequena):
fonte
CJam,
181174170 bytesTodos esses caracteres não ASCII ainda estão dentro do intervalo ASCII estendido, para que todos possam ser codificados em um único byte. (Exceto pelo
█
, mas esse é tratado especialmente de acordo com as especificações do desafio.) Portanto, estou contando cada caractere como um byte.O Stack Exchange provavelmente alterou alguns dos caracteres não imprimíveis, portanto, você pode precisar copiar o código dessa pasta .
Teste aqui.
Recebe a entrada via STDIN como uma lista de palavras separadas por espaços. A primeira palavra é a maior escala. Por exemplo:
rendimentos
Explicação
Primeiro, armazenamos uma tabela de pesquisa para formas de letras em
L
:A primeira string apenas um número compactado. Tratamos os pontos de código como dígitos da base 257, depois convertemos o número resultante em binário.
YYb
é 2 está na base 2, então dá[1 0]
. Usamos a substituição de elemento com" █"
para transformar os dígitos em espaços e caracteres de bloco. Por fim, dividimos a sequência em linhas de 5 caracteres e novamente em blocos de 5 linhas. O resultado é armazenado emL
e descartado da pilha.Agora, a idéia geral é começar com uma única linha do
█
comprimento da palavra de maior escala. E então, para cada palavra, percorremos a grade existente e expandimos todos os blocos para o caractere correspondente na próxima escala menor (enquanto inserimos linhas e colunas vazias para separação). Aqui está a preparação de entrada:Vejamos a estrutura mais externa do programa restante primeiro. O próximo bloco
{...}/
é executado para cada palavra e expande cada um dos caracteres do bloco.Por fim, vejamos como uma única linha é expandida:
O resultado é impresso automaticamente no final do programa.
fonte