Điều chỉnh ghế của bạn


18

Thử thách

Bạn vừa mua một chiếc ghế hoàn toàn mới! Vấn đề là, bạn không biết làm thế nào để kiểm soát nó, vì vậy bạn sẽ cần phải viết một chương trình để làm điều đó cho bạn.

Ví dụ về một chiếc ghế có thể điều chỉnh

Bạn chỉ có thể ngồi trên chiếc ghế không được điều chỉnh quá lâu. Vì vậy, mã của bạn sẽ cần phải càng ngắn càng tốt.

Ví dụ

5,3,2,2,1

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

3,5,2,3,5

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

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

Tôi có phải là người duy nhất nghĩ rằng nó trông giống như một chiếc máy bay?

Bộ phận ghế

Ghế có nhiều thành phần khác nhau:

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

Đầu vào

Bạn sẽ xuất ra một chiếc ghế cho các biến khác nhau.

Đầu vào sẽ theo thứ tự sau, tất cả các đầu vào sẽ là số nguyên dương (luôn lớn hơn 0) và sẽ luôn được cung cấp.

  1. Chiều cao tựa lưng
  2. Chiều rộng ghế luôn lẻ
  3. Chiều cao tay vịn Luôn thấp hơn chiều cao tựa lưng
  4. Chiều cao chân
  5. Số lượng bánh xe Luôn nhỏ hơn hoặc bằng chiều rộng ghếLuôn lẻ

Mô tả chi tiết

Các bộ phận của ghế là:


Tựa lưng: Số lượng |này là Chiều cao tựa lưng

O
|
|

Chỗ ngồi: Số lượng _Chiều rộng ghế , chèn một |ở giữa cho tay vịn.

__|__

Tay vịn: Số lượng |Chiều cao tay vịn . Điều này nên được chèn vào giữa ghế.

_
|
|

Chân: Số lượng |được xác định theo Chiều cao chân

|
|

Bánh xe: Các bánh xe được đặt ở giữa dưới chân. Nếu chúng có nhiều hơn một, tất cả trừ bánh xe trung tâm nên có _trong dòng phía trên chúng.

_ _
OOO

Đầu ra

Đầu ra có thể có một dòng mới. Mỗi dòng có thể có dấu cách. Khoảng trắng hàng đầu không được phép


Trường hợp thử nghiệm thứ ba dường như là sai. Chiều rộng ghế ngồi xa hơn 2.
Doorknob

@Doorknob 冰 Rất tiếc, đó là một vấn đề với thứ tự đầu vào, tôi đã sửa nó.
Hạ cấp

Chiếc "máy bay" khiến tôi nhớ rất nhiều những chiếc xe tăng này từ Super Mario Bros 3 .
El'endia Starman

Câu trả lời:


2

LabVIEW, 146 LabVIEW Nguyên thủy

Điều này lớn hơn nhiều so với tôi tưởng tượng ...

Lần này sẽ không có một GIF vì một mặt vì kích thước mặt khác vì không có cách nào ai có thể theo dõi tất cả các luồng dữ liệu.

Nó hoạt động, trừ khi bạn nhận được LabVIEW và đề xuất một tập tin hoster, sẽ không có cách nào để kiểm tra.


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

Giải trình

Vâng, điều này đã khá phức tạp khá nhanh chóng. Tôi sẽ chỉ nhận xét về những gì mỗi dòng làm ở mức cao. Hy vọng với định dạng này, không quá khó để theo dõi tất cả các toán tử ternary.

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

Kiểm tra


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

Thí dụ:

3,7,1,2,5

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

3

JavaScript (ES6), 182

Một chức năng ẩn danh. Sử dụng các chuỗi mẫu, có 3 dòng mới có ý nghĩa bao gồm trong số 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')

Không có vòng lặp, sử dụng lặp lại cho cùng một mục đích.

Ít chơi gôn

(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

Kiểm tra đoạn trích

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 cho nhiều byte của bạn nằm trong các tham số hàm hơn phần thân của hàm.
dùng81655

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

Bây giờ SpecBAS cho phép ?được sử dụng thay thế PRINTvà không cần LETtrước khi gán biến, nó bắt đầu tốt hơn một chút khi chơi gôn.

Cũng giúp bạn có thể chỉ định các vị trí in y, x để tránh phải thực hiện nhiều khoảng cách. Cái này in lại, ghế, tay và chân rồi bánh xe.

BIÊN TẬP:

để in mặt sau, thay thế một FOR...NEXTvòng lặp bằng ống + trở lại nhân với chiều cao ( ("|"#13)*b)

nhập mô tả hình ảnh ở đây


1

Perl, 181 byte

bao gồm +1 cho -n. Đặt trong một tập tin và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

Với nhận xét:

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.