È la stagione di massa


12

I bilancieri nella mia palestra sembrano così:

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

Possono contenere piatti di cinque dimensioni diverse, 2,5 libbre, cinque libbre, dieci libbre, 25 libbre e 45 libbre:

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

Per sicurezza, aggiungiamo anche una clip ]o [all'esterno di tutte le nostre piastre se ce ne sono. Il bar stesso pesa 45 chili. Mettiamo sempre le piastre più pesanti più vicine al centro, senza spazi vuoti tra le piastre, e mettiamo piastre identiche su entrambi i lati. Usiamo sempre anche il numero minimo di piatti possibile, ad esempio non usiamo mai due piatti da cinque libbre su un lato invece di un singolo piatto da dieci libbre. Quindi, se voglio sollevare £ 215, il mio bar si presenta così:

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

Il tuo codice, una funzione o un programma completo, deve prendere un numero intero compreso tra 45 e 575, sempre un multiplo di 5, e generare la barra che si aggiunge a quel peso. Per esempio:

Ingresso: 45

Output (nota che non ci sono clip su una barra vuota):

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

Ingresso: 100

Produzione:

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

Ingresso: 575

Produzione:

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

Puoi avere spazi finali su ogni riga o meno, ma il tuo output non può avere linee vuote iniziali o finali (l'output per 45 dovrebbe essere una riga, per 50 dovrebbe essere tre righe, per 65 dovrebbe essere cinque righe e così via).

Questo è il codice golf, il codice più corto vince!


Ci è permesso stampare una riga vuota finale per ogni caso, compresi quelli a 7, come se la stringa fosse stampata usando Python print?
PurkkaKoodari,

Risposte:


1

Pyth, 126 byte

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

Il codice sorgente contiene caratteri non stampabili, quindi eccolo come 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

Questo codice è estremamente lento , al punto da non essere effettivamente utilizzato. Puoi accelerarlo di circa 1000 volte aggiungendo una .{( set) chiamata tra, mantenendo il codice funzionalmente equivalente. Ecco una versione di copia-incolla del codice risultante:

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

2

Python 2, 295 byte

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

Costruisce la barra verticalmente, quindi ruota e stampa linee non vuote.


-v-1è un candidato principale per negazione bit per bit; ~v.
Jonathan Frech,

1

Carbone , 65 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

¹²[]P×=⁹

Stampa 12 -s, the []e 9 =s. Questo comprende metà della barra. Il cursore è lasciato all'inizio della =s.

≔⁻N⁴⁵θ

Sottrarre 45 dall'input per consentire il peso della barra.

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

Filtra un elenco dei possibili pesi di coppie di pesi per quelli che non sono maggiori dell'input e ripeti mentre l'elenco non è vuoto.

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

Dividi la stringa |||.,|.,|!,||.,||!tra virgole e seleziona il pezzo corrispondente al peso più pesante possibile e stampalo sia verso l'alto che verso il basso. (In alternativa, è possibile semplicemente stamparlo verso l'alto e riflettere nella ¬direzione alla fine; un numero di variazioni ha la stessa lunghezza.)

→P[

Stampa la clip (verrà sovrascritta dal peso successivo se presente).

≧⁻⊟ιθ»

Sottrai il peso dall'input.

‖B←

Rifletti per completare il bilanciere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.