Sandalyenizi Ayarlayın


18

Meydan okuma

Yeni bir sandalye aldın! Sorun şu ki, nasıl kontrol edeceğiniz hakkında hiçbir fikriniz yok, bu yüzden sizin için bir program yazmanız gerekecek.

Ayarlanabilir sandalye örneği

Sadece uzun süre ayarlanmamış sandalyede oturabilirsiniz. Bu nedenle kodunuzun mümkün olduğunca kısa olması gerekir.

Örnekler

5,3,2,2,1

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

3,5,2,3,5

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

2,13,1,1,13

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

Bunun bir uçak gibi göründüğünü düşünen tek kişi ben miyim?

Sandalye parçaları

Sandalyenin çeşitli bileşenleri vardır:

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

Giriş

Çeşitli değişkenler verilen bir başkan çıkacaksınız.

Giriş aşağıdaki sırada olacak, tüm girişler pozitif tamsayılar (daima 0'dan büyük) olacak ve her zaman sağlanacaktır.

  1. Sırt Yüksekliği
  2. Koltuk Genişliği her zaman garip
  3. Kolçak Yüksekliği Daima sırtlık yüksekliğinden daha az
  4. Bacak Yüksekliği
  5. Tekerlek sayısı Her zaman koltuk genişliğinden küçük veya ona eşit ve Her zaman tek

Ayrıntılı bölüm Açıklamaları

Sandalyenin parçaları:


Sırt: Bu miktar |olduğunu Sırt Yüksekliği

O
|
|

Oturak: miktarı _olan koltuk genişliği , bir ekleme |kol dayama için ortada.

__|__

Kol dayanağı: miktarı |ise Kolçak Yüksekliği . Bu koltuğun ortasına yerleştirilmelidir.

_
|
|

Bacak: Miktarı Bacak Yüksekliği| ile belirlenir

|
|

Tekerlekler: Tekerlekler bacakların altında ortalanmıştır. Birden fazlalarsa, orta tekerlek dışındaki herkes _üstlerindeki çizgide olmalıdır .

_ _
OOO

Çıktı

Çıktının sonunda bir satırsonu olabilir. Her satırın sonunda boşluk olabilir. Lider boşluklara izin verilmiyor


Üçüncü test durumu yanlış görünüyor. Koltuk genişliği 2'den fazla.
Kapı tokmağı

@Doorknob 冰 whoops, bu giriş emriyle ilgili bir sorundu, düzelttim.
Downgoat

"Uçak" olanı bana bu tankların birçoğunu Super Mario Bros 3'ten hatırlatıyor .
El'endia Starman

Yanıtlar:


2

LabVIEW, 146 LabVIEW Temel Öğeleri

Bu hayal ettiğimden çok daha büyük oldu ...

Bu sefer bir GIF olmayacak, diğer yandan boyut nedeniyle diğer taraftan akan tüm verileri takip edebilecek bir yol yok.

Eğer LabVIEW almak ve bir dosya barındırıcı önermek sürece işe yaramazsa, yine de kontrol etmek için bir yolu olmayacaktır.


9

JavaScript (ES6), 197 bayt

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

açıklama

Bu oldukça hızlı bir şekilde kıvrıldı. Her satırın üst düzeyde ne yaptığı hakkında yorum yapacağım. İnşallah bu biçimlendirme ile tüm üçlü operatörleri takip etmek çok zor değil.

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

Ölçek


3

Python 2, 157 bayt

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

Misal:

3,7,1,2,5

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

3

JavaScript (ES6), 182

Anonim bir işlev. Şablon dizelerini kullanarak, bayt sayısına dahil edilen önemli 3 yeni satır vardır.

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

Aynı amaç için tekrar kullanan döngüler yok.

Daha az 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

Snippet'i Test Et

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
İşlevin gövdesine göre işlev parametrelerinde daha fazla bayt için +1
user81655

1

SpecBAS - 185 168 bayt

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

Artık SpecBAS, değişken atamadan önce ?kullanılmasına izin verdiğinden PRINTve buna gerek duymadığından, golfte LETbiraz daha iyi olmaya başlar.

Ayrıca çok fazla boşluk bırakmak zorunda kalmamak için y, x yazdırma konumlarını belirtebilirsiniz. Bu sırt, koltuk, kollar ve bacaklar sonra tekerlekleri yazdırır.

DÜZENLE:

arkasını yazdırmak için, bir FOR...NEXTdöngüyü boru yüksekliği ile çarparak değiştirin ( ("|"#13)*b)

resim açıklamasını buraya girin


1

Perl, 181 bayt

için +1 içerir -n. Bir dosyaya koyun veecho 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

Yorumlarla:

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.