Para un número entero n
que satisface n > 0
, escriba su valor como una ruta descendente a la derecha en función de su representación binaria.
Reglas
- El primer bit de ajuste (más significativo) siempre está en la esquina superior izquierda.
- Cuando se establece el siguiente bit (a
1
), dibuje un carácter ("relleno") en la línea siguiente en la misma columna que el carácter anterior dibujado. Intenta usar espacios ("vacíos") para rellenar, pero cualquier personaje funcionará siempre que sea igual. - Cuando el siguiente bit no está establecido (a
0
), dibuje un carácter ("relleno") en la misma línea inmediatamente a la derecha del carácter anterior dibujado. - Su código debe admitir números con al menos 20 bits significativos.
- Escriba un programa completo, una función, una lambda, etc. pero sin fragmento.
- No se permiten espacios iniciales (o caracteres "vacíos") / líneas
- Cualquier número de espacios finales (o caracteres "vacíos") / líneas permitidas
- Se acepta cualquier tipo de entrada 1D: número, cadena, matriz de booleanos, etc. Sin embargo, mantenga el orden de los bits intactos.
- Se acepta cualquier tipo de salida visual 2D: en stdout, una cadena (con dos valores distintos que representan "lleno" y "vacío"), incluso puede generar una matriz si lo desea. Parece difícil conciliar una lista de números con la regla "sin espacios de encabezado", pero estoy abierto si encuentra una manera de usarla. Nota: si elige imprimir o devolver una cadena, los caracteres utilizados deben ser caracteres ASCII en el rango de puntos de código [32-126].
- Las lagunas estándar están prohibidas.
- Este es codegolf, por lo que gana el código más corto.
Ejemplos
Entrada: 1
*
Entrada: 2
**
Entrada: 3
*
*
Entrada: 4
***
Entrada: 5
**
*
Entrada: 6
*
**
Entrada: 7
*
*
*
Entrada: 25
*
***
*
Entrada: 699050
**
**
**
**
**
**
**
**
**
**
Entrada: 1047552
*
*
*
*
*
*
*
*
*
***********
Entrada: 525311
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
sí.9
lo1001
que me gustaría que fuera mi entrada0011
. ¿Eso esta bien?1
primero es parte del desafío, y (re) mover ese bit sería trivializar el desafío, así que me temo que tendré que decir que no, @TonHospel. Sin embargo, puede eliminarlo de su entrada en el programa.Respuestas:
Jalea , 8 bytes
Un enlace monádico que acepta un número como una lista de unos y ceros (por ejemplo,
13
es[1,1,0,1]
) que devuelve una lista de listas de unos y ceros donde la primera lista es la primera fila.Pruébalo en línea! o ver un conjunto de pruebas formateado
¿Cómo?
fuente
MATL , 14 bytes
Produce una salida gráfica como una ruta que comienza en las coordenadas (0,0). ¡Pruébalo en MATL Online! O vea algunos ejemplos fuera de línea a continuación:
Entrada
7
:Salida:
Entrada
699050
:Salida:
Si lo prefiere, puede ver la ruta como coordenadas complejas para 9 bytes :
Pruébalo en línea!
Explicación
fuente
MATL , 10 bytes
Introduce una matriz de dígitos binarios. Emite una matriz.
Pruébalo en línea!
Explicación
fuente
Python 2 ,
1009981787366 bytesPruébalo en línea!
Versión recursiva:
Python 2 ,
716967 bytesPruébalo en línea!
fuente
Carbón ,
2220191110 bytesSolo mi segunda respuesta de Carbón hasta ahora.
Toma la entrada como cadena binaria (es decir,
699050
como10101010101010101010
).-9 bytes gracias a @Neil que sugiere hacer un bucle hacia atrás.
Pruébalo en línea.
Explicación:
Lea STDIN como cadena en orden inverso:
Pase sobre sus dígitos binarios como cadenas
ι
:Si se
ι
devuelve a un número 1, imprima*
hacia arriba, de lo contrario, imprima*
hacia la izquierda.fuente
{}
s.Base
solo cuesta 1 byte ya que no necesitasCast
nada:F⮌↨N²¿ι↑*←*
.-v
, ya que Charcoal fue diseñado como un lenguaje de golf, y agregué el modo detallado solo para que sea más fácil de escribir y comprender. (Aunque puedo agregar uno si quieres).-a
es la abreviatura de--ast
, lo agregué (formato tomado de PyTek por cierto) para ayudarme a comprender el código sucinto con el menor esfuerzo posible: P (y realmente ayuda cuando accidentalmente ha desordenado el orden de los argumentos). Además, no-l
es una opción separada . (también solo-h
para obtener ayuda sobre / descripciones de argumentos de línea de comandos)C # (.NET Core) ,
155123120113101 bytesSe guardaron 32 bytes debido a que la entrada se puede recibir como una matriz de bits.
Guardado 7 bytes gracias a @auhmaan.
Guardado 10 bytes gracias a @KevinCruijssen.
Pruébalo en línea!
fuente
+new string(' ',c)+"*"
a+"*".PadLeft(c)
(ahorra 7 bytes)?0
lugar de*
:if(n[i++]<1){m+="*";c++;}
toif(n[i++]<1)m+=c++%1;
and"*".PadLeft(c);
to"0".PadLeft(c);
m+=
ahora puede ser un ternario si:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
'sy el uso del operador ternario es realmente inteligente! También arreglé el caso699060
, simplemente estableciéndoloc
en uno al principio, lo extrañé un poco al verificar los casos de prueba.05AB1E ,
181714 bytesPruébalo en línea!
Explicación
05AB1E explicación del lienzo
fuente
γ€gć¸s>«1IÔ·ÌΛ
debería guardar 4 bytes.Python 2 , 59 bytes
Pruébalo en línea!
Basado en la solución de TFeld .
fuente
Haskell , 65 bytes
Pruébalo en línea!
Toma datos como una lista de booleanos.
Curry PAKCS, 70 bytes
Puerto de la respuesta de Haskell, pero debido a
<-
que no funciona en Curry, necesitamos hacer una función auxiliaru
. También necesitamos agregar un espacio entref
y.
para que Curry lo analice como una composición en lugar de un punto.Esto también funciona en MCC Curry, pero no funciona en Sloth Curry (que es el único compatible con TIO).
fuente
Haskell ,
74706762 bytesPruébalo en línea! Toma una lista de ceros y unos como entrada y devuelve una cadena separada por una nueva línea.
Inspirado por la respuesta de xnor .
fuente
Emojicode , 251 bytes
Pruébalo en línea!
Definitivamente, esta no es una solución de golf, pero no hay una persona viva que considere el código Emoji como un lenguaje de golf. Sin embargo, en el proceso de someterme a los horrores que son la sintaxis del código emoji en un esfuerzo por enseñarme esta monstruosidad de un idioma, me sorprendió gratamente lo poderoso y eficiente que puede ser 😀
Explicación:
fuente
JavaScript (ES6), 48 bytes
El mismo formato de E / S y la misma lógica que la versión recursiva a continuación.
Pruébalo en línea!
O 42 bytes si este formato es aceptable.
Versión recursiva, 56 bytes.
Toma la entrada como una matriz de enteros (0 o 1). Usos
0
para llenado y espacio para vacío.Pruébalo en línea!
Comentado
fuente
Bash + GNU utilidades, 38
Aquí
^K
y^H
son literales caracteres de tabulación vertical y de control de retroceso. Estos no se procesan bien en los navegadores, por lo que este script se puede recrear de la siguiente manera:Corre en una terminal. La entrada es a través de STDIN.
Esta respuesta puede extender las especificaciones demasiado: de hecho, no hay caracteres iniciales en cada línea de salida; todo el posicionamiento se realiza con caracteres de control. Si esto es demasiado, entonces la salida se puede canalizar
|col -x|tac
por 11 bytes adicionales.fuente
Lote, 113 bytes
Toma una lista de bits como argumentos de línea de comandos. Utiliza en
+
lugar de*
porque*
tiene un significado especial dentro de las%s:...=...%
expansiones.fuente
Java 10,
100106 bytesToma una matriz de booleanos y devuelve una cadena (
0
s están vacías,1
s están llenas). Pruébalo en línea aquí .Gracias a Olivier Grégoire por ayudarme a jugar al golf un poco más y alertarme sobre el hecho de que mi formato de salida no estaba a la altura de las especificaciones.
Versión sin golf:
fuente
{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Java (JDK 10) , 83 bytes
Pruébalo en línea!
int[]
int[][]
fuente
Haskell , 126 bytes
Ingrese como una lista de ceros y unos. Transforma el número en desplazamiento
x↦[1-x,x]
y calcula las sumas parciales. La salida final se realiza con dos comprensiones de listas anidadas.Pruébalo en línea!
fuente
R , 59 bytes
Pruébalo en línea!
Toma la entrada como una matriz de bits.
Devuelve una matriz booleana de
TRUE
y queFALSE
representa a*
y a, respectivamente.
También tiene algunas cosas en el pie de página para imprimir una matriz correspondiente a las especificaciones anteriores, para facilitar la prueba.
fuente
APL + WIN, 65 o 46 bytes
Solicita la entrada del entero
o para el vector numérico de la representación binaria del entero
Suponiendo que he leído los comentarios de ciertas respuestas correctamente y se permite la última entrada.
fuente
Pyth, 23 bytes
Pruébalo aquí
Explicación
fuente
Perl 5
-p
,5436 bytesPruébalo en línea!
Cortarlo después de que me di cuenta de que la entrada podría ser una cadena de bits.
fuente
SmileBASIC,
645957 bytesEl bit más alto (bit de signo) está marcado y, si es 1, la posición X aumenta. Si el bit de signo es menor que la posición X (es decir, el bit de signo es 0 y X no es 0), la posición Y aumenta.
El primer movimiento siempre será horizontal, por lo que el movimiento Y se bloquea hasta después del primer movimiento X. Esto asegura que la posición Y no aumente durante los 0 bits iniciales.
Entonces N se desplaza a la izquierda, y esto se repite hasta que N alcanza 0.
fuente
Ruby , 63 bytes
Pruébalo en línea!
fuente
Japt ,
1917 bytesToma la entrada como una matriz de bits, por ejemplo
[1,0,1]
, salidas en"
lugar de*
.Afeitado dos bytes gracias a Oliver .
Pruébalo en línea!
fuente
SpT
conTî
-î
es similar ap
, excepto que su valor predeterminado es" "
. Además, hay un atajo paraq
:¬
î
, ciertamente muy útil. A menudo compruebo las posibilidades de usar los accesos directos, pero todavía siempre extraño algunos de ellos, muchas gracias por su ayuda.Python 2, 113 bytes
No estoy seguro de si este cuenta (genera una matriz de cada una de las líneas), pero si es así, cambiaré mi recuento de bytes a 103:
fuente
TI-Basic (TI-84 Plus CE), 85 bytes
Solicita una lista booleana, devuelve una matriz de 0 y 1.
Recorre la lista, incrementa X si el siguiente 'bit' es 0, cambia Y de lo contrario, luego agrega un 1 a la matriz en esa ubicación y devuelve la matriz al final.
TI-Basic es un idioma tokenizado .
Prompt
,L
* 6, (salto de línea) * 12,1
* 5,→
* 7,X
* 5,Y
* 5,sum(
,L
* 5,{
,Ans
* 2,,
* 5,-
,+
* 3,dim(
* 3,(
* 4,For(
,I
* 3,2
,not(
,End
= 73 bytesDelvar
,[A]
* 5 = 12 bytesTI-Basic (TI-84 Plus CE), 56 bytes
Los mismos procesos que el anterior, pero usando salida gráfica (limitada por el tamaño de la pantalla: 10 filas, 26 columnas, por lo tanto, 10 1s y 25 0s como máximo), en lugar de agregar a una matriz.
fuente
Pyth, 30 bytes
Pruébalo en línea!
Usos
Traducción de Python 3:"
lugar de*
.fuente
x86 .COM, 32 bytes
fuente
APL (Dyalog Classic) , 18 bytes
Pruébalo en línea!
fuente