Recibí este desafío de Codingame y tengo curiosidad por encontrar mejores soluciones que la mía:
Dado un ancho a través de la entrada estándar, dibuje un cuadrado hueco de '#' en el ancho y largo dados.
Ejemplo:
5 resultados en
#####
# #
# #
# #
#####
Usé Python para resolver esto, así que estoy particularmente interesado en otro código de Python. Pero no dude en publicar su solución en el idioma que desee.
code-golf
string
ascii-art
number
code-golf
grid
code-golf
string
ascii-art
code-golf
alphabet
cipher
code-golf
math
number
code-golf
quine
code-golf
palindrome
polyglot
code-golf
number
array-manipulation
counting
logic
code-golf
string
primes
binary
decision-problem
code-golf
ascii-art
kolmogorov-complexity
popularity-contest
code-golf
probability-theory
code-golf
string
code-golf
python
polyglot
programming-puzzle
c++
code-golf
math
code-golf
binary
integer
bitwise
code-golf
rational-numbers
code-golf
string
palindrome
code-golf
ascii-art
code-golf
code-golf
string
fibonacci
code-golf
math
sequence
code-golf
code-golf
string
palindrome
code-golf
string
code-golf
math
primes
source-layout
code-golf
sequence
binary
integer
code-golf
math
arithmetic
game
code-golf
restricted-source
palindrome
code-golf
restricted-source
palindrome
code-golf
combinatorics
binary
code-golf
string
math
code-golf
ascii-art
number
code-golf
cipher
code-golf
base-conversion
counting
code-golf
sequence
random
classification
code-golf
string
subsequence
code-golf
permutations
code-golf
string
code-golf
string
cipher
code-golf
kolmogorov-complexity
arithmetic
integer
code-golf
quine
markov-chain
code-golf
string
code-golf
code-golf
ascii-art
maze
Sebingel
fuente
fuente
Respuestas:
Pyke, 11 bytes
Pruébalo aquí!
fuente
Carbón de leña , 6 bytes
Código:
Explicación:
Pruébalo en línea!
fuente
N
también se puede usar en una expresión, comoint(input())
en Python. Si este desafío fuera "dibujar un rectángulo hueco con el ancho y la altura dados", la solución podría serBNN#
.MATL , 12 bytes
Pruébalo en línea!
Explicación
fuente
Jolf, 8 bytes
fuente
#
requieren tres ?Python 2,
6254 bytesDevuelve
#\n#
cuando la entrada es1
Versión de 55 bytes que imprime
Versión de 62 bytes que funciona para cualquier entrada:
fuente
f=
menos que lo use, lo cual no hace.COW ,
426405348330 bytesPruébalo en línea! Cambie el número en la segunda línea a cualquier número para cambiar la salida.
El intérprete de COW que estoy usando aquí fue escrito en Perl (y es más nuevo que este desafío), pero aún puede obtener el mismo resultado ingresando el código aquí .
Explicación
fuente
Python 2,
5958 bytesrepl.it
Nota: Una entrada de
1
produce una salida de##
, pero nunca se produciría un cuadrado hueco para una entrada menor que3
, por lo que supongo que esto está bien.fuente
Java 7,
113112110 bytes1 byte guardado gracias a @ OlivierGrégoire ;
2 bytes guardados gracias a @cliffroot .
Solución derivada basada en mi respuesta Crear un cuadrado cruzado .
Pruébalo aquí
fuente
for(int i=n,j;i-->0;r+="\n")
? Como no nos importa cuál es el resultado final o el superior, no tiene ningún sentido mantener ese orden, ¿verdad?PowerShell v2 +,
4847 bytes-1 byte gracias a JohnLBevan
Toma entrada
$n
, establece$z
como$n
hashmarks, con$n
post-decrementado. Encapsula eso en parens para colocar una copia en la tubería. Luego usa el operador de coma para crear una matriz de$n
líneas pre-decrementadas de#
espacios#
. Esos quedan en la tubería. Luego se coloca$z
nuevamente en la tubería. La salida implícitaWrite-Output
al final introduce una nueva línea entre elementos, por lo que la obtenemos gratis.Dado que el código del OP no funciona para la entrada
n <= 1
, tomé eso como que tampoco necesitamos admitir la entrada1
.Ejemplos
fuente
param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
C, 98 bytes
Uso:
fuente
05AB1E , 20 bytes
Pruébalo en línea!
O 18 bytes si podemos ignorar
1 <= n
:Pruébalo en línea!
fuente
WinDbg,
206200182170 bytes-6 bytes desde la eliminación de parens
.if
y el uso enj
lugar de segundo.if
-18 bytes utilizando en
f
lugar de a.for
para construir las cadenas.-12 bytes por cadenas que no terminan en NULL, sino que pasan la longitud a
da
La entrada se pasa a través del pseudo-registro
$t0
(por ejemplor $t0 = 5; {above-code}
).Explicación:
Salida de muestra:
fuente
JavaScript,
6158 bytes¡Guardado 3 bytes gracias a @lmis !
(No maneja
0
o1
)¡Para 13 bytes adicionales (a 71 bytes ), puede!
Estas soluciones son bastante simples: almacenan mucho para no repetirse y ahorrar unos pocos bytes. Sin minificar sin la variablsm se vería así:
¡Intentalo!
fuente
!n?'':n==1?'#':
15 bytes adicionales al comienzo del cuerpo de la función, puede manejar entradas0
y1
.n=>(b='#'[r='repeat'](n))
y luego#${" "[r](n-=2)}
etc. te ahorra 3 bytes al evitar repetirrepeat
:)Python, 109 bytes
fuente
list(' '*n)
con[' ']*n
. También puede reemplazarx%(n-1)
conx%~-n
for
bloque en una lista de comprensión, puede guardar más de 20 bytesint()
y coloque los corchetesprint
.<1
lugar de==0
.Ruby, 39 bytes
Resulta ser más corto de esta manera que todas las cosas elegantes que estaba intentando. Tenga en cuenta que esto no maneja 0 o 1 en absoluto.
fuente
Python 2, 50 bytes
Obras para
n>=2
. Imprime cada línea con un signo de libra,n-2
del símbolo apropiado, luego otro signo de libra.Aliasing el símbolo de la libra da la misma longitud:
Otros intentos
fuente
Haskell, 49 bytes
Obras para
n>=2
. Define la operación de intercalar un carácter entre#
unan
cadena de caracteres terminados en línea nueva, luego lo aplica dos veces para hacer una cuadrícula 2D.Llamar como:
fuente
C,
8382807877 BytesEscóndete en una multiplicación y guarda un byte ...
También cuenta atrás j y ahorra unos cuantos más ...
Cuenta atrás i de n a cero y guarda algunos bytes ...
Un poco más fácil de entender y 1 byte más
fuente
&&
lugar de&
?Groovy,
5150 bytesfuente
PHP,
8169 bytesCorrer con
-r
; proporcionar información como argumento.Lanza un
DivisionByZeroError
para input =1
.fuente
R, 68
70bytesFunciona para n> 1. Gracias a @Billywob por un par de bytes intercambiando la matriz por una matriz.
Utiliza rbind y cbind para colocar filas y columnas de
#
's alrededor de una matriz de espacios n-2. Las nuevas líneas también están vinculadas a las filas. La nueva línea en la fuente es significativa. La entrada es de STDINfuente
\n
. Puede guardar dos bytes usando enmatrix
lugar dearray
sin embargo.Lisp común,
150130 bytes-20 gracias a @Cyoce y @AlexL.
Uso:
Básicamente se usa
format
dos veces para la parte superior e inferior y un bucle para las filas intermedias. La llamada de formato para la parte superior e inferior genera una línea que comienza#
y se rellena al ancho apropiado con#
s. La llamada de formato para las filas intermedias funciona de manera similar, excepto que el relleno es espacios y#
se imprime al final de la línea.Nota: Soy bastante nuevo en Lisp y espero tener mucho margen de mejora en esto.
fuente
s
? ¿O soy una función anónima?dotimes (h (- v 2))
o podría serdotimes(h(- v 2))
?Haskell, 67 bytes
Ejemplo de uso:
Cómo funciona:
fuente
Gelatina , 13, bytes
TryItOnline! o prueba de 0 a 15
¿Cómo?
fuente
Pip , 16 bytes
15 bytes de código, +1 para
-n
bandera.Funciona para entrada> = 2. ¡ Pruébelo en línea!
Explicación de la versión ungolfed
Primero, definimos una función
y
que toma un argumento de cadena, lo repitea-2
veces (dondea
es la primera entrada de línea de comando) y ajusta el resultado#
.A continuación, aplicamos esta función dos veces, una vez normalmente, luego otra vez con map, para obtener el cuadrado como una lista de cadenas:
Para entrada de
4
,(y s)
resultados en"# #"
yy M (y s)
en["####"; "# #"; "# #"; "####"]
. Este último valor se imprime, con el-n
indicador que hace que se separe de la nueva línea.Trucos de golf
Para pasar de la versión no golfista a la golfista:
Y
es un operador, lo que significa que podemos usarlo en una expresión. En lugar deY...
seguir(ys)
, simplemente podemos hacer(Y...s)
.y
; asíyM(Y_Xa-2WR'#s)
que no funcionará Solución: intercambie los operandos delM
operador ap. Mientras uno de ellos sea una función y el otro sea un tipo iterable, no importa en qué orden entren.fuente
Raqueta 113 bytes
Sin golf:
Pruebas:
Salida:
fuente
SpecBAS - 57 bytes
?
es la abreviatura dePRINT
,#13
es el retorno de carro que se puede agregar al final de una cadena sin necesidad+
de unirlos.El apóstrofe mueve el cursor de impresión una línea hacia abajo.
fuente
Atascado,
2927 BytesBastante largo para un lenguaje de "golf", pero he olvidado cómo funciona mucho: P
Explicación:
fuente
C #,
154152 bytesGolfizado:
Sin golf:
EDIT1: optimización de rango de bucle.
fuente
Lithp , 117 bytes
Línea dividida en dos para facilitar la lectura:
Uso de la muestra:
fuente