Reto
Dado un número entero positivo , repetir cada uno de sus dígitos un número de veces correspondiente a su posición en . En otras palabras, cada dígito debe repetirse veces (para cada , 1-indexado), creando así el nuevo número:
Luego, escríbalo horizontal y verticalmente y complete los espacios en blanco con copias del dígito que corresponde al índice mayor entre el índice de columna y el índice de fila del espacio en blanco. El resultado final debería verse así:
Especificaciones
Puede tomar como un entero, una cadena, una lista de dígitos o una lista de caracteres que representan los dígitos. El resultado puede ser una cadena separada por una nueva línea, una lista de cadenas / enteros o una lista de listas de caracteres / dígitos, pero si es posible, incluya una versión impresa bonita. Si la salida es una cadena separada por una nueva línea, también es aceptable:
- tener espacios en blanco iniciales / finales, siempre que la apariencia visual de la salida no cambie
- separe las columnas usando una cantidad consistente de espacios o las filas con una cantidad consistente (no cero) de líneas nuevas
Puede tomar entradas y proporcionar salidas a través de cualquier método estándar , mientras toma nota de que estas lagunas están prohibidas de manera predeterminada. Este es el código de golf , así que intente completar la tarea en la menor cantidad de bytes que pueda administrar en el idioma que elija.
Casos de prueba
65:
655
555
555
---------------
203:
200333
000333
000333
333333
333333
333333
--------------
233:
233333
333333
333333
333333
333333
333333
---------------
5202:
5220002222
2220002222
2220002222
0000002222
0000002222
0000002222
2222222222
2222222222
2222222222
2222222222
---------------
12345:
122333444455555
222333444455555
222333444455555
333333444455555
333333444455555
333333444455555
444444444455555
444444444455555
444444444455555
444444444455555
555555555555555
555555555555555
555555555555555
555555555555555
555555555555555
Respuestas:
JavaScript (ES7), 70 bytes
Toma la entrada como una cadena. Devuelve una cadena con un salto de línea final.
Pruébalo en línea!
¿Cómo?
Método
Construimos la salida carácter por carácter caminando a través de una matriz cuadrada y convirtiendo cada celda en un índice en la cadena de entrada.ix,y
Coordenadas para indexar cadenas
El límite superior del área de dígitos n t h (indexado a 0) a lo largo de cada eje está dado por A000096 :un nth
u0=0,u1=2,u2=5,u3=9,u4=14,u5=20,...
Dado un entero , podemos encontrar en qué área n = ⌊ x ⌋ + 1 se encuentra resolviendo:k n=⌊x⌋+1
Llevando a:
n=⌊ √
Para cada celda , definimos:(x,y)
Estos valores se convierten en índices i x , y en la cadena de entrada haciendo:vx , y yox , y
Condiciones de detención
Sabemos que hemos alcanzado:
el límite derecho de la matriz cuando el carácter en no existe y tenemos x > yyox , y x > y
el límite inferior de la matriz cuando el carácter no existe y tenemosx ≤ y
fuente
J ,
1615 bytes-1 byte gracias a FrownyFrog!
Pruébalo en línea!
Toma
N
como una cuerda.Explicación de la solución inicial:
Sesión de prueba con entrada
203
:fuente
)
, su respuesta APL es la misma que la que habría sido mía.[:<:@
parece bastante costoso. ¿Podría anteponer algo a la lista en la que está indexando para tener en cuenta la indexación 1 (por ejemplo, anteponer un 0 para mover cada elemento necesario 1 posición hacia la derecha)?{⍵[∘.⌈⍨(/⍨)⍳⍴⍵]}
?Haskell ,
605958 bytesPruébalo en línea!
Versión sin puntos (68 bytes)
Pruébalo en línea!
fuente
Python 2 , 71 bytes
Pruébalo en línea!
Primero genera la primera fila
r
, luego iterar
para imprimir cada línea.fuente
R , 59 bytes
Pruébalo en línea!
fuente
a
como un vector de caracteres, lo que le permite establecerg=seq(a)
directamente.Jalea , 7 bytes
Pruébalo en línea!
Salida clarificada.
fuente
05AB1E ,
141110 bytesGuardado 1 byte gracias a Magic Octopus Urn / Adnan
Pruébalo en línea!
Explicación
fuente
APL (Dyalog Classic) , 16 bytes
Estoy separando esta solución de la publicación con mi respuesta J, como lo sugirió Jo King
Pruébalo en línea!
fuente
Python 2 , 74 bytes
Pruébalo en línea!
fuente
Excel VBA, 95 bytes
Una función de ventana inmediata anónima de VBE que toma entradas
[A1]
y salidas de la consolaUngolfed y comentó
fuente
MATL ,
1512 bytesPruébalo en línea!
Sospecho que esto se puede acortar, pero no es tan malo ...
fuente
Agregar ++ , 35 bytes
Pruébalo en línea!
Cómo funciona
Tomamos la entrada como una lista de dígitos, mientras que nos impide a) tener que convertir a dígitos con
BD
, y también tener que guardar los dígitos, lo que tomaría dos bytes.Primero, generamos un rango desde [1 ... len (input)] connorte en el rango norte veces. Como la vectorización automática no existe en Add ++, la comprimimos consigo misma [ [ 1 , 1 ] , [ 2 , 2 ] . . . [ n , n ] ] . Luego aplicamos el mapa estelar , junto con la repetición sobre los pares:
bLR
, luego repetimos cada elementodBcB]
para crear una lista de pares£X
antes de concatenarlos en una matriz plana (¦Ω+
).A continuación, duplicar esta matriz y mesa por el máximo,
d‽b>
. Es decir, cada elemento de la matriz se empareja entre sí desde la segunda matriz y el comando máximo diádico se ejecuta sobre el par. Para una entrada de ejemplo de [6 5] , esto crea la matriz [1 2 2 2 2 2 2 2 2] , que es una versión aplanada del mosaico, como los índices para la matriz. Por desgracia, Añadir ++ utiliza matrices 0-indexados, por lo que necesitamos para disminuir cada elemento:1€Ω_
.Luego, indexamos en la lista de entrada, presionando la entrada nuevamente (X , entonces el tamaño de la pieza es
A
), lo que nuevamente ahorra bytes al tomar la entrada como una lista. Indice en la lista con€Ω:
antes de cortar la matriz en las piezas alargadas adecuadamente. Si el número de dígitos en la entrada se denota poro elXt h número triangular . Generamos eso empujando la longitud de la entrada, calculando el rango de 1 a ese valor, luego tomando la suma con norte , pero los argumentos están actualmente en el orden incorrecto, por lo que los intercambiamos
AbLR¦+
. Ahora, la pila, para una entrada de [6 5] , se ve como [[6 5 5 5 5 5 5 5 5] 3] .T
corta la matriz en trozos de tamaño$
antes de cortarlos y volver con ellosT
.fuente
Carbón de leña , 17 bytes
Pruébalo en línea! Explicación:
Recorre los índices de los personajes en orden inverso.
Calcule el tamaño del cuadrado.
Dibuja el cuadrado usando el personaje actual.
fuente
Lienzo , 12 bytes.
Pruébalo aquí!
fuente
Python 2 ,
7673 bytes-3 bytes gracias a Lynn .
Pruébalo en línea!
fuente
Carbón , 14 bytes
Pruébalo en línea!
¿Cómo?
... ¿Se puede jugar a este método?
fuente
×⊕κι
aunque dos veces.ι
yκ
cambian en cada iteración del ciclo Each.Stax , 12 bytes
Ejecutar y depurarlo
Usando este algoritmo .
Explicación:
Stax ,
20191816 bytesEjecutar y depurarlo
Explicación:
fuente
Adjunto , 34 bytes
Pruébalo en línea!
Explicación
Funciona de manera similar a la respuesta J de Galen Ivanov .
fuente
K (ngn / k) , 16 bytes
Pruébalo en línea!
fuente
C (gcc) , 130 bytes
¿Quién necesita matemáticas sofisticadas cuando puedes usar la fuerza bruta?
Pruébalo en línea!
fuente
QBasic 1.1 , 127 bytes
-4 gracias a DLosc .
Utiliza una versión modificada del algoritmo Python 2 de xnor .
La entrada es una cadena sin comillas. La salida está
\n
separada sin espacios adicionales o\n
s.fuente
QBasic , 111 bytes
Una función anónima que solicita entradas y salidas a la consola.
fuente
Php 7.1 , 163 bytes
Vía CLI proporcionando el número como argumento:
No tan golfizado:
Salida:
Método:
Básicamente construya cuadrados de matriz multidimensionales que consisten en el dígito, y luego superponga todos ellos (array_replace_recursive).
(Sí, sé que esto es vergonzosamente largo).
fuente
Rubí , 80 bytes.
Pruébalo en línea!
Similar a la respuesta de ovs
fuente
Japt, 12 bytes
Toma la entrada como una cadena, emite una matriz de cadenas.
Intentalo
Explicación
fuente
uBASIC , 120 bytes
Una función anónima que toma la entrada desde STDIN y sale a STDOUT
Pruébalo en línea!
fuente
Visual Basic .NET (VBC) , 198 bytes
Una
Sub
rutina que toma entradas de STDIN y salidas a STDOUT.Parece que no puede hacer que StrDup funcione: /
Pruébalo en línea!
fuente
Lua,
149140 bytesFunción que acepta una lista de cadenas de dígitos e imprime el resultado en stdout. Este es mi primer intento de golf de código (y la elección del idioma tampoco ayuda), así que tengan paciencia conmigo :)
Pruébalo en línea!
Sin golf:
fuente
Perl 5 +
-nalF -M5.010
, 67 bytesPruébalo en línea!
fuente
Yabasic , 108 bytes
Una función anónima que toma entradas de STDIN y salidas a STDOUT
Pruébalo en línea!
fuente