Ini musim bulking

12

Barbel di gym saya terlihat seperti ini:

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

Mereka dapat memegang piring dengan lima ukuran berbeda, 2,5 pound, lima pound, sepuluh pound, 25 pound, dan 45 pound:

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

Untuk keamanan, kami juga menambahkan klip ]atau [di bagian luar semua piring kami jika ada. Bar itu sendiri berbobot 45 pound. Kami selalu menempatkan pelat terberat yang paling dekat dengan pusat, tanpa ada celah di antara pelat mana pun, dan menempatkan pelat identik di kedua sisi. Kami juga selalu menggunakan jumlah pelat minimum yang mungkin, misalnya kami tidak pernah menggunakan dua pelat lima pon di satu sisi, bukan pelat sepuluh pound tunggal. Jadi jika saya ingin mengangkat 215 pound, bar saya terlihat seperti ini:

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

Kode Anda, sebuah fungsi atau program lengkap, harus mengambil bilangan bulat dari 45 hingga 575, selalu kelipatan 5, dan menampilkan bilah yang menambah bobot tersebut. Sebagai contoh:

Memasukkan: 45

Keluaran (perhatikan tidak ada klip pada bilah kosong):

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

Memasukkan: 100

Keluaran:

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

Memasukkan: 575

Keluaran:

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

Anda dapat memiliki spasi tambahan pada setiap baris atau tidak, tetapi output Anda tidak dapat memiliki baris kosong awal atau akhir (output untuk 45 harus satu baris, untuk 50 harus tiga baris, untuk 65 harus lima baris, dan seterusnya.)

Ini golf kode, kode terpendek menang!

Luke
sumber
Apakah kami boleh mencetak satu baris kosong yang tertinggal untuk setiap kotak, termasuk yang 7-tinggi, seolah-olah tali itu dicetak menggunakan Python print?
PurkkaKoodari

Jawaban:

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

Kode sumber berisi karakter yang tidak patut dicetak, jadi ini dia sebagai 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

Kode ini sangat lambat , sampai-sampai tidak digunakan. Anda dapat mempercepatnya sekitar 1000 kali dengan menambahkan panggilan .{( set) di antaranya, sambil menjaga kode tetap setara secara fungsional. Berikut ini adalah versi ramah-rekat dari kode yang dihasilkan:

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

Buat bilah secara vertikal, lalu putar dan cetak garis yang tidak kosong.

TFeld
sumber
-v-1adalah kandidat utama untuk negasi bitwise; ~v.
Jonathan Frech
1

Arang , 65 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

¹²[]P×=⁹

Cetak 12 -s, []dan 9 =s. Ini terdiri dari setengah bilah. Kursor dibiarkan di awal =s.

≔⁻N⁴⁵θ

Kurangi 45 dari input untuk memungkinkan berat bar.

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

Saring daftar kemungkinan bobot pasangan bobot untuk yang tidak lebih besar dari input, dan ulangi sementara daftar tidak kosong.

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

Pisahkan string |||.,|.,|!,||.,||!pada koma dan pilih bagian yang sesuai dengan berat terberat yang mungkin, dan cetak keduanya ke atas dan ke bawah. (Atau, dimungkinkan untuk hanya mencetaknya ke atas dan mencerminkan ke ¬arah di akhir; sejumlah variasi memiliki panjang yang sama.)

→P[

Cetak klipnya (akan ditimpa oleh berat berikutnya jika ada).

≧⁻⊟ιθ»

Kurangi bobot dari input.

‖B←

Renungkan untuk menyelesaikan barbel.

Neil
sumber