Dado cualquier entero de 16 bits sin signo, convierta su número de forma decimal (es decir, base 10) en una cuadrícula ASCII 4x4 de sus bits, con el bit más significativo (MSB) en la parte superior izquierda, el bit menos significativo (LSB) en abajo a la derecha, lee a través y luego hacia abajo (como texto en inglés).
Ejemplos
Entrada: 4242
+---+---+---+---+
| | | | # |
+---+---+---+---+
| | | | |
+---+---+---+---+
| # | | | # |
+---+---+---+---+
| | | # | |
+---+---+---+---+
Entrada: 33825
+---+---+---+---+
| # | | | |
+---+---+---+---+
| | # | | |
+---+---+---+---+
| | | # | |
+---+---+---+---+
| | | | # |
+---+---+---+---+
Requisitos específicos
La entrada debe estar en decimal (base-10), sin embargo, puede convertir a binario de la forma que desee (incluido el uso de idiomas integrados, si está disponible).
El formato de la tabla de salida debe coincidir exactamente . Esto significa que debe usar los caracteres ASCII específicos (
-
,+
y|
) para las líneas de la cuadrícula de la tabla como se muestra, el interior de cada celda es de 3 caracteres y los bits verdaderos están representados por#
mientras que falso está representado por un espacio ().
Los espacios en blanco iniciales o finales no están permitidos. Se requiere una nueva línea final .
El orden de bits debe coincidir con los ejemplos descritos.
Subsidios
- La entrada debe ser un número de base 10 en la línea de comando, entrada estándar o entrada del usuario, pero no debe estar codificada en su código fuente.
¡Que gane el código más corto más claro ! :-)
fuente
Respuestas:
J 26 bytes
Un verbo anónimo. Afortunadamente, J es muy bueno dibujando cuadros. Probémoslo:
Como han mencionado algunos comentaristas, la forma en que J dibuja cuadros depende del sistema: en algunas plataformas, este código funcionará con la configuración predeterminada, pero en otros, los cuadros se dibujarán con caracteres de dibujo de línea Unicode. (Los comandos
9!:6
y le9!:7
permiten consultar y configurar los caracteres para dibujar valores en recuadros, respectivamente).fuente
JavaScript (ES6), 102
... o 96 usando en
return
lugar deconsole.log
.Pruebe a ejecutar el fragmento a continuación en un navegador compatible con EcmaScript 6.
fuente
Befunge -93, 196
218bytesPara ejecutar el programa ...
Show
.Input
cuadro.Run
. (O cambieSlow
a algo así como 5 milisegundos y luego haga clicShow
).Salida para 4242:
Salida para 33825:
Explicación
Oh Dios mío, ¿en qué me he metido? Bueno, aquí va! (El código irrelevante se reemplaza con
.
s.)Parte 1: Obtener entrada (almacenar en 0,0) y calcular 32768 (almacenar en 1,0).
Parte 2: Imprima "+ --- + --- + --- + ---".
Parte 3: Imprima "+" y una nueva línea y verifique si (1,0) es 0 (es decir, hemos terminado). Si es así, termina. De lo contrario, continúe.
Parte 4: Obtenga dígitos binarios de entrada, actualizando (0,0) y (1,0) a medida que avanzamos. Imprime las cosas correctas. Aprovecho el comportamiento envolvente de Befunge.
Parte 5: Imprima una nueva línea y vuelva a la parte que imprime "+ --- + --- + --- + --- +". Se utiliza un truco envolvente.
Ta-da!
fuente
Julia,
156143 bytesSin golf:
Pruébalo en línea
fuente
Python 2,
157153151146 bytesGracias a Morgan Thrapp por guardar 4 bytes, y a Jonathan Frech por guardar 5.
Uso
fuente
'+---'*4
a una variable y dos más si lo hacej=''.join
int(input())
coninput()
y guardar cinco bytes.Ruby,
118114gracias por @ w0lf por guardar algunos caracteres.
fuente
?
notación (ej .: en?|
lugar de'|'
). Esto funciona para todo excepto el espacio.?\s
funciona para el espacio, sin embargo, no es realmente útil aquí.GNU sed + dc, 116
La puntuación incluye +1 para las
-r
banderas parased
:Prueba de salida:
Alternativamente:
Sed puro, 146
Puede pensar que es una trampa usar
sed
la extensión GNU de '' para evaluar undc
comando. En ese caso, podemos hacer esto un poco diferente, de acuerdo con esta meta-respuesta . Por supuesto, la pregunta establece claramente que la entrada debe estar en la base 10, pero aquí intento afirmar que podemos anular eso para lassed
respuestas y usar unary (base 1) en su lugar.Prueba de salida
Utilizando
printf
para generar la cadena unaria necesaria:fuente
C ++ 11,
193191190176172 bytesMi primera solución en codegolf, así que no me culpes.
Sin golf
Versión previa
fuente
using namespace std
en el código de producción. Y tampoco es útil aquí.0x
.using namespace std
ahorra algunos bytes, porque no tengo que prefijarcout
ycin
constd::
. Incluso usando simplementeusing std::cout;
no ayudará.C++
no es compatible con auto int.Pyth, 37 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
CJam,
4341 bytesDefinitivamente golfable, pero supongo que es un comienzo. Genera la fila superior, luego, por cada 4 bits, crea una fila par y copia la fila impar anterior.
Pruébalo en línea .
fuente
Python 2,
122121120 bytes-1 byte gracias al ingenioso
4**8+
truco de @ xnor . La impresión principal se realiza en bucle 9 veces, seleccionando la fila adecuada para impar / par.fuente
bin(4**8+input())[3:]
ahorra un byteformat
Pitón 2, 94
La idea es tomar el patrón.
excepto
%s
en lugar de espacios en blanco y realizar la sustitución de tuplas. La tupla pareceSe crea quitando los dígitos de la entrada en binario y agregando el símbolo correspondiente al frente de la tupla. Una expresión con tupla explícita dio igual longitud.
Gracias a Sp3000 por 2 bytes.
fuente
PowerShell,
203188182 BytesEditar: ahorró 15 bytes al cambiar el orden en que
|
se dibujan, para que podamos volcarlo.TrimEnd("|")
en la salida y, en su lugar, convertir el bucle for en un bloque de subcódigo que produzca una matrizEdit2: guardó otros 6 bytes al eliminar la necesidad de guardar en la
$o
variable y simplemente generar-join''
directamente.Ooooooooof
Dibujar en PowerShell es difícil . Trabajar con dígitos binarios en PowerShell es difícil .
Utiliza incorporados al
[convert]
entero de entrada en una representación de cadena en binario, luego se vuelve a emitir a un[int64]
modo para que podamos volver a llamar.ToString()
para anteponer / rellenar el número apropiado de ceros. (Tenga en cuenta que crear una matriz de cadenas y unirlas@(,"0"*16)-join''
es 1 carácter más corto que la cadena literal"0000000000000000"
)Luego, realice una simple
1..16|%{...}
comprobación de bucle for para cada dígito para construir nuestra matriz de salida, luego finalmente-join''
vuelva a unirla.Anterior, 188
Anterior er, 203
fuente
Javascript (ES6),
216207 bytesDefine una función anónima.
¡Gracias a ETHproductions por sus consejos!
fuente
.join` | `
2. También puede usar cadenas de plantilla para interpolar valores:i=>`,${"0".repeat....join`,`},`.replace...
3 Puede encontrar más consejos de ES6 en este hilo .i=>`,${("0".repeat(16)+i.toString(2)).slice(-16).split``.map((v,l,a)=>l%4?"":"| "+a.slice(l,l+4).map(v=>' #'[v]).join` | `+" |").filter(v=>v).join`,`},`.replace(/,/g,`<line break>+---+---+---+---+<line break>`).slice(1)
("0".repeat(16)+i.toString(2)).slice(-16)
->(65536|i).toString(2).slice(1)
CJam, 62 bytes
Pruébalo en línea .
fuente
Pyth, 50 bytes
La explicación tendrá que esperar hasta otro momento, ¡estoy publicando esto en mi teléfono!
fuente
Ruby, 102
Algoritmo
Imprimir un divisor horizontal
Loop 20 veces (19..0)
Si el número de bucle no se divide por 5, conviértalo en un número en el rango 16..0 multiplicando por 4/5. Imprima un espacio (ascii 32) o
#
(ascii 32 + 3 = 35) precedido|
y seguido de un espacio.Si el número de bucle se divide por 5, imprima una | terminación, una nueva línea y un divisor horizontal idéntico al primero.
fuente
Perl, 103 bytes
Muchas repeticiones de cadenas para hacer una cuadrícula de
x
s, convertir la entrada a binario y luegos///
lax
s#
ao$"
() dependiendo del indicador en la posición especificada (
$x
).fuente
PHP, 159 bytes
bingrid16.php
:Uso:
Nada sofisticado, solo forzó el renderizado.
Intenté otro ángulo usando matrices en lugar de bucles, pero fue más largo en 224 bytes:
fuente
Perl 5 ,
8584 bytes8483 bytes de código +-p
bandera-1 byte después de que Dom me recordó que usara una nueva línea
Pruébalo en línea!
fuente
$/
!c99 263 bytes
golfizado:
sin golf:
Simplemente me gustó presentar una variante un poco cambiante y sentí que esta es la primera vez que es apropiado (incluso me está costando algunos bytes, pero C no puede este desafío en bytes incluso con una posibilidad, así que no me importa) usar el argumento / argv
fuente
Ruby, 95
Asiente con la cabeza a Mhmd para una conversión de cadena concisa, pero quería intentar usar métodos de cadena en lugar de métodos numéricos.
fuente
Rubí, 93
Una versión ligeramente más corta que usa solo operaciones numéricas.
fuente
C # 227 bytes
Golfizado:
Sangría:
La primera vez que intento algo como esto, ¡los consejos serán bienvenidos!
fuente
wc
comandoPython 3,
145144 BytesEn línea:
Con nuevas líneas:
Editar: Tanques @manatwork para guardar 1 byte
fuente
r=0,1,2,3
es 1 carácter más corta que la generación de conr=range(4)
.Kotlin , 192 bytes
Embellecido
Prueba
fuente
05AB1E , 45 bytes
Pruébalo en línea!
fuente