Phân tích ghế của bạn


11

Thử thách này dựa trên Điều chỉnh ghế của bạn .

Thử thách

Bạn chỉ cần điều chỉnh ghế mới của bạn! Nó phù hợp với bạn một cách hoàn hảo. Tuy nhiên, bánh xe bị rít và bạn biết người sửa chữa sẽ thay đổi điều chỉnh. Vấn đề là, bạn không có thước đo, vì vậy bạn sẽ phải viết một chương trình để đo nó cho bạn. Những người sửa chữa chỉ có thể chờ đợi rất lâu. Vì vậy, mã của bạn cần phải càng ngắn càng tốt.
Ví dụ về một chiếc ghế có thể điều chỉnh

Ví dụ

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

5,3,2,2,1

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

3,5,2,3,5

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

2,13,1,1,13

Bộ phận ghế

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

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

Mô tả chi tiết ghế

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


Tựa đầu: Sẽ luôn có một tựa đầu phía trên tựa lưng

O
|

Phần tựa lưng: Số lượng |Chiều cao tựa lưng

O
|
|

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

__|__

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

_
|
|

Chân: Số lượng |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 sẽ có _trong dòng phía trên chúng.

_ _
OOO

Đầu ra

Đưa ra một chiếc ghế, bạn sẽ xuất ra nhiều biến số khác nhau.

Đầu ra phải theo thứ tự sau:

  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ẻ

Đầu ra có thể có một dòng mới, hoặc ở dạng mảng / danh sách nếu đó là một hàm.

Bảng xếp hạng

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:

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

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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

Là tay vịn đo?
J Atkin

Câu trả lời:


3

Lua, 187 byte

Tôi nghĩ rằng tôi có thể chơi golf thêm một chút nữa, nhưng tôi nghĩ rằng điều này là tốt vào lúc này. Ngoài ra, nếu đầu ra cần được phân tách bằng dấu phẩy, tôi có thể khắc phục điều đó, nhưng điều này vẫn đáp ứng các yêu cầu methinks.

Ngoài ra, đầu vào được cho ăn trong một dòng tại một thời điểm. Sau khi các bánh xe được nhập, nhấn enter bằng một dòng trống để hoàn tất đầu vào.

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

Ung dung

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

(Vị trí được đo từ trên xuống dưới, do đó, 'O' trên cùng là vị trí 1 và các bánh xe là vị trí lớn nhất.

  • Chiều cao tựa lưng là vị trí của ghế trừ đi một, bù cho chữ 'O' ở trên cùng.
  • Kích thước ghế là chiều dài của dây thứ tại vị trí của ghế trừ đi một, bù cho phần tựa lưng.
  • Chiều cao tay vịn là vị trí của ghế trừ đi vị trí của tay vịn.
  • Chiều cao chân là chiều cao của ghế ( #c) trừ đi vị trí của ghế trừ đi 2, để bù cho bánh xe và ghế ngồi.
  • Số lượng bánh xe là chiều dài của chuỗi cuối cùng.

3

Groovy, 161 byte !!!

Yay !! Không phải cuối cùng !!

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}"}

Ung dung:

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]
}

Các thử nghiệm của chương trình vô chủ:

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 byte

Có lẽ có thể được chơi golf hơn nữa. -3 byte nhờ vàoacacac cho thủ thuật chuỗi ký tự đơn.

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

Giải trình:

=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
Để tạo một chuỗi một ký tự, sử dụng \. Vì vậy "_"=\_
isaacg

Ôi, không đời nào tôi đánh bại được điều này;)
J Atkin

2

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

Rõ ràng đầu ra không cần phân tách bằng dấu phẩy

Gọi với perl -n chair.pl chairInput(phạt 1B cho cờ).

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

Ung dung:

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

Phiên bản trước:

Gọi với 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

Giải trình:

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

Python 3, 160 158 byte

Mã này hoạt động nhưng chỉ trong các điều kiện sau: 1) armrest height > 0nếu không thì _số đếm bị phá vỡ và 2) seat width > 1nếu không thì tay vịn chặn chiều rộng - một chỗ ngồi và _số lần ngắt.

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