Regola la tua sedia


18

Sfida

Hai appena comprato una sedia nuova di zecca! Il problema è che non hai idea di come controllarlo, quindi dovrai scrivere un programma per farlo.

Esempio di sedia regolabile

Puoi sederti sulla sedia non regolata per così tanto tempo. Quindi il tuo codice dovrà essere il più breve possibile.

Esempi

5,3,2,2,1

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

3,5,2,3,5

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

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

Sono l'unico che pensa che assomigli ad un aeroplano?

Parti della sedia

La sedia ha vari componenti:

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

Ingresso

Otterrai una sedia con varie variabili.

L'ingresso sarà nel seguente ordine, tutti gli ingressi saranno numeri interi positivi (sempre maggiori di 0) e saranno sempre forniti.

  1. Altezza dello schienale
  2. Larghezza del sedile sempre dispari
  3. Altezza del bracciolo Sempre inferiore all'altezza dello schienale
  4. Altezza delle gambe
  5. Conteggio delle ruote Sempre inferiore o uguale alla larghezza del sedile e Sempre dispari

Descrizioni dettagliate delle parti

Le parti della sedia sono:


Schienale: questa quantità di |è l' altezza dello schienale

O
|
|

Sedile: la quantità di _è la larghezza del sedile , inserire una |al centro per il bracciolo.

__|__

Bracciolo: la quantità di |è l' altezza del bracciolo . Questo dovrebbe essere inserito al centro del sedile.

_
|
|

Gamba: la quantità di |è determinata dall'altezza della gamba

|
|

Ruote: le ruote sono centrate sotto le gambe. Se sono più di uno, tutti tranne la ruota centrale dovrebbero avere_ nella linea sopra di loro.

_ _
OOO

Produzione

L'output potrebbe avere una nuova riga finale. Ogni riga può avere spazi finali. Gli spazi bianchi di punta non sono consentiti


Il terzo caso di test sembra essere sbagliato. La larghezza del sedile è di gran lunga superiore a 2.
Maniglia della porta

@Doorknob 冰 whoops, è stato un problema con l'ordine di input, l'ho risolto.
Downgoat,

L '"aereo" mi ricorda molto questi carri armati di Super Mario Bros 3 .
El'endia Starman,

Risposte:


2

LabVIEW, 146 LabVIEW Primitives

Questo è diventato molto più grande di quanto immaginassi ...

Questa volta non ci sarà una GIF, da un lato a causa delle dimensioni dall'altro perché non c'è modo che nessuno possa seguire tutti i flussi di dati.

Funziona, a meno che tu non ottenga LabVIEW e suggerisca un file hoster, non ci sarà modo di controllarlo.


9

JavaScript (ES6), 197 byte

(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`')

Spiegazione

Bene, questo è diventato piuttosto contorto abbastanza rapidamente. Mi limiterò a commentare ciò che ogni riga fa ad alto livello. Spero che con questa formattazione non sia troppo difficile seguire tutti gli operatori ternari.

(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\`
  )

Test


3

Python 2, 157 byte

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

Esempio:

3,7,1,2,5

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

3

JavaScript (ES6), 182

Una funzione anonima. Usando le stringhe di template, ci sono 3 newline che sono significative e incluse nel conteggio dei byte.

(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')

Nessun loop, usando ripetizione per lo stesso scopo.

Meno 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

Test dello snippet

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>


1
+1 per un numero maggiore di byte nei parametri della funzione rispetto al corpo della funzione.
user81655

1

SpecBAS - 185 168 byte

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

Ora che SpecBAS consente ?di essere utilizzato al posto di PRINTe non è necessario LETprima dell'assegnazione variabile, inizia a essere un po 'meglio nel golf.

Aiuta anche a specificare le posizioni di stampa y, x per evitare di dover calcolare molta spaziatura. Stampa schiena, sedile, braccia e gambe, quindi ruote.

MODIFICARE:

per stampare il retro, sostituire un FOR...NEXTanello con tubo + ritorno moltiplicato per l'altezza ( ("|"#13)*b)

inserisci qui la descrizione dell'immagine


1

Perl, 181 byte

include +1 per -n. Inserisci un file eecho 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

Con commenti:

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.