椅子を調整する


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

出力

出力には末尾の改行が含まれる場合があります。各行の末尾にはスペースを入れることができます。先頭の空白は許可されていません


3番目のテストケースは間違っているようです。はるか2よりも幅席
ドアノブ

@Doorknob冰おっと、これは入力順序の問題でしたが、修正しました。
ダウンゴート

「飛行機」は、スーパーマリオブラザーズ3のこれらの戦車の多くを思い出させます。
エレンディアスターマン

回答:


2

LabVIEW、146 LabVIEWプリミティブ

これは私が想像したよりもはるかに大きくなりました...

今回は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')

同じ目的で繰り返しを使用するループはありません。

少ないゴルフ

(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.