Dada una matriz de enteros positivos en la base 10, donde n > 0
, generan su representación de una pared binaria.
¿Como funciona esto?
- Convierta cada número en su representación binaria.
- Rellene la representación con ceros a la longitud del más largo, es decir,
1, 2
->1, 10
->01, 10
. - Crea un muro donde los
1
s son ladrillos y0
faltan ladrillos.
Un muro es un bloque de caracteres donde cualquier carácter imprimible representa un ladrillo y un espacio ( 32
) representa un ladrillo perdido. Puede elegir cualquier personaje para el ladrillo, no necesita ser distinto a través de la pared siempre que no sea un personaje de espacio en blanco. El personaje de ladrillo que falta debe ser un espacio. Para el siguiente ejemplo, he usado *
para los ladrillos.
Ejemplo
Entrada:
[ 15, 7, 13, 11 ]
[ 1111, 111, 1101, 1011 ]
[ 1111, 0111, 1101, 1011 ]
Salida:
**** *** ** * * **
Reglas
- La entrada debe tomarse en la base 10, si su idioma acepta otras bases, no puede usarlas.
- Se permiten nuevas líneas iniciales y finales.
- La entrada puede tomarse como una lista de enteros, argumentos separados o cualquier formato razonable.
- La salida puede estar en cualquier formato razonable: cadena separada por línea nueva, matriz de líneas, matriz 2D, etc.
- Las lagunas estándar no están permitidas.
Casos de prueba
Tenga en cuenta que en el primer caso de prueba, todas las capas tienen un ladrillo vacío al final.
[ 14, 4, 6, 2 ]
***
*
**
*
[ 1, 2, 4, 8, 16 ]
*
*
*
*
*
[ 15, 11, 15, 15 ]
****
* **
****
****
[ 11, 10, 9, 8 ]
* **
* *
* *
*
Este es el código de golf, ¡el código más corto gana!
[[1, " ", 1, " "], ...]
Respuestas:
MATL , 5 bytes
Pruébalo en línea!
Explicación
fuente
42*
o algo ...100
o algún otro número?J , 8 bytes
Pruébalo en línea!
Explicación
fuente
#:
es por qué esto supera a Jelly.Jalea , 9 bytes
Pruébalo en línea!
EDITAR: CÓMO J BATE JELLY DAT IMPOSIBLE> _ <
fuente
Octava, 22 bytes
Pruébalo en línea
Explicación:
¡Ahorré algunos bytes gracias a Luis Mendo! Además, no me di cuenta de que podía elegir con qué personaje construir el muro, no solo
*
.O con
de2bi
:Explicación:
Lo siguiente funciona en TIO, para 7 bytes más:
Pruébalo aquí
fuente
Python 3 ,
88 84 71 7472 bytesUna lambda que devuelve una lista de cadenas, que representa cada línea.
Pruébalo en línea! (enlace a la versión separada de nueva línea)
Explicación
lambda n:
- Crea una lambda (anónima), con un parámetron
. Devuelve implícitamente.[...]
- Crea una lista de comprensión.bin(x)[2:]
- Obtiene las representaciones binarias de los números..replace(*'0 ')
- Reemplaza todas las ocurrencias de0
con un espacio..rjust(len(bin(max(n)))-2)
- Rellena las representaciones binarias a la longitud de la más larga.for x in n
- Itera a travésn
, con la variablex
.Registro de cambios
-
1- 3 bytes gracias a @Rod,-(...)+2
=2-(...)
, uso derjust()
En subin()
lugar, se agregó una versión con , que no era válida ya que no funcionaba para1
y2
.Se corrigió el error anterior usandoformat()
.Se cambió el tipo de retorno a la lista de Cadenas, porque fue permitido por el OP.
Se corrigió otro error al usar
rjust()
y volver abin()
, detectado y reparado por @Rod.fuente
JavaScript (ES6),
8179 bytesAhorró 2 bytes usando números en lugar de caracteres para los ladrillos, como lo sugirió Rick Hitchcock
Devuelve una matriz 2D con 1 para los ladrillos.
Casos de prueba
Mostrar fragmento de código
fuente
Haskell ,
767574 bytesPruébalo en línea!
fuente
05AB1E , 9 bytes
Pruébalo en línea!
fuente
b0ð:í.Bí»
para 9 bytes también.Ruby,
6359 bytes-4 bytes con ayuda de Alexis Andersen
Pruébalo en línea!
fuente
n.max.to_s(2).size
con('%b'%n.max).size
y realmente no necesita reemplazarlo1
con*
R , 87
88bytesBloques de pared representados por un
8
, pues, muchos ochos.Pruébalo en línea!
La lista de enteros de entrada se convierte en una matriz de bits que se recortan de 0 bits finales y se invierten.
La matriz reducida se emite con
write
un ancho de columna que se determinó cuando se recortó la matriz.ifelse()
es la única opción IF que funciona en vectores desafortunadamente.fuente
1
lugar de""
para el archivo de salida enwrite
.Python 2 , 77 bytes
Pruébalo en línea!
fuente
APL (Dyalog) ,
30222014 bytesGuardado 6 bytes gracias a @ Adám
Pruébalo en línea!
(se supone
⎕IO←0
que esto es predeterminado en muchas máquinas)Esto toma la entrada como una matriz y devuelve una matriz con
*
sys.
Explicación
fuente
' *'[⍉2⊥⍣¯1⊢⎕]
¨
.T-SQL, 290 bytes
Usos
1
para la pieza de ladrillo, supone que la entrada proviene de la tabla@
Ungolfed, con alguna explicación
fuente
Mathematica, 40 bytes
Los ladrillos son 1s
Mathematica, 48 bytes
Los ladrillos son #
fuente
//.
. (/.
significa "reemplazar una vez",//.
significa "seguir haciendo el reemplazo hasta que la cosa deje de cambiar".)C # (.NET Core) ,
112 + 18 = 13086 + 41 = 127 bytesPruébalo en línea!
El recuento de bytes incluye 41 bytes de
using System.Linq;using C=System.Convert;
. Usos1
como personaje para el muro. Sin embargo, esto es demasiado tiempo incluso para C # ...fuente
namespace System.Linq{}
para guardar algunos bytes. ¿Sea.Max()
garantiza que es cierto (estoy seguro de que no soy el más inteligente con binario: P)? ¿class Convert{}
Guardaría algún byte?using System.Linq;using C=System.Convert;
al conteo de bytes, ya que esas dosusing
directivas son necesarias para que el código se compile.Retina , 63 bytes
Pruébalo en línea! Explicación:
Convertir a unario y sufijo a
<
.Convierte a binario.
Una vez que todos los
<
s hayan alcanzado la izquierda, elimínelos a todos.Inserte un espacio antes de cualquier
<
s que ya haya llegado a la izquierda.Mueve todos los
<
s a la izquierda un paso. Enjuague y repita.fuente
PowerShell , 100 bytes
Pruébalo en línea!
Ugh,
convert
binario en PowerShell es muy doloroso. Además de.length
llamadas Y a-replace
la0
con espacios, además de una larga.padLeft()
llamada para que sean todos iguales.length
, todo suma a una larga presentación.Las sugerencias de golf para llegar a menos de 100 son bienvenidas.
fuente
PHP, 84 bytes
Afortunadamente, la operación de bits arroja el
log
resultado a int. flotador no funcionaría aquí.Pruébalo en línea .
fuente
Clojure, 185 bytes
Versión sin golf:
Función anónima que toma el argumento como una lista. Devuelve las líneas como lista.
Leyendo las otras respuestas, apuesto a que podría ser más pequeño.
clojure.string/replace
toma una cantidad obscena de caracteres para escribir ...fuente
Japt ,
3330 bytesPruébalo en línea!
Guardado 3 bytes gracias a @Justin Mariner
Explicación
fuente
-R
indicador (no agregado al recuento de bytes) para ver la salida unida a la nueva línea: aquí .Python 3 ,
9290 bytesPruébalo en línea!
Devuelve una lista de líneas. Apilarlos muestra que realmente se alinean correctamente.
La caida
Esencialmente convierte la matriz a binario, luego reemplaza todos los 0 con espacios.
N
número de espacios se agregan al frente de cada línea dondeN = [length of longest line] - [length of line]
.-1 bytes
Gracias al señor XoderPruébalo en línea!
fuente
'0',' '
con*'0 '
.Japt , 11 bytes
Pruébalo en línea!
Explicación
fuente
z3 z
. No estoy seguro de por quéy y
no funciona allí, lo investigaré más tarde ...Java 7,
13010888 bytesGuardado 22 gracias a @TheLethalCoder Guardado 20 gracias a @Xanderhall
Sin golf:
fuente
i
enb[i]
para guardar un byte. Puede mantener la salida con1
's' para que no sea necesario.replace('1','*')
. Utilice Java 8 en su lugar y compile en una lambda para guardar bytes. Si no quieres hacer eso,int[]b
guarda un byte.i++
evalúa yi
luego lo incrementa (mientras que++i
hace lo contrario) para que pueda moverloi++
fuera delfor
ciclo y usarlob[i++]
en su lugar. Ah, y mientras lo hacemos, solo tiene una línea dentro de su bucle, por lo que no se necesitan llaves.for(int x:i)
Además, puede usar enLong.toBinaryString
lugar de la versión Integer para guardar 3 bytes.Python 2, 217 bytes
Después de 2 horas de codificación decidí que ese numpy es una mala idea para esto
Uso en Ubuntu
Instalar numpy
Crear archivo nombrado
i
con entrada en formato14 4 6 2
correr
fuente
8 ° ,
232254250 bytesCódigo
Versión sin golf con comentarios
Estas palabras deben invocarse en secuencia (ver ejemplo)
Uso y ejemplos
O más claramente
fuente
Pyth, 16 bytes
Pruébalo aquí. Cuidado con el espacio final.
fuente
Excel VBA,
170161 BytesGolfed
Función de ventana inmediata anónima de VBE que toma la entrada del formato
1 2 3 .. n
del rango[A1]
y emite la pared binaria correspondiente a la ventana VBE Inmediata a través del rango[B1,C1,2:2]
Formateado:
Sin golf
Sub
Rutina completa que toma la entrada de formatoArray(1, 2, 3...)
y emite el muro binario correspondiente a la ventana VBE Inmediato a través del rango[A1,B1,2:2]
fuente
Carbón de leña , 20 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Funciona convirtiendo manualmente cada número de entrada a binario pero imprimiéndolo en orden de derecha a izquierda. Tomo la entrada como una cadena terminada en nueva línea, ya que el carbón no tiene una buena manera de ingresar listas, de lo contrario, escribiría algo como esto, que desafortunadamente actualmente toma 21 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. Esta versión se vectoriza sobre la matriz de entrada, aunque su salida está codificada en
-
s, lo que ahorra un byte.fuente