É época de volume

12

Os halteres na minha academia ficam assim:

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

Eles podem conter placas de cinco tamanhos diferentes, 2,5 libras, cinco libras, dez libras, 25 libras e 45 libras:

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

Por segurança, também adicionamos um clipe ]ou [na parte externa de todos os nossos pratos, se houver algum. A barra em si pesa 45 libras. Sempre colocamos as placas mais pesadas mais próximas do centro, sem espaços entre as placas, e colocamos placas idênticas nos dois lados. Também sempre usamos o número mínimo de placas possível, por exemplo, nunca usamos duas placas de cinco libras de um lado em vez de uma única placa de dez libras. Então, se eu quiser levantar 215 libras, meu bar fica assim:

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

Seu código, uma função ou programa completo, deve levar um número inteiro de 45 a 575, sempre um múltiplo de 5, e gerar a barra que adiciona esse peso. Por exemplo:

Entrada: 45

Saída (observe que não há clipes em uma barra vazia):

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

Entrada: 100

Resultado:

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

Entrada: 575

Resultado:

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

Você pode ter espaços à direita em cada linha ou não, mas sua saída não pode ter linhas vazias à esquerda ou à direita (a saída para 45 deve ser uma linha, para 50 deve ser três linhas, para 65 deve ser cinco linhas e assim por diante).

Este é o código de golfe, o código mais curto vence!

Lucas
fonte
É permitido imprimir uma linha vazia à direita para cada caso, incluindo os de 7, como se a sequência fosse impressa usando Python print?
PurkkaKoodari

Respostas:

1

Pitão, 126 bytes

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

O código fonte contém caracteres não imprimíveis, então aqui está como um dump 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 é extremamente lento , a ponto de não ser realmente usado. Você pode acelerar cerca de 1000 vezes adicionando uma chamada .{( set) no meio, mantendo o código funcionalmente equivalente. Aqui está uma versão amigável para copiar e colar do 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
fonte
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

Constrói a barra verticalmente, depois gira e imprime linhas não vazias.

TFeld
fonte
-v-1é um candidato principal à negação bit a bit; ~v.
22818 Jonathan Frech
1

Carvão vegetal , 65 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

¹²[]P×=⁹

Imprima 12 -s []e 9 =s. Isso compreende metade da barra. O cursor é deixado no início dos =s.

≔⁻N⁴⁵θ

Subtraia 45 da entrada para permitir o peso da barra.

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

Filtre uma lista dos possíveis pesos de pares de pesos para aqueles que não são maiores que a entrada e repita enquanto a lista não estiver vazia.

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

Divida a corda |||.,|.,|!,||.,||!com vírgulas e selecione a peça correspondente ao peso mais pesado possível e imprima-a para cima e para baixo. (Como alternativa, é possível apenas imprimi-lo para cima e refletir na ¬direção no final; várias variações têm o mesmo comprimento.)

→P[

Imprima o clipe (será substituído pelo próximo peso, se houver).

≧⁻⊟ιθ»

Subtraia o peso da entrada.

‖B←

Reflita para completar a barra.

Neil
fonte