¡Eres el anfitrión de los Juegos Olímpicos!

17

¡Eres el anfitrión de los Juegos Olímpicos y necesitas construir una piscina fantástica por el bien de la ocasión, pero los supervisores a menudo cambian de opinión con respecto a las dimensiones y necesitan una forma rápida de reconstruirla con el tamaño solicitado!


Dados dos enteros, Ly x, su tarea es construir una piscina de longitud Ly xcarriles.

¿Cómo se construye una piscina?

  • Contiene un cuadrado interno, cuyas paredes horizontales están hechas de Lguiones consecutivos ( -), y cuyas paredes verticales están hechas de 3x - 1barras ( |). Además, hay 4 +signos en cada esquina. Veamos un ejemplo ( L = 10, x = 2):

    + ---------- +
    El | El |
    El | El |
    El | El |
    El | El |
    El | El |
    + ---------- +
    
  • Cada carril tiene un ancho de 2 unidades verticales. El cuadrado interior está lleno de x-1separadores de carriles, que consisten en símbolos Lhorizontales consecutivos :. Después de colocar los separadores de carril, nuestra piscina debería verse así:

    + ---------- +
    El | El |
    El | El |
    | :::::::::: | |
    El | El |
    El | El |
    + ---------- +
    
  • Una piscina también contiene un relleno (un cuadrado exterior), cuyas paredes horizontales son (L + 4) -sy cuyas paredes verticales son (3x + 1) |s, que rodea el cuadrado interior:

    + -------------- +
    El | + ---------- + |
    El | El | El | El |
    El | El | El | El |
    El | | :::::::::: | | El |
    El | El | El | El |
    El | El | El | El |
    El | + ---------- + |
    + -------------- +
    

¡Y esa es nuestra piscina olímpica **!


Especificaciones:

  • Por motivos de diseño y funcionalidad, tiene la garantía de que 100 ≥ L ≥ 10y 15 ≥ x ≥ 2.

  • La salida debe ser exactamente como se muestra. La salida de una agrupación "construida verticalmente" * no está permitida.

  • Se permiten espacios finales y principales.

  • Puede tomar entrada y proporcionar salida a través de cualquier método estándar .

  • Se aplican las lagunas predeterminadas .


Ejemplos / Casos de prueba:

L = 20, x = 3

+ ------------------------ +
El | + -------------------- + |
El | El | El | El |
El | El | El | El |
El | | :::::::::::::::::::: | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::::::::::::: | El |
El | El | El | El |
El | El | El | El |
El | + -------------------- + |
+ ------------------------ +



L = 50, x = 5:

+ ------------------------------------------------- ----- +
El | + ------------------------------------------------- - + |
El | El | El | El |
El | El | El | El |
El | | :::::::::::::::::::::::::::::::::::::::::::::::::: : | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::::::::::::::::::::::::::::::::::::::::::: : | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::::::::::::::::::::::::::::::::::::::::::: : | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::::::::::::::::::::::::::::::::::::::::::: : | El |
El | El | El | El |
El | El | El | El |
El | + ------------------------------------------------- - + |
+ ------------------------------------------------- ----- +


L = 10, x = 15

+ -------------- +
El | + ---------- + |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | | :::::::::: | | El |
El | El | El | El |
El | El | El | El |
El | + ---------- + |
+ -------------- +

Este es el , por lo que gana el código más corto en bytes .

* El agua podría salir si se construye verticalmente: P

** Sí, soy consciente de que cuanto más sean los carriles y cuanto más corta sea la piscina, ¡menos se verá el dibujo como una piscina!

Sr. Xcoder
fuente
Sandbox , para aquellos que pueden ver las publicaciones eliminadas.
Sr. Xcoder
¿Qué debería pasar si x>=L?
CraigR8806
@ CraigR8806 El mismo algoritmo. Solo con más carriles que la longitud de la piscina. Tengo la sensación de que has leído mal la pregunta ...
Sr. Xcoder
¿Qué pasa con el caso donde L=10y x=15? ¿No habría más carriles de los que se podrían colocar en la piscina? Podría estar malinterpretando la intención
CraigR8806
@ CraigR8806 ¡La longitud no tiene nada que ver con los carriles! Puede probarlo usted mismo con una de las respuestas existentes
Sr. Xcoder

Respuestas:

13

Carbón , 32 bytes

NθNη↓Eθ×η:  B⁺θ²⁺׳η¹↖←B⁺θ⁶⁺׳η³

Pruébalo en línea!

-4 gracias a Neil .

AST:

Program
├N: Input Number
│└θ: Identifier θ
├N: Input Number
│└η: Identifier η
├Print
│├↓: Down
│└E: Map
│ ├θ: Identifier θ
│ └×: Product
│  ├η: Identifier η
│  └':  ': String ':  '
├B: Box
│├⁺: Sum
││├θ: Identifier θ
││└2: Number 2
│└⁺: Sum
│ ├×: Product
│ │├3: Number 3
│ │└η: Identifier η
│ └1: Number 1
├Move
│└↖: Up Left
├Move
│└←: Left
└B: Box
 ├⁺: Sum
 │├θ: Identifier θ
 │└6: Number 6
 └⁺: Sum
  ├×: Product
  │├3: Number 3
  │└η: Identifier η
  └3: Number 3
Erik el Outgolfer
fuente
wow Charcoal tiene este desafío abajo :)
Downgoat
Te mantuviste fiel a tu nombre, me tienes superado.
notjagan
2
Como de costumbre, solicitud de explicación.
CalculatorFeline
@CalculatorFeline Sí, no tengo tiempo para hacer todas esas explicaciones mientras busco algo para superar al golf ... también puedes verificar el AST usando el -aargumento de la línea de comandos.
Erik the Outgolfer
¿por qué -aplantea error> _ <
Erik the Outgolfer
12

Carbón , 40 39 37 bytes

NθNηB⁺θ⁶⁺׳η³↘→B⁺θ²⁺׳η¹→F⁻η¹«M³↓P×:θ

Pruébalo en línea!

Sé que Neil ya tiene una respuesta de Carbón de carbón de aproximadamente la misma longitud, pero tomé un enfoque un poco diferente, así que pensé que también podría publicar la mía.

Explicación

NθNηB⁺θ⁶⁺׳η³↘→B⁺θ²⁺׳η¹→F⁻η¹«M³↓P×:θ
NθNη                                         take the two inputs as numbers in θ and η
      B⁺θ⁶⁺×³η³                               draw a rectangle θ + 6 by 3η + 3
                                               (characters default to |, - and +)
                ↘→                             move the cursor down one and right two
                   B⁺θ²⁺×³η¹                  draw a rectangle θ + 2 by 3η + 1
                             F⁻η¹«            for ι (unused) from 0 up until η - 1:
                                   M³↓            move the cursor down by 3
                                       P×:θ       print θ :s without moving the cursor
                                               [implicit end of for]
notjagan
fuente
1
Explicación por favor.
CalculatorFeline
@CalculatorFeline Added.
notjagan
1
¿Eh, entonces el tercer parámetro es opcional? Bien, eso me ahorra dos bytes!
Neil
11

Carbón, 40 38 36 31 bytes

A⁺²NθA⁺¹×³NηUOθη:¶¶Bθη↖←B⁺⁴θ⁺²η

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

A⁺²Nθ       Assign(Plus(2, InputNumber()), q);

Las primitivas de dibujo de carbón utilizan el recuento general de caracteres, incluidos + s, sin embargo, la entrada es solo el número de -s, por lo que debemos agregar 2 para obtener el ancho de la pared interior.

A⁺¹×³Nη     Assign(Plus(1, Times(3, InputNumber())), h);

Calcule la altura de la pared interior, nuevamente, incluyendo la fila inferior, entonces tres por carril más uno.

UOθη:¶¶     Oblong(q, h, ":\n\n");

Dibuja los carriles. Esto es simplemente un rectángulo lleno de: s verticalmente separados por dos líneas en blanco (los corchetes representan caracteres de nueva línea).

Bθη         Box(q, h);

El Rectanglecomando es exactamente lo que necesitamos para dibujar la pared interior. Editar:Box permite omitir su tercer parámetro, ahorrándome 2 bytes.

↖           Move(:UpLeft);
←           Move(:Left);
B⁺⁴θ⁺²η     Box(Plus(4, q), Plus(2, h));

Y nuevamente para dibujar la pared exterior, excepto un poco más ancha y más alta, y centrada en la pared interior.

Neil
fuente
1
¿Por qué los enlaces al código Charcoal en TIO nunca llegan al código real?
Jonathan Allan
1
@JonathanAllan Enlace al código detallado porque es más legible, además agrego el argumento para generar el código sucinto automáticamente para fines de verificación.
Neil
... pero ¿cómo es más legible 219 caracteres que 40? : p
Jonathan Allan
Podría haber buscado más y notar este consejo :)
Jonathan Allan
1
Como siempre, por favor explique.
CalculatorFeline
8

T-SQL, 284 281 bytes

DECLARE @ INT,@x INT,@S VARCHAR(MAX)='+--d--+b| +d+ |b'SELECT @=L,@x=x FROM t
P:SET @S+='| |s| |b| |s| |b| |c| |b'SET @x-=1IF @x>0GOTO P
PRINT REPLACE(REPLACE(REPLACE(REPLACE(LEFT(@S,LEN(@S)-6)+'+d+ |b+--d--+','d',REPLICATE('-',@)),'b',CHAR(13)),'s',SPACE(@)),'c',REPLICATE(':',@))

La entrada se toma de las columnas INT L y x en la tabla t preexistente , según nuestros métodos de entrada permitidos .

Básicamente, estoy creando una cadena larga con letras que representan los caracteres repetidos (d = guiones, s = espacios, c = dos puntos, b = salto de línea), luego los REEMPLAZO al final con los rellenos apropiados.

Formateado:

DECLARE @ INT,@x INT,@S VARCHAR(MAX)='+--d--+b| +d+ |b'
SELECT @=L,@x=x FROM t
P:
    SET @S+='| |s| |b| |s| |b| |c| |b'
    SET @x-=1
IF @x>0 GOTO P
PRINT REPLACE(REPLACE(REPLACE(REPLACE( LEFT(@S,LEN(@S)-6)+'+d+ |b+--d--+'
     ,'d',REPLICATE('-',@))
     ,'b',CHAR(13))
     ,'s',SPACE(@))
     ,'c',REPLICATE(':',@))

Dentro del bucle agrego 2 filas de espacios en blanco y 1 fila de dos puntos, luego al final corté esa fila divisoria y agregué el borde de la piscina antes de realizar los reemplazos.

EDITAR : guardado 3 bytes cambiando @a la variable más utilizada e intercambiando el orden de inicialización.

BradC
fuente
8

JavaScript (ES6), 137124 bytes

Golfed un poco en mi teléfono, más para seguir.

x=>y=>`+--0--+
| +0+ |
${((a=`| |1| |
`)+a+`| |2| |
`).repeat(y-1)+a+a}| +0+ |
+--0--+`.replace(/\d/g,n=>"- :"[n].repeat(x))

Intentalo

f=
x=>y=>`+--0--+
| +0+ |
${((a=`| |1| |
`)+a+`| |2| |
`).repeat(y-1)+a+a}| +0+ |
+--0--+`.replace(/\d/g,n=>"- :"[n].repeat(x))
oninput=_=>o.innerText=f(+i.value)(+j.value);o.innerText=f(i.value=50)(j.value=5)
input{font-family:sans-serif;margin:0 5px 0 0;width:50px;}
<label for=i>L: </label><input id=i type=number><label for=j>x: </label><input id=j type=number><pre id=o>

Lanudo
fuente
Me gusta este porque es interactivo: D
xDaizu
@xDaizu, mira algunas de mis otras soluciones JS, entonces;)
Shaggy
6

Python 2 , 124 120 117 bytes

-2 bytes gracias a Hyper Neutrino

l,x=input()
o='+--%s--+\n| +%s+ |\n'%(('-'*l,)*2)
print o+'| |%s| |\n'*(x*3-1)%((' '*l,' '*l,':'*l)*x)[:-1]+o[-2::-1]

Pruébalo en línea!

varilla
fuente
122 bytes (su variable tes innecesaria)
HyperNeutrino
4

SOGL V0.12 , 52 51 bytes

:┌* +1Ο;@*┐1ΟG∙⁴++⁰
b3*Ie4+⁰b3*He⁰32žbH∫3*2+4;e :*ž

Pruébalo aquí!
No está mal teniendo en cuenta que 20 bytes de esto es una función rectangular, para la cual el carbón tiene incorporado.

Explicación:

Rectangle function: (example: on stack 4, 2)
:                   duplicate the top of stack (X pos)      [4, 2, 2]
 ┌*                 get that many "-"es                     [4, 2, "--"]
    +               push "+"                                [4, 2, "--", "+"]
     1Ο             wrap the dashes in pluses               [4, 2, "+--+"]
       ;            get the duplicated X position           [4, "+--+", 2]
        @*          get that many spaces                    [4, "+--+", "  "]
          ┐         push "|"                                [4, "+--+", "  ", "|"]
           1Ο       wrap the spaces with "|"                [4, "+--+", "|  |"]
             G      get the Y value ontop                   ["+--+", "|  |", 4]
              ∙     get an array with that many strings     ["+--+", ["|  |", "|  |", "|  |", "|  |"]]
               ⁴    duplicate the dashes wrapped in pluses  ["+--+", ["|  |", "|  |", "|  |", "|  |"], "+--+"]
                ++  add everything to one array             [["+--+", "|  |", "|  |", "|  |", "|  |", "+--+"]]
Main function: (example input: 2, 5)
b3*                              push variable B (input 1, Y length) multiplied by 3                     [6]
   I                             increase it                                                             [7]
    e4+                          push variable E (input 2, X length) + 4                                 [7, 9]
       ⁰                         execute the rectangle function [in X: E+4, Y: b*3+1]                    [["+---------+","|         |","|         |","|         |","|         |","|         |","|         |","|         |","+---------+"]]
        b3*                      push variable B * 3                                                     [["+---------+",..,"+---------+"], 6]
           H                     decrease it                                                             [["+---------+",..,"+---------+"], 5]
            e                    push variable E                                                         [["+---------+",..,"+---------+"], 5, 5]
             ⁰                   execute the rectangle function [on X: E, Y: B*3-1]                      [["+---------+",..,"+---------+"], ["+-----+","|     |","|     |","|     |","|     |","|     |","+-----+"]]
              32ž                at coordinates [3;2] (1-indexed) in the first rectangle put in the 2nd  [["+---------+",
                                                                                                           "| +-----+ |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| |     | |",
                                                                                                           "| +-----+ |",
                                                                                                           "+---------+"]
                 bH∫             iterate over the numbers from 1 to B-1:                                 [[...], 1]
                    3*2+           push pop()*3+2                                                        [[...], 5]
                        4;         push 4 one below the stack                                            [[...], 4, 5]
                          e        push the variable E (X length)                                        [[...], 4, 5, 5]
                            :*     get that many colons                                                  [[...], 4, 5, ":::::"]
                              ž    insert [at coordinates [4; cIter*3+2] the colons]                     
dzaima
fuente
4

C # (.NET Core) , 202 bytes

(L,x)=>{char p='+',n='\n',e=' ';string v="|",r="",s=p+new string('-',L+4)+p+n,q=v+e+p+new string('-',L)+p+e+v+n;r+=s+q;for(int i=0;i<3*x-1;)r+=v+e+v+new string(i++%3<2?e:':',L)+v+e+v+n;r+=q+s;return r;}

Pruébalo en línea!

Charlie
fuente
4

Python 2 , 128 126 bytes

L,x=input()
k='+'+'-'*(L+4)+'+\n| +'+'-'*L+'+ |\n'
f=lambda k:'| |'+k*L+'| |\n'
print k+f(':').join([f(' ')*2]*x)[:-1]+k[::-1]

Pruébalo en línea!

-2 bytes gracias a @ Mr.Xcoder

Hiperneutrino
fuente
126 bytes
Sr. Xcoder
@ Mr.Xcoder Correcto, gracias, no sé lo que estaba pensando con esos corchetes adicionales: P
HyperNeutrino
3

PHP , 153 bytes

for(;$i-2<$z=3*$argv[2]+1;$i++)echo str_pad(strrev($r=["--+","+ |","| |"][!($b=$i>1&$i<$z)?$i&&$i<$z+1?1:0:2]),$argv[1]+3,"- :"[$b?$i%3!=1?1:2:0])."$r
";

Pruébalo en línea!

Jörg Hülsermann
fuente
2

Carbón , 36 bytes

NθNηFη«M³↑P×θ:»←B⁺θ²⁺׳η¹↖←B⁺θ⁶⁺׳η³

Pruébalo en línea!

Este es un algoritmo de carbón más que mi otra respuesta.

Erik el Outgolfer
fuente
1
El carbón vegetal ha asumido oficialmente todo el desafío. 4/10 respuestas están en carbón ...
Sr. Xcoder
@ Mr.Xcoder Bueno, es un lenguaje diseñado específicamente para el arte ascii-golf, así que eso es lo que obtienes por él. ;)
Erik the Outgolfer
1
Solicitud de explicación.
CalculatorFeline
@ Mr.Xcoder ¡Y tres de ellos tienen la misma longitud también!
Neil
2

C (gcc) , 195 bytes

#define P printf
y;f(L,l){char s[L+1],t[L+1];memset(s,45,L);memset(t,58,L);t[L]=s[L]=0;P("+-%s-+\n|+%s+|\n",s,s);for(y=3*l;y-->1;y%3?P("||%*c||\n",L,32):P("||%s||\n",t));P("|+%s+|\n+-%s-+",s,s);}

Pruébalo en línea!

scottinet
fuente
1

Perl 5 , 124 + 1 (-a) = 125 bytes

say$o='+'.'-'x($l=pop@F),$t="----+
",$i="| $o+ |
",$e=($d="| |").$"x$l.$d,$/,$e;say$d.':'x$l."$d
$e
$e"for 2..$_;say$i,$o,$t

Pruébalo en línea!

Xcali
fuente