ปรับเก้าอี้ของคุณ


18

ท้าทาย

คุณเพิ่งซื้อเก้าอี้ตัวใหม่! ปัญหาคือคุณไม่มีความคิดในการควบคุมมันดังนั้นคุณจะต้องเขียนโปรแกรมเพื่อให้เหมาะกับคุณ

ตัวอย่างของเก้าอี้ปรับระดับได้

คุณสามารถนั่งบนเก้าอี้ที่ไม่ได้ทำการปรับปรุงได้นานเท่านั้น ดังนั้นรหัสของคุณจะต้องสั้นที่สุด

ตัวอย่าง

5,3,2,2,1

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

3,5,2,3,5

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

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

ฉันเป็นคนเดียวที่คิดว่าหน้าตาเหมือนเครื่องบินหรือไม่

ชิ้นส่วนเก้าอี้

เก้าอี้มีส่วนประกอบต่าง ๆ :

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

อินพุต

คุณจะได้รับเก้าอี้ที่กำหนดตัวแปรต่างๆ

อินพุตจะอยู่ในลำดับต่อไปนี้อินพุตทั้งหมดจะเป็นจำนวนเต็มบวก (มากกว่า 0 เสมอ) และจะได้รับการจัดเตรียมเสมอ

  1. พนักพิงสูง
  2. ความกว้างที่นั่งแปลก ๆ เสมอ
  3. ที่เท้าแขนความสูงน้อยกว่าความสูงของพนักพิงเสมอ
  4. ความสูงของขา
  5. จำนวนล้อต้องน้อยกว่าหรือเท่ากับความกว้างที่นั่งและคี่เสมอ

คำอธิบายส่วนรายละเอียด

ชิ้นส่วนของเก้าอี้คือ:


พนักพิง:จำนวนนี้|คือความสูงของพนักพิง

O
|
|

ที่นั่ง:จำนวนของ_เป็นที่นั่งกว้างแทรก|อยู่ตรงกลางสำหรับพนักแขน

__|__

ที่เท้าแขน:จำนวนของ|เป็นที่เท้าแขนสูง ควรใส่ที่กลางที่นั่ง

_
|
|

ขา:จำนวน|จะถูกกำหนดโดยความสูงของขา

|
|

ล้อ:ล้ออยู่ตรงกลางใต้ขา หากพวกเขามีมากกว่าหนึ่งทั้งหมดทั้งหมดยกเว้นล้อกลางควร_อยู่ในบรรทัดด้านบนพวกเขา

_ _
OOO

เอาท์พุต

เอาต์พุตอาจมีการขึ้นบรรทัดใหม่ที่ต่อท้าย แต่ละบรรทัดอาจมีช่องว่างต่อท้าย ไม่อนุญาตช่องว่างนำหน้า


กรณีทดสอบที่สามดูเหมือนจะผิด ความกว้างของที่นั่งนั้นมากกว่า 2
Doorknob

@ Doorknob 冰อ๊ะเกิดปัญหากับคำสั่งซื้อฉันแก้ไขมันแล้ว
Downgoat

ว่า "เครื่องบิน" หนึ่งทำให้ผมนึกถึงจำนวนมากเหล่านี้รถถังจาก Super Mario Bros 3
El'endia Starman

คำตอบ:


2

LabVIEW, 146 LabVIEW Primitives

มันใหญ่กว่าที่ฉันจินตนาการไว้มาก ...

ในขณะนี้จะไม่มี GIF ในมือข้างหนึ่งเนื่องจากขนาดในมืออื่น ๆ เนื่องจากไม่มีวิธีที่ทุกคนสามารถติดตามข้อมูลทั้งหมดที่ไหล

มันใช้งานได้เว้นแต่ว่าคุณจะได้รับ LabVIEW และแนะนำผู้ให้บริการไฟล์จะไม่มีวิธีตรวจสอบ


9

JavaScript (ES6), 197 ไบต์

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

คำอธิบาย

อย่างนี้มันค่อนข้างซับซ้อนค่อนข้างเร็ว ฉันจะแสดงความคิดเห็นในสิ่งที่แต่ละบรรทัดทำในระดับสูง หวังว่าการจัดรูปแบบนี้จะไม่ยากเกินไปที่จะติดตามผู้ประกอบการที่ประกอบไปด้วยทั้งหมด

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

ทดสอบ


3

Python 2, 157 ไบต์

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

ตัวอย่าง:

3,7,1,2,5

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

3

JavaScript (ES6), 182

ฟังก์ชั่นที่ไม่ระบุชื่อ ใช้สตริงแม่แบบมี 3 บรรทัดใหม่ที่มีความสำคัญรวมอยู่ในการนับไบต์

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

ไม่มีการวนซ้ำใช้การทำซ้ำเพื่อจุดประสงค์เดียวกัน

น้อย golfed

(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

ตัวอย่างการทดสอบ

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 สำหรับจำนวนไบต์ของคุณที่อยู่ในพารามิเตอร์ฟังก์ชันมากกว่าเนื้อความของฟังก์ชัน
user81655

1

SpecBAS - 185 168 ไบต์

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

ตอนนี้ SpecBAS อนุญาตให้?ใช้แทนPRINTและไม่ต้องการLETก่อนการมอบหมายตัวแปรมันเริ่มดีขึ้นเล็กน้อยเมื่อเล่นกอล์ฟ

นอกจากนี้ยังช่วยให้คุณสามารถระบุตำแหน่ง y, x เพื่อหลีกเลี่ยงการเว้นวรรคจำนวนมาก สิ่งนี้จะพิมพ์ด้านหลังที่นั่งแขนและขาจากนั้นก็ล้อ

แก้ไข:

หากต้องการพิมพ์ด้านหลังให้เปลี่ยนFOR...NEXTลูปด้วยการปัดกลับ + คูณด้วยความสูง ( ("|"#13)*b)

ป้อนคำอธิบายรูปภาพที่นี่


1

Perl, 181 ไบต์

รวมถึง +1 -nสำหรับ ใส่ในไฟล์และecho 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

ด้วยความคิดเห็น:

#!/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.