He diseñado una nueva fuente que llamo PrettyFont. He dedicado mucho tiempo a perfeccionarlo, pero como soy un hombre trabajador no tengo tiempo para terminarlo. Por lo tanto, solo contiene 4 caracteres en este momento. Un día, cuando me haya hecho rico, se convertirá en mi objetivo de toda la vida terminarlo, pero por ahora ...
Esto es PrettyFont: (0, 1, 2, 3)
#### ## #### ####
# # # # # #
# # # # ###
# # # # #
#### ### #### ####
Cada personaje tiene 4 píxeles de ancho y 5 píxeles de alto. ¡Ahora! Quiero que me escriba un programa que genere un número en PrettyFont para que pueda comenzar a enviar diseños para imprimir.
Reglas:
La entrada es un número de cadena en la base 4 (solo caracteres 0-3), por ejemplo "01321". El programa debería poder manejar al menos 10 caracteres en la cadena. Se otorgan puntos de BONIFICACIÓN al programa que toma un entero de base 10 real en lugar de una cadena. EDITAR aclaración: la bonificación de enteros significa que uno puede ingresar cualquier número de base 10, como 54321, y el programa lo convertirá a base 4 y lo generará (en este caso 31100301).
La salida será el número impreso con PrettyFont. Ejemplo de entrada y salida:
> "321"
####
#
###
#
####
####
# #
#
#
####
##
#
#
#
###
Gran ventaja para el programa que puede generarlo en una sola fila de esta manera:
> "321"
#### #### ##
# # # #
### # #
# # #
#### #### ###
El carácter '#' no es un requisito y puede reemplazarse por cualquier carácter.
En la salida vertical, se requiere una fila vacía entre cada personaje PrettyFont. Si alguien realiza la salida horizontal, se requiere un carácter de espacio en blanco '' o un carácter de tabulación entre cada carácter PrettyFont.
Este es el código de golf, ¡el código más corto gana! (Lo necesito corto porque la computadora de mi oficina tiene un almacenamiento limitado).
banner -c '#' 0123
Respuestas:
k (
118117 72 71 6966 caracteres)Todavía no he hecho un gran esfuerzo para jugar al golf,pero logra el rendimiento horizontal deseado en no demasiados caracteres:Toma la entrada de stdin, imprime la salida a stdout.
editar: Al implementar una forma de compresión en el "mapa de bits" de salida, lo reduje a 72. El mapa de bits ahora se construye convirtiendo ints de 64 bits en binario y asignando los 0 y 1 a "#" o "".
Podría hacerlo desde hexadecimal como algunas de las otras soluciones, pero creo que esto terminaría por más tiempo. Resulta que el hex es mejor.Salida de muestra para 012301:
// editar: -6 caracteres
fuente
Python3 (124)
Lo siento, vertical no fue interesante para mí.
fuente
J,
848281807569 caracteresToma entrada del teclado:
Números mágicos FTW (o para el segundo lugar en este caso) :-)
fuente
#:
no pareció funcionar para ese tamaño de número.#:1166416635908028473935870
y#:1166416635908028473931775
ambos dan la misma respuesta para mí.C -
164151caracteres horizontalesEn IDEone: http://ideone.com/gljc3
El código (164 bytes):
EDITAR - 151 bytes
Agregué las sugerencias de los comentarios y algo más. Sin
gets()
embargo, no es exactamente seguro (matriz de longitud 0 en la que estoy ...).Nota,
i=puts("")
es un comportamiento indefinido ya que estoy tratandovoid
comoint
! Siempre regresa0
en mi versión de MinGW, pero regresa1
en el compilador que IDEOne usa.Acepta decimal, emite base 4 (167 bytes)
fuente
gets
dentrofor
(guardar 1). Moverputs
alfor
incremento del externo y guardar llaves. Guardar paranthesis:(n[i]-48)*5+j
->n[i]*5-240+j
, mismo truco con+4*(..
.Ruby, 0123 caracteres + una bonificación ([0123] vs '#')
Ejemplo:
EDITAR: Ruby, 87 caracteres
fuente
Rubí
Vertical: 116 caracteres
Ejecución de muestra:
Horizontal:
150148 caracteresEjecución de muestra:
fuente
Mathematica
174145139118119123 caracteresAhora funciona con entrada en base 10 (bonificación de enteros). Las versiones anteriores se pueden encontrar en ediciones.
Usando ArrayPlot :
Con
ArrayPlot
podemos convertir directamente los 1 y los 0 en cuadrados en blanco y negro, ahorrando algunos caracteres en el proceso. Por ejemplo, con n = 58021, que es 32022211 en la base 4:Explicación
Entrada es parámetro del programa,
n
.El cero puede ser representado por
{{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,1,1,1}
o por la contraparte hexadecimalf999f
.La expresión,
f999f62227f924ff171f
contiene la información para mostrar todos los números {0,1,2,3}. (Nota: comienza conf999f
, lo que, como notamos, es cero disfrazado). Como Mathematica no reconoce esto como un número, usé89998622278924881718
(en cuatro cadenas enteras), dividí el número en sus dígitos enteros, y luego usé 15 en cada lugar aparecieron 8. (Eso me permitió usar dígitos en lugar de cadenas).fuente
Mathematica ,
112107103Mi opinión sobre el método de David.
105 con el BONO:
(para
n = 54321
)fuente
APL (
5857)Salida:
fuente
Python 2.7
Vertical 160
Horizontal
234216Ambos toman la entrada como una cadena entre comillas en stdin
ejemplo:
$. / pretty
"0123"
fuente