Sandalyenizi Analiz Edin


11

Bu zorluk Downgoat'ın koltuğunuzu ayarlayın .

Meydan okuma

Yeni sandalyeni yeni ayarladın! Size mükemmel uyum sağlar. Ancak, tekerlek gıcırtılı ve onarım insanlarının ayarı değiştireceğini biliyorsunuz. Sorun şu ki, bir cetveliniz yok, bu yüzden sizin için ölçmek için bir program yazmanız gerekecek. Onarım insanlar sadece bu kadar uzun süre bekleyebilirler. Bu nedenle kodunuzun mümkün olduğunca kısa olması gerekir.
Ayarlanabilir sandalye örneği

Örnekler

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

5,3,2,2,1

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

3,5,2,3,5

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

2,13,1,1,13

Sandalye parçaları

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

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

Detaylı Sandalye Tanımları

Sandalyenin parçaları:


Koltuk başlığı: Koltuk arkalığının üzerinde her zaman bir koltuk başlığı olacaktır

O
|

Sırt: sayısıdır |olan Sırt Yüksekliği

O
|
|

Oturak: sayısı _bir koltuk genişliği , bir orada |kol dayama için ortada.

__|__

Kol dayanağı: sayısına |olan Kolçak Yüksekliği . Bu koltuğun ortasına yerleştirilecektir.

_
|
|

Bacak: sayısıdır |olan Bacak Yüksekliği

|
|

Tekerlekler: Tekerlekler bacakların altında ortalanmıştır. Eğer birden fazlalarsa, orta tekerlek hariç hepsi _üstlerindeki çizgide olacaktır .

_ _
OOO

Çıktı

Bir sandalye verildiğinde, çeşitli değişkenler üreteceksiniz.

Çıktı aşağıdaki sırada olmalıdır:

  1. Sırt Yüksekliği
  2. Koltuk Genişliği her zaman garip
  3. Kolçak Yüksekliği Her zaman 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

Çıktının sonunda bir satırsonu olabilir veya bir işlevse dizi / liste biçiminde olabilir.

Liderler Sıralaması

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

# Perl, 43 + 2 (-p flag) = 45 bytes

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Kolçak ölçülüyor mu?
J Atkin

Yanıtlar:


3

Lua, 187 Bayt

Ben biraz daha golf olabilir düşünüyorum, ama şu anda bu iyi olduğunu düşünüyorum. Ayrıca, çıktının virgülle ayrılması gerekiyorsa bunu düzeltebilirim, ancak bu yine de gereksinimleri karşılar.

Ayrıca, giriş her seferinde bir satıra beslenir. Tekerlekler girildikten sonra, girişi sonlandırmak için boş bir çizgi ile enter tuşuna basın.

c={}i=1t=""while c[i-1]~=""do c[i]=io.read():gsub("%s+","")t=t..c[i]a=(not a and c[i]:find("_")and i or a)s=(not s and c[i]:find("_|_")and i or s)i=i+1 end print(s-1,c[s]:len()-1,s-a,#c-s-2,c[#c-1]:len())

Ungolfed

c={}
i=1
while c[i-1]~=""do 
    c[i]=io.read():gsub("%s+","")          --remove spaces
    a=(not a and c[i]:find"_"and i or a)   --armrest position
    s=(not s and c[i]:find"_|_"and i or s) --seat position
    i=i+1
end
print(s-1, c[s]:len()-1, s-a, #c-s-2, c[#c-1]:len())

(Konumlar yukarıdan aşağıya doğru ölçülür, bu nedenle üst 'O' konum 1'dir ve tekerlekler en büyük konumdur.

  • Arkalık yüksekliği koltuğun eksi bir konumudur ve üstteki 'O' değerini telafi eder.
  • Koltuk boyutu, koltuk arkalığını dengeleyen koltuğun konumundaki eksi uzunluğudur.
  • Kolçak yüksekliği, koltuğun konumu ile kol dayama yerinin konumudur.
  • Bacak yüksekliği, #ctekerlekleri ve koltuğu dengelemek için koltuğun ( ) eksi koltuğun konumu eksi 2 yüksekliğidir .
  • Tekerlek sayısı, son ipin uzunluğudur.

3

Harika, 161 bayt !!!

Yaşasın!! Son değil !!

f={s->a=s.split(/\n/)
b=a.findIndexOf{it.contains('|_')}
d=b-a.findIndexOf{it.contains('_')}
print"$b,${a[b].count('_')+1},$d,${a.size()-b-2},${s.count('O')-1}"}

Ungolfed:

f={String s ->
    split = s.split(/\n/)
    bottomOfChairBack = split.findIndexOf {it.contains('|_')}
    armHeight = bottomOfChairBack-split.findIndexOf {it.contains('_')}
    width = split[bottomOfChairBack].count('_')+1
    height = split.size() - bottomOfChairBack - 2

    wheelCount = s.count('O')-1
    return [bottomOfChairBack, width, armHeight, height, wheelCount]
}

Golfsiz program testleri:

assert f('''O
|
|
| _
| |
|_|_
  |
  |
  O''') == [5, 3, 2, 2, 1]

assert f('''O
|  _
|  |
|__|__
   |
   |
 __|__
 OOOOO''') == [3,5,2,3,5]

assert f('''O
|  _
|  |
|__|__
   |
   |
 __|__
 OOOOO''') == [3,5,2,3,5]

assert f('''O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO''') == [2,13,1,1,13]

2

Pyth, 57 54 53 50 bayt

Muhtemelen daha fazla golf yapılabilir. Tek karakter dizisi hilesi için issacg sayesinde -3 bayt .

=kjb.z
=H/k+b\|
-/k\_=G-/k\O2
--/k\|H=Nt/k+bd
N
hG

Açıklama:

=kjb.z
=k              Assign k
     z          Input
  jb.           Join list by newlines

=H/k+b\|
=H              Assign H
  / +b\|        Count occurrences of "\n|"
   k            In input
                (Implicit: print backrest height)

-/k\_=G-/k\O2
     =G         Assign G
       -/k\O2   The number of wheels minus 1
-/k\_           Count the number of "_"
                (Implicit: print seat width)

--/k\|H=Nt/k+bd
       =N       Assign N
          /k+bd Count the number of lines starting with " "
         t      Subtract 1 (N is now the leg height)
  /k\|          Count the number of "|"
 -    H         Subtract the "|" for the backrest
-               Subtract leg height
                (Implicit: print armrest height)

N               Print leg height

hG              Print the number of wheels

1
Tek karakterli bir dize oluşturmak için kullanın \. Yani "_"=\_
isaacg

Ah, bunu
yenemezim

2

Perl, 93 + 2 = 95 90 + 1 = 91 83 + 1 = 84 bayt

Görünüşe göre çıktı virgülle ayırmaya ihtiyaç duymuyor

İle çağırın perl -n chair.pl chairInput(bayrak için 1B ceza).

END{print$b,2+$u-$o,$a,$.-$b-2,$o-1}$u+=s/_//g;$o+=s/O//g;s/^\|//&&$b++&&/\|/&&$a++

Ungolfed:

END{         # Put the END block first to save 1 ;
    print
        $b,   
    2+$u-$o,
    $a,
    $.-$b-2, # $. is the number of lines total
    $o-1
}
$u+=s/_//g; # count _s incrementally
$o+=s/O//g; # count Os incrementally
s/^\|// && $b++ # it's backrest if it starts with |
    && /\|/ && $a++ # and it's armrest if it has another one

Önceki versiyon:

İle çağır perl -0n chair.pl < chairInput

s/^\|//&&$b++?/\|/&&$a++:$h++for split"
",$_;$,=",";print$b,2+s/_//g-($o=s/O//g),$a,$h-3,$o-1

Açıklama:

s/^\|// && $back++   # the backrest is all lines starting with |
    ? /\|/ && $arm++ # the armrest is all of those lines with another |
    : $height++      # otherwise it counts for the seat height
    for split"
",$_;       # literal newline for 1 byte saved
$,=",";     # output separator
print
    $back,
    2+s/_//g-($o_count=s/O//g),  # you can find the seat size
                                 # from the different between the number
                                 # of Os and _s
    $arm,
    $height-3,
    $o_count-1

1

Piton 3, 160 158 bayt

Bu kod sadece aşağıdaki koşullarda çalışır: 1) armrest height > 0aksi takdirde _sayı kırılır ve 2) seat width > 1aksi takdirde kolçak genişlik-bir koltuğu engeller ve _sayı kırılır.

def f(s):
 a=s.split("\n");x=[];y=[];l=len(a)
 for i in range(l):
  m=a[i].count("_")
  if m:x+=i,;y+=m,
 return x[1],y[1]+1,x[1]-x[0],l-x[1]-2,s.count("O")-1
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.