To sezon łączenia

12

Sztanga na mojej siłowni wyglądają następująco:

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

Mogą pomieścić płytki o pięciu różnych rozmiarach: 2,5 funta, pięciu funtów, dziesięć funtów, 25 funtów i 45 funtów:

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

Dla bezpieczeństwa dodajemy również klips ]lub [na zewnątrz wszystkich naszych talerzy, jeśli takie istnieją. Sam pasek waży 45 funtów. Zawsze umieszczamy najcięższe płyty najbliżej środka, bez przerw między płytami, i umieszczamy identyczne płyty po obu stronach. Zawsze używamy również minimalnej możliwej liczby płyt, np. Nigdy nie używamy dwóch pięciofuntowych płyt po jednej stronie zamiast jednej dziesięciofuntowej płyty. Więc jeśli chcę podnieść 215 funtów, mój pasek wygląda następująco:

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

Twój kod, funkcja lub pełny program, musi przyjmować liczbę całkowitą od 45 do 575, zawsze wielokrotność 5, i generować pasek, który sumuje się do tej wagi. Na przykład:

Wejście: 45

Wyjście (zauważ, że na pustym pasku nie ma klipów):

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

Wejście: 100

Wynik:

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

Wejście: 575

Wynik:

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

Możesz mieć końcowe spacje w każdej linii lub nie, ale twój wynik nie może mieć wiodących ani końcowych pustych linii (wynik dla 45 powinien być jednym wierszem, dla 50 powinien być trzema wierszami, dla 65 powinien być pięcioma wierszami itd.)

To jest golf golfowy, wygrywa najkrótszy kod!

Łukasz
źródło
Czy możemy wydrukować jedną pustą linię końcową dla każdego przypadku, w tym 7-wysoką, tak jakby ciąg został wydrukowany przy użyciu Pythona print?
PurkkaKoodari,

Odpowiedzi:

1

Pyth, 126 bajtów

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

Kod źródłowy zawiera znaki niedrukowalne, więc tutaj jest to zrzut 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

Ten kod jest bardzo wolny , do tego stopnia, że ​​nie jest używany. Możesz go przyspieszyć około 1000 razy, dodając pomiędzy nimi wywołanie .{( set), zachowując jednocześnie funkcjonalny kod. Oto przyjazna dla kopiowania wersja wynikowego kodu:

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

Python 2, 295 bajtów

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

Buduje pasek w pionie, a następnie obraca i drukuje niepuste linie.

TFeld
źródło
-v-1jest głównym kandydatem do bitowej negacji; ~v.
Jonathan Frech
1

Węgiel drzewny , 65 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

¹²[]P×=⁹

Wydrukuj 12 -s, []i 9 =s. Obejmuje to połowę paska. Kursor pozostawia się na początku =s.

≔⁻N⁴⁵θ

Odejmij 45 od wartości wejściowej, aby uwzględnić ciężar paska.

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

Filtruj listę możliwych wag par wag dla tych, które nie są większe niż dane wejściowe, i powtarzaj, gdy lista nie jest pusta.

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

Podziel sznurek |||.,|.,|!,||.,||!na przecinki i wybierz kawałek odpowiadający największej możliwej masie, i wydrukuj go zarówno w górę, jak i w dół. (Alternatywnie można po prostu wydrukować go do góry i odbić w ¬kierunku na końcu; wiele odmian ma tę samą długość.)

→P[

Wydrukuj klip (zostanie zastąpiony następną wagą, jeśli istnieje).

≧⁻⊟ιθ»

Odejmij wagę od wartości wejściowej.

‖B←

Zastanów się, aby ukończyć sztangę.

Neil
źródło