Наставний сезон


12

Штанги в моєму тренажерному залі виглядають так:

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

Вони можуть містити тарілки п'яти різних розмірів, 2,5 фунта, п'ять фунтів, десять фунтів, 25 фунтів і 45 фунтів:

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

Для безпеки ми також додаємо затискач ]або [на зовнішній стороні всіх наших пластин, якщо такі є. Сама планка важить 45 кілограмів. Ми завжди ставимо найважчі плити, розташовані найближче до центру, без проміжків між жодними пластинами, і кладемо однакові пластини з обох сторін. Ми також завжди використовуємо мінімальну кількість тарілок, наприклад, ми ніколи не використовуємо дві п’ятифунтові пластини на одній стороні замість однієї десятифунтової пластини. Тож якщо я хочу підняти 215 фунтів, мій бар виглядає так:

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

Ваш код, функція або повна програма, повинен приймати ціле число від 45 до 575, завжди кратне 5, і виводити смужку, що додає до цієї ваги. Наприклад:

Вхід: 45

Вихід (зауважте, що на порожньому рядку немає кліпів):

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

Вхід: 100

Вихід:

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

Вхід: 575

Вихід:

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

Ви можете мати пробіли у кожному рядку чи ні, але ваш висновок не може мати провідні або кінцеві порожні рядки (вихід для 45 повинен бути одним рядком, для 50 повинен бути трьома рядками, для 65 - п'ять рядків тощо).

Це код гольфу, найкоротший виграш коду!


Чи дозволено нам надрукувати один простий порожній рядок для кожного випадку, включаючи 7-високий, як ніби рядок був надрукований за допомогою Python's print?
PurkkaKoodari

Відповіді:


1

Pyth, 126 байт

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

Вихідний код містить недруковані символи, тому тут він є як дамп 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

Цей код надзвичайно повільний , до фактичного використання. Ви можете пришвидшити його приблизно в 1000 разів, додавши .{( set) виклик між ними, зберігаючи код функціонально еквівалентним. Ось отримана версія коду, зручна для копіювання:

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 байт

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

Складає планку вертикально, потім обертається та друкує не порожні лінії.


-v-1є основним кандидатом для побітового заперечення; ~v.
Джонатан Фрех

1

Вугілля деревне , 65 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

¹²[]P×=⁹

Друк 12 -с, []9 та 9 =с. Сюди входить половина бруска. Курсор залишається на початку =s.

≔⁻N⁴⁵θ

Відняти 45 від введення, щоб дозволити вагу бруска.

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

Фільтруйте список можливих ваг пар ваг за тими, які не перевищують вхідні дані, і повторіть, поки список не порожній.

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

Розділіть рядок |||.,|.,|!,||.,||!на коми і виберіть шматочок, що відповідає найважчій можливій вазі, і роздрукуйте її вгору і вниз. (Крім того, можна просто роздрукувати його вгору і відобразити в ¬напрямку в кінці; ряд варіантів має однакову довжину.)

→P[

Роздрукуйте кліп (буде перезаписаний наступною вагою, якщо такий є).

≧⁻⊟ιθ»

Відняти вагу від введеного.

‖B←

Поміркуйте, щоб завершити штангу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.