Это большой сезон


12

Штанги в моем спортзале выглядят так:

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

Они могут вмещать тарелки пяти разных размеров, 2,5 фунта, пять фунтов, десять фунтов, 25 фунтов и 45 фунтов:

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

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

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

Ваш код, функция или полная программа, должны принимать целое число от 45 до 575, всегда кратное 5, и выводить строку, которая складывается с этим весом. Например:

Входные данные: 45

Вывод (обратите внимание, что на пустой панели нет клипов):

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

Входные данные: 100

Выход:

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

Входные данные: 575

Выход:

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

У вас могут быть конечные пробелы в каждой строке или нет, но ваши выходные данные не могут иметь начальные или конечные пустые строки (выходные данные для 45 должны быть одной строкой, для 50 должны быть три строки, для 65 должны быть пять строк и т. Д.)

Это код гольф, самый короткий код выигрывает!


Разрешено ли нам печатать одну завершающую пустую строку для каждого случая, включая 7-строчные, как если бы строка была напечатана с использованием Python 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 =с. Это включает в себя половину бара. Курсор оставлен в начале символа =s.

≔⁻N⁴⁵θ

Вычтите 45 от ввода, чтобы учесть вес бара.

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

Отфильтруйте список возможных весов пар весов для тех, которые не больше, чем ввод, и повторите, пока список не пуст.

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

Разбейте строку |||.,|.,|!,||.,||!на запятые и выберите кусок, соответствующий максимально возможному весу, и напечатайте его как вверх, так и вниз. (В качестве альтернативы можно просто напечатать его вверх и отразить в ¬направлении в конце; ряд вариантов имеют одинаковую длину.)

→P[

Распечатайте клип (будет перезаписан следующим весом, если есть).

≧⁻⊟ιθ»

Вычтите вес из ввода.

‖B←

Подумайте, чтобы завершить штангу.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.