Sesuaikan Kursi Anda

18

Tantangan

Anda baru saja membeli kursi baru! Masalahnya adalah, Anda tidak tahu bagaimana mengendalikannya sehingga Anda harus menulis sebuah program untuk melakukannya untuk Anda.

Contoh kursi yang bisa disesuaikan

Anda hanya bisa duduk di kursi yang tidak disesuaikan begitu lama. Jadi kode Anda harus sesingkat mungkin.

Contohnya

5,3,2,2,1

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

3,5,2,3,5

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

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

Apakah saya satu-satunya yang menganggap ini seperti pesawat terbang?

Bagian kursi

Kursi memiliki berbagai komponen:

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

Memasukkan

Anda akan menghasilkan kursi yang diberikan berbagai variabel.

Input akan berada dalam urutan berikut, semua input akan menjadi bilangan bulat positif (selalu lebih besar dari 0) dan akan selalu disediakan.

  1. Tinggi sandaran
  2. Lebar Kursi selalu aneh
  3. Tinggi Sandaran Tangan Selalu kurang dari tinggi sandaran
  4. Tinggi kaki
  5. Hitungan roda Selalu kurang dari atau sama dengan lebar kursi dan Selalu aneh

Deskripsi bagian terperinci

Bagian-bagian kursi adalah:


Sandaran: Jumlah ini |adalah Tinggi Sandaran

O
|
|

Kursi: Jumlahnya _adalah Lebar Kursi , masukkan a |di tengah untuk sandaran tangan.

__|__

Sandaran tangan: Jumlahnya |adalah Tinggi Sandaran Tangan . Ini harus dimasukkan di tengah kursi.

_
|
|

Kaki: Jumlah |ditentukan oleh Tinggi Kaki

|
|

Roda: Roda dipusatkan di bawah kaki. Jika lebih dari satu, semua kecuali roda tengah harus ada _di garis di atas mereka.

_ _
OOO

Keluaran

Output mungkin memiliki baris tambahan. Setiap baris mungkin memiliki spasi tambahan. Ruang putih terkemuka tidak diizinkan

Downgoat
sumber
Kasus uji ketiga tampaknya salah. Lebar kursi jauh lebih dari 2.
Gagang pintu
@ Doorknob 冰 ups, itu masalah dengan urutan input, saya sudah memperbaikinya.
Downgoat
"Pesawat" mengingatkan saya banyak tank ini dari Super Mario Bros 3 .
El'endia Starman

Jawaban:

2

LabVIEW, 146 LabVIEW Primitif

Ini menjadi jauh lebih besar dari yang saya bayangkan ...

Tidak akan ada GIF kali ini, di satu sisi karena ukuran di sisi lain karena tidak ada cara siapa pun dapat mengikuti semua data yang mengalir.

Ini berfungsi, kecuali jika Anda mendapatkan LabVIEW dan menyarankan file hoster tidak akan ada cara untuk memeriksanya.

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

Penjelasan

Nah ini agak berbelit-belit cukup cepat. Saya hanya akan mengomentari apa yang dilakukan setiap baris di tingkat tinggi. Semoga dengan format ini tidak terlalu sulit untuk mengikuti semua operator 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\`
  )

Uji

pengguna81655
sumber
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

Contoh:

3,7,1,2,5

O
|
|   _
|___|___
    |
  __|__
  OOOOO
TFeld
sumber
3

JavaScript (ES6), 182

Fungsi anonim. Menggunakan string template, ada 3 baris baru yang signifikan dan termasuk dalam jumlah 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')

Tidak ada loop, gunakan pengulangan untuk tujuan yang sama.

Kurang 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

Cuplikan Tes

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
sumber
1
+1 untuk lebih banyak byte Anda yang berada di parameter fungsi daripada isi fungsi.
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

Sekarang SpecBAS memungkinkan ?untuk digunakan, bukan PRINTdan tidak perlu LETsebelum penugasan variabel, itu mulai menjadi sedikit lebih baik dalam bermain golf.

Juga membantu bahwa Anda dapat menentukan posisi cetak y, x untuk menghindari keharusan mengatur banyak jarak. Ini mencetak kembali, kursi, lengan dan kaki kemudian roda.

EDIT:

untuk mencetak bagian belakang, ganti FOR...NEXTloop dengan pipa + return dikalikan dengan tinggi ( ("|"#13)*b)

masukkan deskripsi gambar di sini

Brian
sumber
1

Perl, 181 byte

termasuk +1 untuk -n. Masukkan file danecho 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

Dengan komentar:

#!/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
sumber