ค้นหาย่านที่สมดุล


10

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

เงื่อนไข

  • สตริงที่สมดุลจะประกอบด้วยอักขระเท่านั้น ()<>[]{}

  • คุณจะถูกขอให้ค้นหาพื้นที่ใกล้เคียงในระยะทางที่เป็นบวก

  • อินพุตและเอาต์พุตมีความยืดหยุ่น ตราบใดที่คุณรับข้อมูลที่เหมาะสมและส่งออกคำตอบที่ถูกต้องโดยไม่ละเมิดช่องโหว่ใด ๆ ฉันมีความสุขกับคำตอบของคุณ

  • คุณอาจเลือกหารจำนวนเต็มทั้งหมด 2 ถ้าคุณเลือก

  • นี่คือดังนั้นจุดประสงค์คือเพื่อลดจำนวนไบต์ในคำตอบของคุณ

นี่คือแรงบันดาลใจจากCMC นี้และคำตอบนี้

Testcases

   Case   | Distance | Size of Neighborhood
--------------------------------------------
    ()    |    2     |         18
   ({})   |    2     |         33
   (())   |    2     |         32
    <>    |    4     |        186
   [][]   |    4     |        688
  <(){}>  |    4     |        1379
    {}    |    6     |        2270
  []{}[]  |    6     |        41097

นี่คือตัวอย่างเล็ก ๆ น้อย ๆ ที่มีละแวกใกล้เคียงจริงรวมอยู่:

(), 2 :
{'', '<>', '()[]', '()()', '(())', '([])', '()<>', '{}', '{()}', '<>()', '(){}', '{}()', '<()>', '(<>)', '[()]', '[]()', '({})', '[]'}

({}), 2 :
{'([]{})', '()', '{}', '<({})>', '({<>})', '<{}>', '({()})', '(<>{})', '({}<>)', '({[]})', '(({}))', '({{}})', '({}[])', '{({})}', '({})()', '{}({})', '(())', '()({})', '([])', '<>({})', '({}{})', '({}){}', '({})<>', '(<{}>)', '({})[]', '((){})', '[{}]', '{{}}', '[]({})', '(<>)', '({}())', '([{}])', '[({})]'}

(()), 2 :
{'(())[]', '<>(())', '()', '{}(())', '{()}', '({()})', '{(())}', '(([]))', '(({}))', '(()[])', '(())<>', '((()))', '([])', '((<>))', '()(())', '(<()>)', '([()])', '[(())]', '(()){}', '(())()', '(()())', '(<>())', '(()<>)', '((){})', '<(())>', '<()>', '([]())', '(<>)', '({}())', '[()]', '({})', '[](())'}

<>, 4 :
{'<><<>>', '(<>)<>', '[<>][]', '<<><>>', '(){<>}', '(<>)()', '[<()>]', '<({})>', '<>()<>', '<[<>]>', '[][]<>', '<>[]<>', '<><><>', '[]<{}>', '[]<<>>', '[]<><>', '{<><>}', '[{<>}]', '<(<>)>', '(())<>', '{}<>{}', '()(<>)', '{()<>}', '(())', '{<>{}}', '(<><>)', '([])<>', '[]<[]>', '<{}<>>', '<><()>', '{()}<>', '{{}}<>', '{<>()}', '<<>>()', '{<<>>}', '<()>()', '<[]>()', '<>[<>]', '(<>())', '{}<>()', '(()<>)', '[{}]', '{{}}', '[]()', '[(<>)]', '<{}[]>', '<<>>[]', '{}<()>', '<>', '[()]<>', '<()><>', '[[]]<>', '[{}]<>', '[]<>[]', '()[<>]', '[]<>()', '{<>}{}', '{<[]>}', '<>(<>)', '(<>)[]', '<{}>()', '{}<><>', '{<>}()', '{[]}', '{[]}<>', '<<<>>>', '[]<()>', '<<[]>>', '<<{}>>', '[[]]', '()()<>', '[]{<>}', '<><[]>', '[[]<>]', '<{}()>', '<{<>}>', '<[]{}>', '{}<{}>', '<{}>[]', '()<<>>', '(<()>)', '[]{}', '{{}<>}', '{}()', '()<>[]', '<{}><>', '{[<>]}', '<><{}>', '<(())>', '<><>{}', '[()]', '<<>>{}', '{}{}<>', '[<<>>]', '<[][]>', '(<<>>)', '<[]><>', '[<>]<>', '[<>[]]', '[{}<>]', '{()}', '{<>[]}', '[]{}<>', '{(<>)}', '(<[]>)', '()[]<>', '<>{<>}', '{[]<>}', '(<>{})', '({}<>)', '[<><>]', '<><>()', '{}[<>]', '<{[]}>', '<<()>>', '<<>{}>', '([<>])', '<[]()>', '()()', '([])', '[[<>]]', '((<>))', '[](<>)', '(){}<>', '[()<>]', '<([])>', '<()()>', '[][]', '<<>[]>', '[<[]>]', '({})<>', '<{{}}>', '<[{}]>', '<{}{}>', '{}(<>)', '<<>><>', '[<>()]', '[][<>]', '({})', '{}[]<>', '{}<[]>', '<[()]>', '()[]', '<()>[]', '{{<>}}', '(<>){}', '{}{}', '({<>})', '{<()>}', '{}{<>}', '[]()<>', '<[]>[]', '(<>[])', '<[]>{}', '{}()<>', '()<[]>', '()<{}>', '{}<<>>', '<{}>{}', '{}[]', '()<>{}', '<()<>>', '[<>{}]', '{<>}[]', '<<>()>', '<><>[]', '{<{}>}', '<()[]>', '()<><>', '[<>]()', '()<>()', '{}<>[]', '<{()}>', '(<{}>)', '(){}', '()<()>', '<(){}>', '{<>}<>', '<[[]]>', '[]<>{}', '([]<>)', '<[]<>>', '[<>]{}', '<()>{}', '<>{}<>', '[<{}>]'}

2
กำลังพยายามสร้าง Brain-Flak brute-forcer อยู่ใช่ไหม? : D
mbomb007

@ mbomb007 ฉันได้คำนึงถึงคำแนะนำทั้งหมดของคุณแล้ว ขอบคุณสำหรับความช่วยเหลือ!
Ad Hoc Garf Hunter


คำตอบ:


3

Mathematica, 187 173 ไบต์

Length@Union@Select[""<>#&/@(Tuples[Characters@" ()[]<>{}",StringLength@#+#2]/." "->""),sFixedPoint[StringReplace["()"|"[]"|"{}"|"<>":>""],s]==""&&EditDistance[s,#]==#2]&

ฟังก์ชั่นบริสุทธิ์กำลังดุร้าย #แสดงถึงอาร์กิวเมนต์แรก (สตริงเริ่มต้น) และ#2แสดงถึงอาร์กิวเมนต์ที่สอง (ระยะทาง)

Characters@" ()[]<>{}"คือรายการของอักขระที่เป็นไปได้ (รวมถึง" ")

Tuples[Characters@" ()[]<>{}",StringLength@#+#2] คือรายการของ tuples ทั้งหมดของตัวละครเหล่านั้นที่มีความยาวไม่เกินความยาวสตริงดั้งเดิมบวกกับระยะทาง

Tuples[Characters@" ()[]<>{}",StringLength@#+#2]/." "->""แทนที่" "อักขระทั้งหมดด้วยสตริงว่าง

""<>#&/@(...) รวมรายการอักขระเหล่านั้นทั้งหมดลงในสตริง

ต่อไปเราSelectทุกสตริงดังกล่าวซึ่งมีความสมดุลและมีความเหมาะสมEditDistanceกับฟังก์ชั่นดังต่อไปนี้:

s                                                                                                 String s
                                                                                                 maps to
  FixedPoint[StringReplace["()"|"[]"|"{}"|"<>":>""],s]                                              the fixed point of cancelling out pairs of brackets
                                                      ==                                             equals
                                                        ""                                          the empty string
                                                          &&                                        and
                                                            EditDistance[s,#]==#2                   the distance from s to # is #2

ต่อไปเราจะใช้ในการลบที่ซ้ำกันและใช้UnionLength

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