Desenhe o seguinte no menor número possível de bytes:
-------------------------
| | ABC | DEF |
| 1 | 2 | 3 |
-------------------------
| GHI | JKL | MNO |
| 4 | 5 | 6 |
-------------------------
| PQRS | TUV | WXYZ |
| 7 | 8 | 9 |
-------------------------
| | | |
| * | 0 | # |
-------------------------
Respostas:
pb , 240 bytes
(Este programa solicitará a entrada na versão atual do pbi, porque vai para Y = -1 e a
B
variável tenta se atualizar. Mesmo se você digitar a entrada, nada será interrompido. É irritante, mas é melhor que a versão antiga que solicitou entrada, não importa o quê.)pb é uma linguagem que trata o tratamento do terminal como uma tela 2D. Para produzir, você deve mover o "pincel" (um ponto representado pelos valores atuais das variáveis X e Y) para onde deseja que esse caractere vá e o coloque lá. É complicado para coisas como imprimir uma palavra, mas para a arte geralmente é conveniente.
Na verdade, este programa não desenha exatamente o que a pergunta especifica. (Espere, não me diminua ainda! Deixe-me explicar!)
Desenhar caixas com loops é muito fácil, mas há um problema. Se você repetir a seguinte forma:
Você recebe caixas, mas as da direita e da parte inferior estarão abertas. Você pode desenhar manualmente os lados extras, mas isso custa bytes. Para contornar isso, meu programa realmente desenha isso, com as bordas abertas à esquerda e em cima:
Shh, shh, está tudo bem. O pb permite "escrever" em um ponto da tela com um ou mais valores negativos em suas coordenadas. O valor é armazenado enquanto o programa é executado, mas apenas os pontos onde X e Y são> = 0 são gravados na tela. Este programa posiciona o pincel para que as áreas coloridas nesta imagem tenham um X ou Y negativo:
Embora linhas extras sejam "desenhadas", elas nunca são impressas.
Depois de percorrer e criar a grade, este programa preenche as nove caixas principais. O primeiro é codificado, um 1 é gravado e o programa segue em frente. Os outros oito são gerados programaticamente. Ignorando o código para ir para a próxima caixa, notando quando a linha está vazia etc. (suponha que o pincel sempre comece na linha inferior da caixa e na coluna do meio), é o que é executado oito vezes:
Mesmo sabendo que esse
b
é o comando para escrever um caractere,^v<>
mova o pincel ew[a!b]{}
execute o código entre chaves até quea != b
isso seja difícil de seguir. A primeira coisa importante a se notar é que você não pode definir variáveis em pb. Existem seis em todos os programas e você precisa aprender a conviver com eles. Segundo,T
é a única variável que você pode realmente usar da maneira que está acostumado a usar variáveis; atribuir um valor e depois lê-lo. Cada outra variável ou não pode ser definido e apenas diz-lhe algo sobre o ponto da tela que você está jogando, ou só pode ser definida de forma indireta e com efeitos secundários (^v<>
mudançaX
eY
, que também altera o local pincel.c
SetsP
a(P+1)%8
, que também altera a cor de saída). Manter um contador para qual número precisa ser escrito e quais letras são simplesmente impossíveis. Em vez disso, esse código apenas rastreia o número e descobre as letras com base nele. Aqui está como:Isso é imperfeito, pois apenas 3 letras são colocadas nas caixas 7 e 9. Portanto, depois de preencher a linha inferior (codificação simples), cada letra na caixa 9 é aumentada em 2 e o W é colocado manualmente. Da mesma forma, todas as letras nas caixas 7 e 8 são aumentadas em 1 e o P é colocado manualmente.
Ungolfed:
fonte
Brainfuck, 565 caracteres (212 bytes)
Código simples:
fonte
Bubblegum , 103 bytes
Hexdump:
Chato e prático.
fonte
Python 2, 147 bytes
Um rascunho rápido de uma estratégia básica. Usa formatação de sequência para inserir os rótulos, que são codificados em uma sequência longa.
fonte
C, 160 bytes
Faz sentido aproveitar o fato de que as letras estão em sequência. Esse código percorre os 325 caracteres do teclado e imprime um espaço ou a próxima letra, conforme necessário.
Ungolfed
fonte
Java, 296 bytes
Golfe:
Ungolfed:
fonte
Lua, 209 bytes
Golfe:
Ungolfed:
fonte
JavaScript (ES6),
184182 bytesAs linhas de traços são obviamente compressíveis e os dígitos também, mas não pude fazer nada com as letras. Editar: salvou 1 de 2 bytes graças a @Shaggy.
fonte
replace(/-|!./g,s=>s=="-"?s.repeat(25):"| ${s[1]} ")
- substituindo aspas por reticulares. Tentei algumas coisas para agrupar os grupos de letras, mas o melhor que pude fazer foi 194 bytes.CJam, 128 bytes
Experimente online.
fonte
Perl, 142 + 1 = 143 bytes
Caracteres não imprimíveis, portanto, a versão codificada está abaixo.
fonte
-M...
ser contado também?Python 3.5 - 240 bytes:
Imprime exatamente o que o OP deseja, embora possa demorar um pouco.
fonte
Python 2, 200
Estratégia de substituição simples.
fonte
Python 2, 168 bytes
Um método direto, sem compactação interna:
fonte
/// , 154 caracteres
fonte
GML (linguagem do criador de jogos) 8.0, 269 bytes
No Game Maker,
#
é o personagem de nova linha e pode ser escapado por\#
fonte
Python 2, 134 bytes
Essa fonte contém caracteres não imprimíveis e, portanto, é apresentada como um hexdump que pode ser decodificado
xxd -r
.fonte
05AB1E , 91 bytes (não concorrente)
Experimente online!
fonte
J ,
105103 bytesExperimente online!
fonte