Ajustez votre chaise

18

Défi

Vous venez d'acheter une toute nouvelle chaise! Le problème est que vous ne savez pas comment le contrôler, vous devrez donc écrire un programme pour le faire pour vous.

Exemple de chaise réglable

Vous ne pouvez vous asseoir sur la chaise non ajustée que si longtemps. Votre code devra donc être aussi court que possible.

Exemples

5,3,2,2,1

O
|
|
| _
| |
|_|_
  |
  |
  O

3,5,2,3,5

O
|  _
|  |
|__|__
   |
   |
 __|__
 OOOOO

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

Suis-je le seul à penser que cela ressemble à un avion?

Pièces de chaise

La chaise a différents composants:

O
|
|  <- Backrest
|  _  <- Armrest
|  |
|__|__ <- Seat
   |  
   |   <- Leg
  _|_
  OOO  <- Wheels

Contribution

Vous produirez une chaise en fonction de diverses variables.

L'entrée sera dans l'ordre suivant, toutes les entrées seront des entiers positifs (toujours supérieurs à 0) et seront toujours fournies.

  1. Hauteur dossier
  2. Largeur du siège toujours étrange
  3. Hauteur de l'accoudoir Toujours inférieure à la hauteur du dossier
  4. Hauteur de jambe
  5. Nombre de roues Toujours inférieur ou égal à la largeur du siège et toujours impair

Descriptions détaillées des pièces

Les parties de la chaise sont:


Dossier: Ce montant |est la hauteur du dossier

O
|
|

Siège: Le montant _est la largeur du siège , insérez un |au milieu pour l'accoudoir.

__|__

Accoudoir: Le montant |est la hauteur de l' accoudoir . Celui-ci doit être inséré au milieu du siège.

_
|
|

Jambe: Le montant de |est déterminé par la hauteur des jambes

|
|

Roues: Les roues sont centrées sous les jambes. S'ils sont plus d'un, tous sauf la roue centrale doivent être _alignés au-dessus d'eux.

_ _
OOO

Production

La sortie peut avoir une nouvelle ligne de fin. Chaque ligne peut avoir des espaces de fin. L'espace de tête n'est pas autorisé

Downgoat
la source
Le troisième cas de test semble erroné. La largeur de l'assise est bien supérieure à 2.
Poignée de porte
@Doorknob 冰 whoops, c'était un problème avec l'ordre d'entrée, je l'ai corrigé.
Downgoat
Celui "avion" me rappelle beaucoup ces chars de Super Mario Bros 3 .
El'endia Starman

Réponses:

2

LabVIEW, 146 primitives LabVIEW

C'est devenu beaucoup plus gros que ce que j'imaginais ...

Il n'y aura pas de GIF cette fois, d'une part en raison de la taille d'autre part, car il n'y a aucun moyen pour quiconque de suivre toutes les données qui circulent.

Cela fonctionne, sauf si vous obtenez LabVIEW et suggérez un hébergeur de fichiers, il n'y aura cependant aucun moyen de vérifier.

Eumel
la source
9

JavaScript (ES6), 197 octets

(b,s,a,l,w)=>eval('o="";for(i=0;i<b+l+2;i++)o+=(i?i>b?x[r](s/2-w/2+1)+(i>b+l?"O"[r](w):(p=(i<b+l?x:"_")[r](w/2))+"|"+p):"|"+(p=(i-b?x=" ":"_")[r="repeat"](s/2))+(i>b-a?"|":i<b-a?x:"-")+p:"O")+`\n`')

Explication

Eh bien, cela est devenu assez compliqué assez rapidement. Je vais juste commenter ce que fait chaque ligne à un niveau élevé. Espérons qu'avec ce formatage, il n'est pas trop difficile de suivre tous les opérateurs ternaires.

(b,s,a,l,w)=>
  eval(
    o="";
    for(i=0;i<b+l+2;i++)                        // for each line
      o+=(i?                                    // add to output

        // Leg lines
        i>b?
          x[r](s/2-w/2+1)                       // spaces before wheels
          +(
            i>b+l?
              "O"[r](w)                         // wheels
            :
              (p=(i<b+l?x:"_")[r](w/2))         // spaces or wheel cover before leg
              +"|"                              // leg
              +p                                // spaces or wheel cover after leg
          )

        // Backrest lines
        :
          "|"                                   // backrest
          +(p=(i-b?x=" ":"_")[r="repeat"](s/2)) // spaces or seat before armrest
          +(i>b-a?"|":i<b-a?x:"-")              // armrest
          +p                                    // spaces or seat after armrest

      // Headrest line
      :"O")
      +\`\n\`
  )

Tester

user81655
la source
3

Python 2, 157 octets

b,s,a,l,w=input()
y,z,n,A='|_\n '
s/=2;W=w/2;x=A*s;X=n+A*(s-W+1);Y=n+y
print'O'+Y*(b-a-1)+Y+x+z+(Y+x+y)*(a-1)+n+(y+z*s)*2+(n+A+x+y)*(l-1)+X+z*W+y+z*W+X+'O'*w

Exemple:

3,7,1,2,5

O
|
|   _
|___|___
    |
  __|__
  OOOOO
TFeld
la source
3

JavaScript (ES6), 182

Une fonction anonyme. En utilisant des chaînes de modèle, il y a 3 sauts de ligne significatifs et inclus dans le nombre d'octets.

(b,s,a,l,w,R=(x=s/2,c=' ')=>c.repeat(x),f=`
`+R(s/2+1-w/2),h=R(s/2,'_'),g=R(w/2,'_'),v='|')=>'O'+R(b+~a,u=`
`+v)+u+R()+'_'+R(a-1,u+R()+v)+u+h+v+h+R(l-1,`
 `+R()+v)+f+g+v+g+f+R(w,'O')

Pas de boucles, en utilisant la répétition dans le même but.

Moins golfé

(b, s, a, l, w, // parameters
 // local variables as parameters with default values
 R = (x=s/2,c=' ')=>c.repeat(x), // shortcut for repeat 
 f = `\n`+R(s/2+1-w/2), // filler before the wheels (used twice)
 h = R(s/2,'_'), // half seat (used twice)
 g = R(w/2,'_'), // last wheel support (used twice)
 v = '|', // vertical bar (used many times)
 u = `\n`+v // newline + bar (define below in the golfed version)
)=>
  'O'+R(b+~a, u)+  // backrest 
  u+R()+'_'+       // backrest + armrest top
  R(a-1, u+R()+v)+ // backrest + armrest
  u+h+v+h+         // seat
  R(l-1, `\n`+R()+v)+ // leg
  f+g+v+g+         // wheels support
  f+R(w, 'O')      // wheels

Extrait de test

f=(b,s,a,l,w,R=(x=s/2,c=' ')=>c.repeat(x),f=`
`+R(s/2+1-w/2),h=R(s/2,'_'),g=R(w/2,'_'),v='|')=>'O'+R(b+~a,u=`
`+v)+u+R()+'_'+R(a-1,u+R()+v)+u+h+v+h+R(l-1,`
 `+R()+v)+f+g+v+g+f+R(w,'O')
  
console.log=x=>O.innerHTML=x+'\n'

function test()
{
  p=I.value.match(/\d+/g).map(x=>+x)
  console.log(p+'\n'+f(...p)+'\n')
}
Input <input type="text" id="I" value="5,5,3,2,3" />
<button onclick="test()">Go</button>
<pre id="O"></pre>

edc65
la source
1
+1 pour plus de vos octets se trouvant dans les paramètres de fonction que le corps de la fonction.
user81655
1

SpecBAS - 185 168 octets

1 INPUT b's'a'l'w: sx=(s/2)+1,wx=sx-(w/2)
2  ?"o"'("|"#13)*b
3  ?AT b,1;"_"*s;AT b+l,wx;"_"*w;AT b-a,sx;"-"
4 FOR i=b+1-a TO b+l: ?AT i,sx;"|": NEXT i
5  ?AT b+l+1,wx;"0"*w

Maintenant que SpecBAS permet ?d'être utilisé à la place PRINTet n'a pas besoin LETavant l'attribution de variable, il commence à être un peu mieux au golf.

Aide également à spécifier les positions d'impression y, x pour éviter d'avoir à travailler beaucoup d'espacement. Cela imprime le dos, le siège, les bras et les jambes puis les roues.

ÉDITER:

pour imprimer le verso, remplacez une FOR...NEXTboucle par pipe + return multipliée par la hauteur ( ("|"#13)*b)

entrez la description de l'image ici

Brian
la source
1

Perl, 181 octets

comprend +1 pour -n. Mettez dans un dossier etecho 5,3,2,2,1 | perl -n file.pl

($b,$s,$a,$l,$w)=/\d+/g;$,=$/;print'O',('|')x($b-$a-1),($D='|'.$"x($s/=2)).'_',("$D|")x--$a,($q='|'.'_'x$s).$q,($"x$s.' |')x--$l,($x=$"x(1+$s-($W=$w/2))).'_'x$W.'|'.'_'x$W,$x.O x$w

Avec commentaires:

#!/usr/bin/perl -n              # -n: iterate stdin, put in $_

($b,$s,$a,$l,$w)=/\d+/g;        # get the parameters

$,=$/;                          # set $OUTPUT_FIELD_SEPARATOR to \n;
                                # this is printed between each of print's args

print                           # shorter than `-p` and @_=(...); $"=$/; $_="@_";
    'O',                        # the headrest

    ('|')x($b-$a-1),            # space between headrest and armrest.
                                # (...) x $n: produces $n lists.

    ($D='|' . $"x($s/=2))       # backrest and padding ($"=' ') up to armrest
    . '_',                      # armrest.

    ("$D|")x--$a,               # backrest, padding, armrest

    ($q='|' . '_'x$s) . $q,     # backrest bottom and 1/2 seat, armrest bottom and 1/2 seat

    ($" x $s . ' |' ) x --$l,   # padding before leg and leg, repeated leg-1 times

    ( $x =                     
      $" x (1+$s - ($W=$w/2) )  # padding before wheel top
    )
    . '_'x$W . '|'              # left side of wheel top, wheel top,
    . '_'x$W,                   # right side of wheel top

    $x . O x$w                  # padding before wheels, wheels
Kenney
la source