Eu projetei uma nova fonte que chamo de PrettyFont. Eu dediquei muito tempo a aperfeiçoá-lo, mas, como sou um trabalhador, não tenho tempo para terminá-lo. Portanto, ele contém apenas 4 caracteres no momento. Um dia, quando eu ficar rico, será meu objetivo ao longo da vida terminá-lo, mas por enquanto ...
Isto é PrettyFont: (0, 1, 2, 3)
#### ## #### ####
# # # # # #
# # # # ###
# # # # #
#### ### #### ####
Cada caractere tem 4 pixels de largura e 5 pixels de altura. Agora! Quero que você me escreva um programa que produza um número no PrettyFont para que eu possa começar a enviar desenhos para impressão.
Regras:
A entrada é um número de sequência na base 4 (apenas caracteres 0-3), por exemplo "01321". O programa deve poder manipular pelo menos 10 caracteres na sequência. Pontos de bônus são dados ao programa que usa um número inteiro base 10 real em vez de uma sequência. Esclarecimento sobre EDIT : o bônus inteiro significa que é possível inserir qualquer número da base 10, como 54321, e o programa o converterá na base 4 e a produzirá (neste caso, 31100301).
A saída será o número impresso com o PrettyFont. Exemplo de entrada e saída:
> "321"
####
#
###
#
####
####
# #
#
#
####
##
#
#
#
###
Bônus enorme para o programa que pode produzi-lo em uma única linha como esta:
> "321"
#### #### ##
# # # #
### # #
# # #
#### #### ###
O caractere '#' não é um requisito e pode ser substituído por qualquer caractere.
Na saída vertical, é necessária uma linha vazia entre cada caractere PrettyFont. Se alguém fizer a saída horizontal, é necessário um caractere de espaço em branco '' ou um caractere de tabulação entre cada caractere PrettyFont.
Este é o código de golfe, o código mais curto vence! (Preciso disso porque o computador do meu escritório tem armazenamento limitado.)
banner -c '#' 0123
Respostas:
k (
118 117 72 71 6966 caracteres)Ainda não fiz muito esforço para jogar golfe,mas ele alcança a saída horizontal desejada em poucos caracteres:Pega a entrada de stdin, imprime a saída em stdout.
edit: Ao implementar uma forma de compactação no "bitmap" de saída, reduzi-o para 72. O bitmap agora é construído convertendo ints de 64 bits em binários e mapeando os 0s e 1s para "#" ou "".
Eu poderia fazer isso de hex como algumas das outras soluções, mas acho que isso acabaria por mais tempo. Acontece que hex é melhor.Saída de amostra para 012301:
// editar: -6 char
fonte
Python3 (124)
Desculpe, vertical não foi interessante para mim.
fonte
J,
848281807569 caracteresRecebe entrada do teclado:
Números mágicos FTW (ou para o segundo lugar neste caso) :-)
fonte
#:
não parecia funcionar para esse tamanho de número.#:1166416635908028473935870
e#:1166416635908028473931775
ambos dão a mesma resposta para mim.C -
164151 caracteres na horizontalNo IDEone: http://ideone.com/gljc3
O código (164 bytes):
EDIT - 151 bytes
Eu adicionei as sugestões dos comentários e mais algumas. Não é exatamente seguro (matriz de comprimento 0 em que eu entro
gets()
...).Observe,
i=puts("")
é um comportamento indefinido, pois estou tratandovoid
comoint
! Ele sempre retorna0
na minha versão do MinGW, mas1
no compilador que o IDEOne usa.Aceita decimal, gera saída 4 (167 bytes)
fonte
gets
dentrofor
(salve 1). Váputs
para ofor
incremento externo e salve chaves. Salve parênteses:(n[i]-48)*5+j
->n[i]*5-240+j
, mesmo truque com+4*(..
.Ruby, 0123 caracteres + um bônus ([0123] vs '#')
Exemplo:
EDIT: Ruby, 87 caracteres
fonte
Rubi
Vertical: 116 caracteres
Exemplo de execução:
Horizontal:
150148 caracteresExemplo de execução:
fonte
Mathematica
174145139118119 119123 caracteresAgora funciona com entrada na base 10 (bônus inteiro). Versões anteriores podem ser encontradas em edições.
Usando o ArrayPlot :
Com
ArrayPlot
isso, podemos converter diretamente o 1 e o 0 em quadrados em preto e branco, economizando alguns caracteres no processo. Por exemplo, com n = 58021, que é 32022211 na base 4:Explicação
Entrada é o parâmetro do programa
n
,.Zero pode ser representado por
{{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,1,1,1}
ou pelo equivalente hexadecimalf999f
.A expressão,
f999f62227f924ff171f
contém as informações para exibir todos os números {0,1,2,3}. (Nota: começa comf999f
, que conforme observamos, é zero disfarçado.) Como o Mathematica não reconhece isso como um número, eu usei89998622278924881718
(em quatro seqüências de caracteres inteiras), dividi o número em seus dígitos inteiros e depois usei 15 em todos os lugares um 8 apareceu. (Isso me permitiu usar dígitos em vez de strings por toda parte.)fonte
Mathematica ,
112107103Minha opinião sobre o método de David.
105 com o bônus:
(para
n = 54321
)fonte
APL (
5857)Resultado:
fonte
Python 2.7
Vertical 160
Horizontal
234216Ambos recebem a entrada como uma string citada no stdin
exemplo:
$. / pretty
"0123"
fonte