Es ist Hochsaison

12

Die Hanteln in meinem Fitnessstudio sehen so aus:

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

Sie können Teller in fünf verschiedenen Größen, 2,5 Pfund, fünf Pfund, zehn Pfund, 25 Pfund und 45 Pfund halten:

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

Aus Sicherheitsgründen fügen wir auch einen Clip ]oder [, falls vorhanden , einen an der Außenseite aller unserer Platten hinzu. Die Bar selbst wiegt 45 Pfund. Wir legen immer die schwersten Platten, die der Mitte am nächsten sind, ohne Lücken zwischen den Platten, und legen identische Platten auf beiden Seiten. Wir verwenden auch immer die geringstmögliche Anzahl von Tellern, z. B. verwenden wir niemals zwei Fünf-Pfund-Teller auf einer Seite anstelle eines einzelnen Zehn-Pfund-Tellers. Wenn ich also 215 Pfund heben möchte, sieht meine Leiste so aus:

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

Ihr Code, eine Funktion oder ein vollständiges Programm, muss eine Ganzzahl von 45 bis 575, immer ein Vielfaches von 5, annehmen und den Balken ausgeben, der sich zu dieser Gewichtung addiert. Beispielsweise:

Eingang: 45

Ausgabe (beachten Sie, dass sich auf einer leeren Leiste keine Clips befinden):

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

Eingang: 100

Ausgabe:

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

Eingang: 575

Ausgabe:

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

Sie können Leerzeichen in jeder Zeile setzen oder auch nicht, aber Ihre Ausgabe darf keine führenden oder nachgestellten Leerzeilen enthalten (die Ausgabe für 45 sollte eine Zeile sein, für 50 sollten drei Zeilen sein, für 65 sollten fünf Zeilen sein usw.).

Das ist Code Golf, der kürzeste Code gewinnt!

Luke
quelle
Dürfen wir für jeden Fall eine nachgestellte Leerzeile ausgeben, einschließlich der sieben Zeilen, als ob die Zeichenfolge mit Python gedruckt worden wäre print?
PurkkaKoodari

Antworten:

1

Pyth, 126 Bytes

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

Der Quellcode enthält nicht druckbare Zeichen, hier also als XXD-Dump:

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

Dieser Code ist extrem langsam und kann nicht mehr verwendet werden. Sie können es um das 1000-fache beschleunigen, indem Sie einen .{( set) -Aufruf dazwischen einfügen, während der Code funktional äquivalent bleibt. Hier ist eine kopier- und einfügefreundliche Version des resultierenden Codes:

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

Python 2, 295 Bytes

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

Baut die Leiste vertikal auf, dreht sie und druckt nicht leere Zeilen.

TFeld
quelle
-v-1ist ein Hauptkandidat für die bitweise Negation; ~v.
Jonathan Frech
1

Kohle , 65 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

¹²[]P×=⁹

Drucken Sie 12 -s, die []und 9 =s. Dies umfasst die Hälfte der Bar. Der Cursor steht am Anfang des =s.

≔⁻N⁴⁵θ

Subtrahieren Sie 45 von der Eingabe, um das Gewicht des Balkens zu berücksichtigen.

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

Filtern Sie eine Liste der möglichen Gewichtungen von Gewichtungspaaren für diejenigen, die nicht größer als die Eingabe sind, und wiederholen Sie dies, solange die Liste nicht leer ist.

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

Teilen Sie die Zeichenfolge |||.,|.,|!,||.,||!durch Kommas, wählen Sie das Stück mit dem größtmöglichen Gewicht aus und drucken Sie es sowohl nach oben als auch nach unten. (Alternativ kann es auch einfach nach oben gedruckt und in die ¬Richtung am Ende reflektiert werden. Einige Variationen haben dieselbe Länge.)

→P[

Clip drucken (wird ggf. mit dem nächsten Gewicht überschrieben).

≧⁻⊟ιθ»

Subtrahieren Sie das Gewicht von der Eingabe.

‖B←

Überlege, um die Hantel zu vervollständigen.

Neil
quelle