¿Conoces los estantes apilables que son básicamente cajas de madera que se pueden apilar juntas? Vamos a simular la construcción de algunas estanterías de libros con arte ASCII.
Nuestros libros tienen un tamaño convenientemente uniforme, y todos se parecen a lo siguiente:
|X|
|X|
|X|
Las estanterías son cajas individuales, siempre con tres caracteres de altura en el interior (lo suficiente como para que quepa un libro en posición vertical), compuestas de |
caracteres a la izquierda y a la derecha, -
caracteres para la parte superior e inferior y lo suficientemente anchas para caber en los X
libros (donde X
hay una entrada entero). Por ejemplo, aquí hay una estantería de tamaño 3
:
|---------|
| |
| |
| |
|---------|
porque puedes meter 3
libros así
|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|
La entrada será dos enteros estrictamente positivos X
y Y
dónde X
está el ancho de los estantes que tenemos (medidos en libros) y Y
cuántos libros tenemos que apilar. Si tenemos más libros que los que caben en un solo estante, necesitamos agregar más estantes en la parte superior. Por ejemplo, aquí está la entrada 4 wide / 6 books
:
|------------|
||X||X| |
||X||X| |
||X||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Si Y % X > 0
, lo que significa que el número de libros no es un múltiplo entero del tamaño del estante, los libros restantes deben ir en la posición superior izquierda más (como en el caso con 4 6
, arriba) y la parte restante de ese estante llena con espacios
Entrada
- Dos enteros estrictamente positivos en cualquier formato conveniente , cada uno
>0
. - Puede tomar la entrada en cualquier orden (por ejemplo, primero el tamaño de los estantes, luego el número de libros o viceversa). Indique en su envío el orden de entrada.
- Puede suponer con seguridad que ninguna de las entradas será mayor que el
[int]
tamaño predeterminado de su idioma (o equivalente).
Salida
La representación artística ASCII resultante de los libros y estanterías.
Reglas
- Las nuevas líneas o espacios en blanco iniciales o finales son opcionales, siempre que los caracteres se alineen correctamente.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos adicionales
6 wide / 2 books
|------------------|
||X||X| |
||X||X| |
||X||X| |
|------------------|
2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
4 wide / 9 books
|------------|
||X| |
||X| |
||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Respuestas:
JavaScript (ES6),
1009998 bytesToma el ancho
w
y el número de librosb
en sintaxis curry(w)(b)
.Formateado y comentado
Casos de prueba
Mostrar fragmento de código
fuente
Bash (+ utilidades),
130,108106 bytesUna tubería única y continua para proyectar sus estanterías.
Registro de cambios:
printf + seq
con un brutoprintf
, -10 bytesGolfed
¡Pruébelo en línea!
Cómo funciona
$./shelf 2 3
printf %$2s\\n
- generar n caracteres de espacio en blanco, uno por libro (como se muestra_
)___
fold -$1
- doblarlos por la longitud del estantesed "s/ /|X|/g;"
- reemplazar_
conX
, agregar portadas de libros:;/.\{$[$1*3]\}/!s/$/ /;t
- Almohadilla derecha con espacios (como se muestra_
)h;s/./-/gp;x;p;p;p;x
- triplicar cada línea y agregar---
antes y después.sed 's/.*/|&|/'|tac
- envolver las líneas| |
, invertir con tacfuente
t
lugar deb
eso no necesitas la{}
. Puede omitir els/./-/g
porque ya son-
s. Pruébalo en línea!Python 2,
133113105 bytesEstoy seguro de que hay una mejor manera ...
Se toma entrada
width, books
-20 bytes gracias a @ovs por notar una función lambda innecesaria.
-8 bytes gracias a @ovs por acortar la entrada.
fuente
X,Y=input()
es una forma más corta de tomar los valores to.X, Y
, ¿verdad?'|'
como una variable.Lote, 261 bytes
Utiliza mi truco de mi respuesta Batch a Let's play tennis para imprimir fácilmente muchos
|
personajes.fuente
Haskell , 100 bytes
x#y
devuelve la cadena de anchox
yy
libros.Pruébalo en línea!
La función / operador principal es
#
. Cuandox<y
divide los librosy-x
yx
luego vuelve a aparecer. Cuandox>=y
,w
yb
son los dos tipos de líneas, menos los exteriores|
s y la nueva línea.El operador auxiliar
s?n
concatenan
copias de la cadenas
.fuente
PowerShell ,
149134bytesPruébalo en línea!
Toma entrada
$w
idth y$b
ooks. Establece la cadena$s
como uno de los estantes horizontales. Entonces tenemos dosif
declaraciones.El primero verifica si tenemos libros "restantes". Si es así, sacamos el estante, el (número de libros más el número de espacios)
*3
y otro estante.A continuación, vemos si todavía tenemos libros restantes después de eliminar los restos (
$a
). El mismo tipo de configuración, excepto que estamos usando$w
varios libros. Dado que en este punto,$b
se garantiza que es un múltiplo de$w
(porque eliminamos el resto$a
), no debemos preocuparnos por el redondeo.Se eliminó la
[math]::Floor()
llamada, ahorrando 15 bytes.Todas estas cadenas se dejan en la tubería, y
Write-Output
sucede implícitamente al finalizar el programa.fuente
CJam ,
6261 bytesToma entrada como
width books
Pruébalo en línea!
Explicación
fuente
Python 3, 142 bytes
Sigo trabajando en eso.
b
es para 'número de libros' yw
es para ancho de estantería.fuente
R=b%w
se mueva a la siguiente línea. Además, debería poder eliminar el espacio en blanco alrededor de esos tres=
para guardar algunos bytes.d+3*p+d if R!=0 else ''
conR and d+3*p+d or''
d+3*p+d
?AHK, 208 bytes
Hay algunas cosas que me frustran aún más en el golf:
%1%
&%2%
) en las funciones matemáticas porque esperan la entrada de variable o número y asumirá que el no escapado1
es el número uno en lugar del nombre de la variableUna versión más fácil de leer de lo anterior se ve así:
Si a
Loop
no usa corchetes{}
, solo la siguiente línea es parte del bucle. Si establece el valor de una variable usando en:=
lugar de=
, puede eliminar los caracteres de escape de signo de porcentaje. Tilde n es el personaje de nueva línea.fuente
Java 7,
230224222 bytesExplicación:
Código de prueba:
Pruébalo aquí
Salida:
fuente
.repeat
realmente, realmente ayuda en este desafío .PowerShell, 109 bytes
Menos guión de prueba de golf:
Salida:
PowerShell, 109 bytes, alternativa
fuente
Python 2 ,
120118 bytesPruébalo en línea!
He tenido la intención de ir a este en los últimos días. Ahora que finalmente tengo tiempo para hacerlo, ya hay una respuesta Python más corta. Oh bueno, acabo de publicar como una alternativa.
Entrada tomada como ancho, libros
fuente
SOGL , 64 bytes
Explicación: Primera función:
segunda función:
Esta función espera un número (recuento de libros) en la pila y muestra los libros
Más abajo, el ejemplo dado es e = 3 (ancho de estantería) yb = 8 (cantidad de libros)
esta es la línea superior / inferior de la estantería y siempre permanece en la primera parte de la pila (estantería medio vacía)
Primera parte principal
Y la ultima parte
fuente
Java (JDK) , 124 bytes
Pruébalo en línea!
Créditos
fuente
PHP> = 7.1, 138 bytes
Versión en línea
fuente
Lienzo , 33 bytes.
Pruébalo aquí!
Explicación (algunos caracteres han sido reemplazados para parecer más monoespaciales):
fuente
Pip
-n
, 45 bytesToma el ancho y el recuento de libros, respectivamente, como argumentos de línea de comandos. Pruébalo en línea!
Explicación
Ejecutamos un bucle para imprimir los estantes uno por uno de arriba a abajo. En cada iteración, actualizamos
b
(la cantidad de libros para imprimir) restandoy
(la cantidad de libros impresos en esa iteración). Cuandob
llega a 0, el ciclo sale.Porque eso es un poco complicado, aquí hay un ejemplo de la primera iteración cuando
a = 3, b = 8
:que luego se imprime como
fuente
Pyth , 56 bytes
Acepta el ancho del estante, el recuento de libros como argumentos separados en ese orden. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .
fuente
Adelante (gforth) , 622 bytes (minimizado (eliminar comentarios, sangría, nombres de palabras de 1 carácter) a 303 bytes)
Mi primera jugada con Forth :)
Pruébalo en línea!
Salida
fuente