バルキングシーズンです


12

私のジムのバーベルは次のように見えます。

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

5種類のサイズ、2.5ポンド、5ポンド、10ポンド、25ポンド、45ポンドのプレートを保持できます。

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

安全のために、クリップがある]場合[はすべてのプレートの外側にもクリップを追加します。バー自体の重さは45ポンドです。常に、最も重いプレートを中央に最も近く、プレート間に隙間がないように配置し、両側に同じプレートを配置します。また、可能な限り最小数のプレートを常に使用します。たとえば、1つの10ポンドのプレートではなく、片側に2つの5ポンドのプレートを使用することはありません。したがって、215ポンドを持ち上げたい場合、私のバーは次のようになります。

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

コード、関数、または完全なプログラムは、45〜575の整数(常に5の倍数)を取り、その重みを合計するバーを出力する必要があります。例えば:

入力: 45

出力(空のバーにクリップがないことに注意してください):

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

入力: 100

出力:

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

入力: 575

出力:

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

各行に末尾のスペースを含めることも、含めないこともできますが、出力の先頭または末尾に空の行を含めることはできません(45の出力は1行、50の場合は3行、65の場合は5行など)。

これはコードゴルフで、最短のコードが勝ちます!


文字列がPythonを使用して出力されたかのように、高さ7を含むすべてのケースに対して1つの末尾空行を出力でき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

このコードは非常に遅く、実際には使用されません。コードを機能的に同等に保ちながら、間に.{set)呼び出しを追加することで、約1000倍高速化できます。結果のコードのコピーと貼り付けが簡単なバージョンを次に示します。

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 -秒、the []および9 =秒を印刷します。これはバーの半分を構成します。カーソルは=sの先頭に残ります。

≔⁻N⁴⁵θ

入力から45を減算して、バーの重量を考慮します。

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

入力より大きくない重みの重みのペアの可能な重みのリストをフィルタリングし、リストが空でない間繰り返します。

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

文字列|||.,|.,|!,||.,||!をコンマで分割し、可能な限り最も重い重量に対応する部分を選択し、上下に印刷します。(あるいは、上に印刷¬して最後の方向に反映することもできます。多くのバリエーションは同じ長さです。)

→P[

クリップを印刷します(次の重みがある場合は上書きされます)。

≧⁻⊟ιθ»

入力から重みを減算します。

‖B←

反射してバーベルを完成させます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.