Es temporada de volumen

12

Las pesas en mi gimnasio se ven así:

=========[]-----------------------[]=========

Pueden contener platos de cinco tamaños diferentes, 2.5 libras, cinco libras, diez libras, 25 libras y 45 libras:

                .
        .   !   |
.   !   |   |   |
|   |   |   |   |
'   !   |   |   |
        '   !   |
                '

Por seguridad, también agregamos un clip ]o [en el exterior de todos nuestros platos si los hay. La barra en sí pesa 45 libras. Siempre colocamos las placas más pesadas más cercanas al centro, sin espacios entre las placas, y colocamos placas idénticas en ambos lados. También siempre usamos el mínimo número de platos posible, por ejemplo, nunca usamos dos platos de cinco libras en un lado en lugar de un solo plato de diez libras. Entonces, si quiero levantar 215 libras, mi barra se ve así:

        .                           .
      .!|                           |!.
     !|||                           |||!
====]||||[]-----------------------[]||||[====
     !|||                           |||!
      '!|                           |!'
        '                           '

Su código, una función o programa completo, debe tomar un número entero de 45 a 575, siempre un múltiplo de 5, y generar la barra que se suma a ese peso. Por ejemplo:

Entrada: 45

Salida (tenga en cuenta que no hay clips en una barra vacía):

=========[]-----------------------[]=========

Entrada: 100

Salida:

        !                           !
       .|                           |.
======]||[]-----------------------[]||[======
       '|                           |'
        !                           !

Entrada: 575

Salida:

    .....                           .....
  .!|||||                           |||||!.
 !|||||||                           |||||||!
]||||||||[]-----------------------[]||||||||[
 !|||||||                           |||||||!
  '!|||||                           |||||!'
    '''''                           '''''

Puede tener espacios finales en cada línea o no, pero su salida no puede tener líneas vacías iniciales o finales (la salida para 45 debería ser una línea, para 50 debería ser tres líneas, para 65 debería ser cinco líneas, y así sucesivamente).

Este es el código de golf, ¡el código más corto gana!

Luke
fuente
¿Se nos permite imprimir una línea vacía final para cada caso, incluidas las de 7 alturas, como si la cadena se imprimiera con Python print?
PurkkaKoodari

Respuestas:

1

Pyth, 126 bytes

K[Z5TyT50 90)jfrT6.e::++J+?qk3\=dsm@bxKdhfqQ+45sTSSM^K8?qk3r"[]23-[]"9*27d_J"=\|""]|""\|=""|["c7s@L". !|='"jC"¾ª±À£¤¯aàI7"6

El código fuente contiene caracteres no imprimibles, así que aquí está como un volcado XXD:

0000000: 4b5b 5a35 5479 5435 3020 3930 296a 6672  K[Z5TyT50 90)jfr
0000010: 5436 2e65 3a3a 2b2b 4a2b 3f71 6b33 5c3d  T6.e::++J+?qk3\=
0000020: 6473 6d40 6278 4b64 6866 7151 2b34 3573  dsm@bxKdhfqQ+45s
0000030: 5453 534d 5e4b 383f 716b 3372 225b 5d32  TSSM^K8?qk3r"[]2
0000040: 332d 5b5d 2239 2a32 3764 5f4a 223d 5c7c  3-[]"9*27d_J"=\|
0000050: 2222 5d7c 2222 5c7c 3d22 227c 5b22 6337  ""]|""\|=""|["c7
0000060: 7340 4c22 2e20 217c 3d27 226a 4322 04be  s@L". !|='"jC"..
0000070: aa1f b1c0 a3a4 81af 61e0 4937 2236       ........a.I7"6

Este código es extremadamente lento , hasta el punto de que no se usa realmente. Puede acelerarlo unas 1000 veces agregando una llamada .{( set) en el medio, manteniendo el código funcionalmente equivalente. Aquí hay una versión fácil de copiar y pegar del código resultante:

K[Z5TyT50 90)jfrT6.e::++J+?qk3\=dsm@bxKdhfqQ+45sTS.{SM^K8?qk3r"[]23-[]"9*27d_J"=\|""]|""\|=""|["c7s@L". !|='"j96235640060099376576144045263159 6
PurkkaKoodari
fuente
2

Python 2, 295 bytes

i=input()-45
w=90,50,20,10,5;p=".|||||'"," !|||! "," .|||' ","  !|!  ","  .|'  "
a=[' '*46]
b=zip(*a*3+['='*9+'[]'+'-'*24+'[]'+'='*9]+a*3)
v=8
j=0
while i:
 if i>=w[j]:i-=w[j];b[v]=b[-v-1]=p[j];v-=1
 else:j+=1
if v<8:b[v]=b[10];b[-v-1]=b[9]
for l in zip(*b):
 L=''.join(l).rstrip()
 if L:print L

Construye la barra verticalmente, luego gira e imprime líneas no vacías.

TFeld
fuente
-v-1es un candidato principal para la negación bit a bit; ~v.
Jonathan Frech
1

Carbón , 65 bytes

¹²[]P×=⁹≔⁻N⁴⁵θWΦ⟦⁵χ²⁰¦⁵⁰¦⁹⁰⟧¬›κθ«P|§⪪”{⊞⧴&β1←Z↶RΣ”,Lι→P[≧⁻⊟ιθ»‖B←

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

¹²[]P×=⁹

Imprima 12 -s, el []y 9 =s. Esto comprende la mitad de la barra. El cursor se deja al comienzo del =s.

≔⁻N⁴⁵θ

Resta 45 de la entrada para permitir el peso de la barra.

WΦ⟦⁵χ²⁰¦⁵⁰¦⁹⁰⟧¬›κθ«

Filtre una lista de los posibles pesos de pares de pesos para aquellos que no son mayores que la entrada, y repita mientras la lista no esté vacía.

P|§⪪”{⊞⧴&β1←Z↶RΣ”,Lι

Divida la cadena |||.,|.,|!,||.,||!en comas y seleccione la pieza correspondiente al mayor peso posible, e imprímala tanto hacia arriba como hacia abajo. (Alternativamente, es posible imprimirlo hacia arriba y reflexionar en la ¬dirección al final; una serie de variaciones tienen la misma longitud).

→P[

Imprima el clip (se sobrescribirá con el siguiente peso, si lo hay).

≧⁻⊟ιθ»

Resta el peso de la entrada.

‖B←

Reflexiona para completar la barra.

Neil
fuente