Dado un número entero n ≥ 1, genera una representación 2D † de un signo de porcentaje de ancho n . La construcción es la siguiente:
- Cree una matriz n por n (o lista de listas) llena de ceros.
- Inserte unos en las esquinas superior izquierda e inferior derecha.
- Coloca unos en la diagonal desde la esquina inferior izquierda hasta la esquina superior derecha.
Para la entrada n = 4, esta construcción se vería así:
1. 4x4 matrix of 0s
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2. 1s in TL and BR corners
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
3. 1s across BL-TR diagonal
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
Este es un código de golf , por lo que gana el programa más corto en bytes.
† Uso una matriz de 1s y 0s, pero también es aceptable usar una cadena de caracteres y espacios que no sean espacios en blanco. Entonces, el ejemplo anterior podría verse así:
# #
#
#
# #
o
# #
#
#
# #
Casos de prueba
n
output
1
1
2
1 1
1 1
3
1 0 1
0 1 0
1 0 1
4
1 0 0 1
0 0 1 0
0 1 0 0
1 0 0 1
10
1 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
Nota final
Agregar una explicación sería muy apreciado.
'1'+'0'*(n-2)
con espacios en blanco insertadosRespuestas:
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
²Ḷ%’¬s
o+þ%’=2
²Ḷọ’s
está tan cerca ...ḍ@
pero son dos bytes.⁼þµ+1¦Ṫṁ³UG
... hasta²
que apareció una solución de Dennis .JavaScript (ES6), 52 bytes
fuente
V , 15 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 ,
5857 bytesPruébalo en línea!
fuente
GNU APL,
1715 bytesEste es un día extraño ... GNU realmente venció a Dyalog APL ... woah.
TIO no es compatible con GNU APL ...
Explicación (la entrada es
⍵
):fuente
1=⍵∨
e implementar en mi soluciónPython 2 , 46 bytes
Pruébalo en línea!
Salidas como
Python 2 , 48 bytes
Pruébalo en línea!
Salidas como
Python 3 , 48 bytes
Pruébalo en línea!
Un enfoque de sustitución de cadenas bastante diferente en Python 3. Resultados como:
fuente
10L
10
?L
al final para poder cortar el mismo número de caracteres al final de los números grandes y pequeños.10
y10L
eran diferentes.Jalea , 9 bytes
Pruébalo en línea!
Cómo funciona
fuente
APL (Dyalog) , 18 bytes
Pruébalo en línea!
Hacer que esto funcione para la entrada 1 ha agregado 6 bytes.
Mirando el caso de prueba 4, vemos que la salida es
Esto es básicamente 1 0 0 repetido en toda la matriz. En otras palabras, 1 0 0 en forma de matriz de 4 por 4. Entonces, en esta solución, primero generamos este vector con 1 y ceros finales usando
1=⍳⍵-1
y luego le damos forma⍵ ⍵⍴
. Pero esto funciona para la entrada 1, por lo que debemos crear un condicional y ganar 6 bytes ...fuente
Haskell , 55 bytes
Al principio, mi enfoque consistía en generar recursivamente la matriz de identidad transpuesta, pero luego arreglar la primera y última línea requería algunas distinciones de casos feos / largos. Así que busqué otra forma de generar la matriz de identidad, que es cómo encontré esta idea.
Pruébalo en línea!
Explicación
genera esta matriz (para
n=4
):Como puede ver, el elemento superior izquierdo es
2
(en general), todos los elementos diagonales son5
(en generaln+1
) y el elemento inferior derecho es8
(en general2*n
). Entonces, todo lo que tenemos que hacer es verificar six+y
es un elemento de[2,n+1,2*n]
.fuente
R ,
5442 bytes-12 bytes gracias a Jarko Dubbeldam
devuelve una matriz; lee de stdin. crea una matriz de identidad
diag(n)
, la voltea de arriba a abajo[,n:1]
, establece la parte superior izquierda e inferior derecha1
y luego escribe en console (''
) con anchon
.Pruébalo en línea!
fuente
pryr::f
).R+pryr
así que lo consideraría un idioma separado; eres libre de enviar eso! Entonces podría usar la idea de la respuesta de Cows quack, que creo que sería incluso más corta que esta en ese contexto (un 1-liner).function(n)
probablemente aún sería más cortofunction(n)matrix(rep(c(1,rep(0,n-2)),n+1),n,n)
MATL , 7 bytes
¡Pruébalo en MATL Online!
Explicación
Crear matriz de identidad (
Xy
), voltear verticalmente (P
), escribir ((
) valor 1 (l
) en la primera y última entrada (5L
), que están en la parte superior izquierda y en la parte inferior derecha.fuente
Dyalog APL,
121110 bytesPruébalo en línea
-1 byte gracias a lstefano.
¿Cómo?
fuente
,⍨⍴×,2↓⊢↑×
(10 bytes). Estoy tentado de agregar: no use demasiados viajesC # (.NET Core) ,
121 9188 bytes-30 bytes porque la vieja forma era estúpida.
-3 bytes moviéndose alrededor de la inicialización variable
Pruébalo en línea!
Los bucles iteran hacia abajo en la matriz para completar los 1. Devuelve una matriz de 1 y 0.
fuente
b
comovar
guardar algunos bytes.05AB1E ,
14117 bytesPruébalo en línea!
Explicación
fuente
Carbón ,
14127 bytes-5 bytes gracias a Neil !
Pruébalo en línea!
fuente
Nν◨/ν←↙ν‖O↘
, ¡pero luego se me ocurrió↗N⸿/‖O↘
!⸿
hace. ¿Se restablece a la posición original?⸿
es como¶
que se mueve hacia abajo una fila, pero siempre va a la columna cero (según lo medidoJ
) en lugar de la columna al comienzo de la cadena, por ejemplo,J⁵¦⁵⸿
es lo mismo queJ⁰¦⁶
.C ++, 144 bytes
Aprovecha la diferencia de un byte entre '#' y 35
fuente
'#'
y35
?Mathematica, 72 bytes
entrada
salida
fuente
Grid@s
cons
al ahorro 5 bytes.Python 2 ,
8662 bytesPruébalo en línea!
-24 bytes: ¡Gracias a una idea de Rod!
fuente
PowerShell , 67 bytes
Pruébalo en línea!
Toma entradas
$n
y bucles desde0
hasta--$n
(es decir,$n
pre-decrementado). Cada iteración, construimos una cadena de1
seguido de$n-1
0
s, luego multiplicamos los3
tiempos de salida (por ejemplo,100010001000
para la entrada de5
). Luego lo indexamos en forma rotativa a partir de0
a0 + $n
. Esos caracteres se-join
editan en una cadena, que se deja en la tubería. La salida es implícita.(Nota: esto requiere 9 bytes adicionales para manejar el caso especial de
n=1
. A continuación se muestra el código de 58 bytes si estamos garantizadosn>1
)fuente
Dyalog APL v16, 23 bytes
Pruébalo en línea!
Explicación:
fuente
Lua, 117 bytes
Intentalo
El código es bastante simple. Establece m en el primer argumento, luego agrega 0 para convertirlo en un número, luego itera hacia atrás para la coordenada Y, avanza a través de la coordenada X y pondrá un # si x == y si son las otras esquinas.
Este programa nunca usa la palabra clave "if".
fuente
Octava, 37 bytes
Pruébalo en línea!
Genera una matriz dispersa que representa el signo de porcentaje.
fuente
Japt , 12 bytes
Devuelve una matriz / matriz 2D.
Pruébalo en línea! utilizando la
-Q
bandera para mostrar la salida con formato de matriz.Explicación
Implícito:
U
= entero de entradaSquare
U
(²
), crea la matriz[0, U*U)
(o
) y asigna cada elemento por ...1
si es divisible (v
) porU-1
(UÉ
), de lo contrario0
.Establezca el elemento (
h
) en el índice 0 (T
) en1
.Divida la matriz en rodajas (
ò
) de longitudU
.fuente
hT1
, ya0
que técnicamente ya es divisible porU
para todosU
. Aparte de eso, gran trabajo :-)1
. Sin ella, regresa[[0]]
porque aparentemente cero no es divisible por cero.PHP, 53 bytes
La longitud del lado de la matriz es
$l
. Este código tiene un aviso PHP e incluso un aviso PHP para la división por 0 cuando$l=0
, ¡pero hace el trabajo!fuente
$l
). Lamentablemente, esta no es una de nuestras formas aceptadas de recibir aportes . En la meta publicación vinculada encontrará alternativas, por ejemplo, utilizando argumentos de línea de comando como se ve en la respuesta de ricdesi .while($i**.5<$n=$argn)echo$i++%~-$n?0:1,"\n"[$i%$n];
owhile($i**.5<$n=$argn)echo+!($i++%~-$n),"\n"[$i%$n];
(52 bytes cada uno)<?
al principio.Python 2 , 93 bytes
Pruébalo en línea!
fuente
Ruby, 47 bytes
Devuelve una matriz de matrices.
El código es bastante sencillo.
n-1
matriz con1
el primer elemento y el resto con0
s (p[1, 0, 0, 0]
. Ej. )n
rodajas den
elementosPruébalo en línea!
fuente
J, 14 bytes
Sin golf:
Pruébalo en línea!
fuente
0=<:|i.@,~
?Python 3, 97 bytes
Explicación
m=[[0+(j==n-i-1)for j in range(n)]for i in range(n)]
Esta es una comprensión de la lista,
0+(j==n-i-1)
es una forma más corta de convertirj==n-i-1
a int (en oposición a laint
función) y luegom[-1]=m[0]
es más corta que hacer la esquina inferior derecha 1, ya que las filas superior e inferior son idénticas.fuente
Adelante,
273 (sin comentarios)170 (golf-ish)(273 versión para aclarar la versión comentada:)
(Tenga en cuenta que, dado que el espacio en blanco es el delimitador principal en Forth, eliminar cada retorno de carro no haría ninguna diferencia. La sangría, por supuesto, lo hace).
(Comentado:)
(Ejemplos de ejecución:)
(Nota final: funciona a uno menos que el ancho de bits del intérprete Forth. Ejecuté lo anterior en gforth, AMD64. Un antiguo Forth de 16 bits solo tendría 15 bits de ancho y necesitaría un poco de modificación).
fuente
C # (.NET Core) , 65 bytes
Pruébalo en línea!
El algoritmo es significativamente diferente de la otra respuesta de C #, así que decidí publicarlo por separado en lugar de como una mejora. Inspirado por la respuesta Jelly mejor calificada en realidad, estaba haciendo algo un poco menos compacto antes. La salida es una matriz lineal, por lo que requeriría algo de lógica para envolverla en un 2D fuera del método tal como está. Una versión alternativa requiere 6 bytes adicionales para salir como una verdadera matriz 2D:
También tengo una versión interesante no competitiva.
Esto termina con casi la salida correcta, lo que resulta en un
IEnumerable<bool>
verdadero / falso en lugar de 1/0, y es una estructura lineal en lugar de 2D, y aunque no es necesario para esa línea exacta de código,using System.Collections.Generic
es necesario hacer algo útil con el salida. Como dije, está muy cerca de ser válido pero no del todo.fuente
?1:0
trabajos y creo que una matriz del resultado debería estar bien. Las colecciones que usan tampoco son necesarias para ese código.w*w
una variable y mover laint
declaración fuera del ciclo?w*w
con una variable de un solo carácter ahorra 4 bytes, moverseint i=0
fuera del bucle requiere un punto y coma que cuesta 1 byte, y luego agregar,s=w*w
a la declaración cuesta 6 bytes, por lo que en realidad obtiene +3 bytes.