C'est la saison du gonflement

12

Les haltères de mon gymnase ressemblent à ceci:

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

Ils peuvent contenir des assiettes de cinq tailles différentes, 2,5 livres, cinq livres, dix livres, 25 livres et 45 livres:

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

Pour plus de sécurité, nous ajoutons également un clip ]ou [à l'extérieur de toutes nos assiettes s'il y en a. La barre elle-même pèse 45 livres. Nous plaçons toujours les assiettes les plus lourdes au plus près du centre, sans espace entre les assiettes, et plaçons des assiettes identiques des deux côtés. Nous utilisons également toujours le nombre minimum d'assiettes possible, par exemple nous n'utilisons jamais deux assiettes de cinq livres sur un côté au lieu d'une seule assiette de dix livres. Donc, si je veux soulever 215 livres, ma barre ressemble à ceci:

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

Votre code, une fonction ou un programme complet, doit prendre un entier de 45 à 575, toujours un multiple de 5, et afficher la barre qui correspond à ce poids. Par exemple:

Contribution: 45

Sortie (notez qu'il n'y a pas de clips sur une barre vide):

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

Contribution: 100

Production:

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

Contribution: 575

Production:

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

Vous pouvez avoir des espaces de fin sur chaque ligne ou non, mais votre sortie ne peut pas avoir de lignes vides de début ou de fin (la sortie pour 45 doit être une ligne, pour 50 doit être trois lignes, pour 65 doit être cinq lignes, et ainsi de suite.)

C'est le golf de code, le code le plus court gagne!

Luc
la source
Sommes-nous autorisés à imprimer une ligne vide de fin pour chaque cas, y compris les 7 plus hauts, comme si la chaîne avait été imprimée à l'aide de Python print?
PurkkaKoodari

Réponses:

1

Pyth, 126 octets

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

Le code source contient des caractères non imprimables, alors voici un vidage 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

Ce code est extrêmement lent , au point d'aucune utilisation réelle. Vous pouvez l'accélérer d'environ 1000 fois en ajoutant un appel .{( set) entre les deux, tout en gardant le code fonctionnellement équivalent. Voici une version conviviale du copier-coller du code résultant:

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

Python 2, 295 octets

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

Construit la barre verticalement, puis tourne et imprime les lignes non vides.

TFeld
la source
-v-1est un candidat de choix pour la négation au niveau du bit; ~v.
Jonathan Frech
1

Fusain , 65 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

¹²[]P×=⁹

Imprimer 12 -s, le []et 9 =s. Cela comprend la moitié de la barre. Le curseur est laissé au début du =s.

≔⁻N⁴⁵θ

Soustrayez 45 de l'entrée pour tenir compte du poids de la barre.

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

Filtrer une liste des poids possibles de paires de poids pour ceux qui ne sont pas supérieurs à l'entrée et répéter tant que la liste n'est pas vide.

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

Séparez la chaîne |||.,|.,|!,||.,||!par des virgules et sélectionnez la pièce correspondant au poids le plus lourd possible, et imprimez-la vers le haut et vers le bas. (Alternativement, il est possible de simplement l'imprimer vers le haut et de réfléchir dans la ¬direction à la fin; un certain nombre de variations ont la même longueur.)

→P[

Imprimez le clip (sera écrasé par le poids suivant le cas échéant).

≧⁻⊟ιθ»

Soustrayez le poids de l'entrée.

‖B←

Réfléchissez pour terminer la barre.

Neil
la source