วิเคราะห์เก้าอี้ของคุณ


11

ความท้าทายนี้จะขึ้นอยู่กับ Downgoat เป็นปรับเก้าอี้ของคุณ

ท้าทาย

คุณเพิ่งปรับเก้าอี้ใหม่ของคุณ! มันเหมาะกับคุณอย่างสมบูรณ์แบบ อย่างไรก็ตามล้อเป็นเสียงแหลมและคุณรู้ว่าคนซ่อมจะเปลี่ยนการปรับ ปัญหาคือคุณไม่มีไม้บรรทัดดังนั้นคุณต้องเขียนโปรแกรมเพื่อวัดมันให้คุณ คนซ่อมแซมสามารถรอได้นานเท่านั้น ดังนั้นรหัสของคุณจะต้องสั้นที่สุด
ตัวอย่างของเก้าอี้ปรับระดับได้

ตัวอย่าง

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

5,3,2,2,1

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

3,5,2,3,5

O
|      _
|______|______
 ______|______
 OOOOOOOOOOOOO

2,13,1,1,13

ชิ้นส่วนเก้าอี้

เก้าอี้มีส่วนประกอบต่าง ๆ :

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

คำอธิบายเก้าอี้โดยละเอียด

ชิ้นส่วนของเก้าอี้คือ:


พนักพิงศีรษะ:มีจะเป็นหนึ่งในพนักพิงศีรษะด้านบนพนักพิง

O
|

พนักพิง:จำนวน|คือความสูงของพนักพิง

O
|
|

ที่นั่ง:จำนวน_คือความกว้างที่นั่งมี|ที่ตรงกลางสำหรับที่เท้าแขน

__|__

ที่เท้าแขน:จำนวนของ|เป็นที่เท้าแขนสูง นี้จะถูกแทรกอยู่ตรงกลางของที่นั่ง

_
|
|

ขา:จำนวน|คือความสูงของขา

|
|

ล้อ:ล้ออยู่ตรงกลางใต้ขา หากพวกเขามีมากกว่าหนึ่งทั้งหมดทั้งหมดยกเว้นล้อกลางจะมี_ในบรรทัดข้างต้น

_ _
OOO

เอาท์พุต

รับเก้าอี้คุณจะได้รับผลลัพธ์ตัวแปรต่างๆ

ผลลัพธ์ควรอยู่ในลำดับต่อไปนี้:

  1. พนักพิงสูง
  2. ความกว้างที่นั่งแปลก ๆ เสมอ
  3. ที่เท้าแขนความสูงน้อยกว่าความสูงของพนักพิงเสมอ
  4. ความสูงของขา
  5. จำนวนล้อต้องน้อยกว่าหรือเท่ากับความกว้างที่นั่งและคี่เสมอ

ผลลัพธ์อาจมีการขึ้นบรรทัดใหม่หรืออยู่ในรูปแบบอาร์เรย์ / รายการถ้าเป็นฟังก์ชัน

ลีดเดอร์บอร์ด

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในบรรทัดแรกโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของสองไฟล์หรือคุณต้องการแสดงรายการการลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

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

ที่เท้าแขนวัดหรือไม่?
J Atkin

คำตอบ:


3

Lua, 187 ไบต์

ฉันคิดว่าฉันอาจจะเล่นกอล์ฟได้มากกว่านี้ แต่ฉันคิดว่ามันดีในตอนนี้ นอกจากนี้หากผลลัพธ์ต้องแยกด้วยเครื่องหมายจุลภาคฉันสามารถแก้ไขได้ แต่สิ่งนี้ยังคงตรงตามข้อกำหนดต่าง ๆ

นอกจากนี้อินพุตจะถูกป้อนในหนึ่งบรรทัดในแต่ละครั้ง หลังจากอินพุตล้อแล้วให้กด Enter ด้วยบรรทัดว่างเพื่อป้อนข้อมูลให้จบ

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

(ตำแหน่งจะวัดจากบนลงล่างดังนั้น 'O' ด้านบนจึงเป็นตำแหน่งที่ 1 และล้อเป็นตำแหน่งที่ใหญ่ที่สุด

  • ความสูงของพนักพิงคือตำแหน่งของที่นั่งลบด้วยค่าชดเชย 'O' ที่ด้านบน
  • ขนาดที่นั่งคือความยาวของสายอักขระที่ตำแหน่งของที่นั่งลบหนึ่งเพื่อชดเชยพนักพิง
  • ความสูงของที่เท้าแขนคือตำแหน่งของที่นั่งลบด้วยตำแหน่งของที่วางแขน
  • ความสูงของขาคือความสูงของเก้าอี้ ( #c) ลบตำแหน่งของที่นั่งลบ 2 เพื่อชดเชยล้อและที่นั่ง
  • จำนวนล้อคือความยาวของสตริงสุดท้าย

3

Groovy ขนาด 161 ไบต์ !!!

เย้!! ไม่ใช่ในที่สุด !!

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

การทดสอบโปรแกรมที่ไม่ได้ลงคะแนน:

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 ไบต์

อาจจะสามารถเล่นกอล์ฟต่อไปได้ -3 ไบต์ขอบคุณissacgสำหรับเคล็ดลับสตริงอักขระเดียว

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

คำอธิบาย:

=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
\เพื่อให้หนึ่งสายอักขระการใช้งาน ดังนั้น"_"=\_
isaacg

Ouch ฉันจะเอาชนะมันไม่ได้หรอก;)
J Atkin

2

Perl, 93 + 2 = 95 90 + 1 = 91 83 + 1 = 84 ไบต์

เห็นได้ชัดว่าผลลัพธ์ไม่จำเป็นต้องคั่นด้วยเครื่องหมายจุลภาค

เรียกใช้ด้วยperl -n chair.pl chairInput(การลงโทษ 1B สำหรับธง)

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

รุ่นก่อนหน้า:

วิงวอนกับ 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

คำอธิบาย:

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 bytes

รหัสนี้ใช้งานได้เฉพาะในเงื่อนไขต่อไปนี้: 1) armrest height > 0มิฉะนั้นการ_นับถอยหลังและ 2) seat width > 1มิฉะนั้นที่เท้าแขนจะบล็อกที่นั่งที่มีความกว้างหนึ่งและการ_นับถอยหลัง

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.