Passen Sie Ihren Stuhl an


18

Herausforderung

Sie haben gerade einen brandneuen Stuhl gekauft! Das Problem ist, dass Sie keine Ahnung haben, wie Sie es steuern sollen. Sie müssen also ein Programm schreiben, um es für Sie zu tun.

Beispiel eines verstellbaren Stuhls

Sie können nur so lange auf dem unangepassten Stuhl sitzen. Ihr Code muss daher so kurz wie möglich sein.

Beispiele

5,3,2,2,1

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

3,5,2,3,5

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

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

Bin ich der einzige, der denkt, das sieht aus wie ein Flugzeug?

Stuhlteile

Der Stuhl hat verschiedene Komponenten:

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

Eingang

Sie geben einen Stuhl mit verschiedenen Variablen aus.

Die Eingabe erfolgt in der folgenden Reihenfolge. Alle Eingaben sind positive Ganzzahlen (immer größer als 0) und werden immer bereitgestellt.

  1. Rückenlehnenhöhe
  2. Sitzbreite immer ungerade
  3. Armlehnenhöhe Immer kleiner als die Rückenlehnenhöhe
  4. Beinhöhe
  5. Radanzahl Immer kleiner oder gleich der Sitzbreite und immer ungerade

Detaillierte Teilebeschreibungen

Die Teile des Stuhls sind:


Rückenlehne: Dies |ist die Höhe der Rückenlehne

O
|
|

Sitz: Der Betrag _ist die Sitzbreite , legen Sie eine |in der Mitte für die Armlehne.

__|__

Armlehne: Die Höhe |ist die Höhe der Armlehne . Dies sollte in der Mitte des Sitzes eingefügt werden.

_
|
|

Bein: Die Höhe von |wird durch die Beinhöhe bestimmt

|
|

Räder: Die Räder sind unter den Beinen zentriert. Wenn es sich um mehrere handelt, sollten alle außer dem Mittelrad _in der Linie über ihnen liegen.

_ _
OOO

Ausgabe

Die Ausgabe kann eine nachgestellte Newline haben. Jede Zeile kann nachgestellte Leerzeichen enthalten. Führende Leerzeichen sind nicht zulässig


Der dritte Testfall scheint falsch zu sein. Die Sitzbreite beträgt weit mehr als 2.
Türklinke

@Doorknob 冰 whoops, das war ein Problem mit der Eingabereihenfolge, ich habe es behoben.
Downgoat

Das "Flugzeug" erinnert mich sehr an diese Panzer von Super Mario Bros 3 .
El'endia Starman

Antworten:


2

LabVIEW, 146 LabVIEW-Grundelemente

Das wurde viel größer als ich es mir vorgestellt hatte ...

Diesmal wird es kein GIF geben, zum einen wegen der Größe, zum anderen weil niemand den Datenfluss verfolgen kann.

Es funktioniert, es sei denn, Sie erhalten LabVIEW und schlagen einen Datei-Hoster vor, es gibt jedoch keine Möglichkeit, dies zu überprüfen.


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

Erläuterung

Nun, das wurde ziemlich schnell verworren. Ich werde nur kommentieren, was jede Zeile auf einer hohen Ebene tut. Hoffentlich ist es mit dieser Formatierung nicht allzu schwer, allen ternären Operatoren zu folgen.

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

Prüfung


3

Python 2, 157 Bytes

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

Beispiel:

3,7,1,2,5

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

3

JavaScript (ES6), 182

Eine anonyme Funktion. Unter Verwendung von Vorlagenzeichenfolgen gibt es 3 Zeilenumbrüche, die für die Bytezahl von Bedeutung sind.

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

Keine Schleifen, mit Wiederholung für den gleichen Zweck.

Weniger golfen

(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

Testschnipsel

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 für mehr Ihrer Bytes in den Funktionsparametern als im Hauptteil der Funktion.
User81655

1

SpecBAS - 185 168 Bytes

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

Jetzt, da SpecBAS ?verwendet werden kann PRINTund nicht benötigtLET bevor Variablen Golfen etwas besser.

Außerdem können Sie die Druckpositionen y und x angeben, um zu vermeiden, dass viel Abstand eingehalten werden muss. Dies druckt Rücken, Sitz, Arme und Beine, dann Räder.

BEARBEITEN:

Um die Rückseite zu drucken, ersetzen Sie eine FOR...NEXTSchleife durch Pipe + Return multipliziert mit der Höhe ( ("|"#13)*b).

Bildbeschreibung hier eingeben


1

Perl, 181 Bytes

beinhaltet +1 für -n. Legen Sie eine Datei ein undecho 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

Mit Kommentaren:

#!/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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.