แก้ไขเครื่องมือจัดฟัน ฯลฯ


15

ภารกิจของคุณคุณควรเลือกที่จะยอมรับมันคือการเพิ่มขั้นต่ำจำนวนวงเล็บวงเล็บและวงเล็บที่จะทำให้สตริงที่กำหนด (ที่มีวงเล็บเท่านั้นวงเล็บและวงเล็บ) มีการจับคู่รั้งที่ถูกต้อง ความสัมพันธ์ของสัญลักษณ์ที่เพิ่มเข้ามาจะต้องถูกทำลายโดยมีระยะห่างสูงสุดระหว่างเครื่องหมายปีกกาคู่ คุณต้องส่งคืนคำตอบที่ถูกต้องเพียงข้อเดียวที่ตรงกับกฎทั้งสองนี้ ความสัมพันธ์เพิ่มเติมหากมีอยู่อาจถูกทำลายในแบบที่คุณเห็นว่าเหมาะสม

ตัวอย่าง:

input      output
                          // Empty String is a legal input
[          []             // Boring example
[()]       [()]           // Do nothing if there's nothing to be done
({{        ({{}})         // NOT (){}{} (0 + 0 + 0). Maximum distance is 4 + 2 + 0, ({{}})
[([{])]}   {[([{}])]}     // NOT [([])]{[([])]} or similar

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

คุณอาจสันนิษฐานว่าสตริงป้อนข้อมูลประกอบด้วยอักขระ 6 ตัวต่อไปนี้เท่านั้น (หรือขาดไป): [](){}(คุณไม่จำเป็นต้องสนับสนุน<>)

นี่คือโปรแกรมที่สั้นที่สุดชนะ ช่องโหว่มาตรฐานเป็นสิ่งต้องห้ามของหลักสูตร


คุณหมายถึงการทำซ้ำชื่อโดยตรงภายใต้ชื่อจริงหรือทำซ้ำแท็กเหนือแท็กจริงหรือไม่ เพียงแค่ถามในกรณีที่คุณคัดลอกวางจาก Sandbox และลืมลบออก
Rainbolt

@Rainbolt อดีตไม่ (กล่องทราย) หลังใช่
durron597

1
@AlexA ฉันเห็นว่าพวกเขาแตกต่างกันเล็กน้อย แต่ฉันคิดว่าพวกเขาคล้ายกันเกินไปที่จะพิจารณาคำถามแยกต่างหาก
NinjaBearMonkey

ยุติธรรมพอสมควร แน่นอนว่ามันไม่ตัดและไม่แห้งและฉันจะไม่ปิดมันถ้าคนอื่นตัดสินใจไม่ทำ
NinjaBearMonkey

ฉันคิดว่ามันแตกต่างกันพอสมควร โหวตให้เปิดใหม่
nderscore

คำตอบ:


1

Python 2 - 198

ฉันหวังว่าจะได้ความเข้าใจเพิ่มขึ้นอีกเล็กน้อย แต่ตอนนี้ไม่มีเวลามากพอที่จะทดสอบวิธีการทำสิ่งต่างๆ

s="()[]{}";f=s.find
def F(S):
 r=m=""
 for c in S:
    i=f(c)^1
    if i%2:m=c+m;r+=c
    else:
     for d in m:
        if d==s[i]:break
        r+=s[f(d)^1]
     else:r=s[i]+r+c
     m=m[1:]
 for c in m:r+=s[f(c)^1]
 return r

OP ไม่ได้มีตัวอย่างเช่น{[([{}])]}{[(กับกลุ่มที่อยู่ติดกัน) แต่จำเป็นต้องใช้ฟังก์ชั่นนี้หรือไม่ซึ่งผลลัพธ์นี้ถูกต้อง{[([{}])]}{[]}


ขนาด 198 ไบต์เป็นอย่างไร
Zacharý

@ZacharyT แท็บ ( \t) ได้รับการจัดรูปแบบเป็น 4 ช่องว่างในกองล้น แต่ฉันจริงสลับแท็บและช่องว่าง (คุณสามารถทำเช่นนี้สำหรับระดับเยื้องในหลาม 2 ไม่ 3) ระดับแรกเพื่อให้เป็น[space]ที่สองคือ[tab]ที่สามคือการออกไปคือ[tab][space] [tab][tab]การป้อนรหัสด้วยช่องว่างให้ฉัน 227 จากที่นี่mothereff.in/byte-counterและฉันนับ 10 แท็บดังนั้น 227 - (3 * 10) = 197 ฮะฉันคิดว่าฉันนับจริง ๆ นับถอยหลังเมื่อฉันกลับไป โพสต์สิ่งนี้
KSab

แดง! นั่นเป็นเคล็ดลับที่ดีจริงๆ (ป้อนที่ท้ายบรรทัด) คุณสามารถรวมด้านล่าง for-loop และ return-statement ไปreturn r+[s[f(c)^1]for c in m]ที่ bytes
Zacharý

1

Haskell, 513

hฟังก์ชั่น รุ่นก่อนหน้าไม่ได้ให้คำตอบที่ถูกต้องสำหรับ"({{)["และ"({{)}}"

import Control.Monad

m '('=')'
m '['=']'
m '{'='}'
m ')'='('
m ']'='['
m '}'='{'

data B=B Char[B]|N[B]|Z B Char[B]
instance Eq B where(==)a b=q a==q b
instance Ord B where(<=)a b=q a<=q b

w(B o s)=o:(s>>=w)++[m o]
v(N k)=k>>=w
n(B _ k)=(sum$n<$>k)+1
q(N k)=sum$n<$>k

u(Z(Z g pc pk) c k)=Z g pc(pk++[B c k])
u(Z(N pk) c k)=N(pk++[B c k])
t(N k)=N k
t z=t$u z

f z c|elem c "([{"=[Z z c[]]
f z@(Z p o k) c|m c==o=[u z]|2>1=(u$Z(Z p o [])(m c)k):f(u z)c
f (N k)c=[Z(N[])(m c)k]

h s=v.minimum$t<$>foldM f(N [])s
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.