Tìm một khu phố cân bằng


10

Nhiệm vụ của bạn sẽ là lấy một và một số nguyên biểu thị khoảng cách Levenshtein (số lượng ký tự phải được chèn, xóa hoặc thay đổi để tạo một chuỗi thành một chuỗi khác) và bạn phải tìm số chuỗi cân bằng với khoảng cách đó từ chuỗi gốc (tức là vùng lân cận của chuỗi đó).

Quy định

  • Chuỗi cân bằng sẽ chỉ bao gồm các ký tự ()<>[]{}

  • Bạn sẽ chỉ được yêu cầu tìm các vùng lân cận cho khoảng cách thậm chí tích cực

  • Đầu vào và đầu ra là linh hoạt. Miễn là bạn lấy tất cả dữ liệu thích hợp và đưa ra câu trả lời chính xác mà không vi phạm bất kỳ sơ hở nào, tôi hài lòng với câu trả lời của bạn.

  • Bạn có thể chọn chia tất cả các đầu vào số nguyên của mình cho 2 nếu bạn chọn.

  • Đây là vì vậy mục tiêu là giảm thiểu số lượng byte trong câu trả lời của bạn

Điều này được lấy cảm hứng từ CMC nàycâu trả lời này

Tủ thử

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

Dưới đây là một vài ví dụ nhỏ với các vùng lân cận thực tế bao gồm:

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

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

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

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

2
Đang cố gắng để làm một brute-forer brute-forer? : D
mbomb007

@ mbomb007 Tôi đã tính đến tất cả các lời khuyên của bạn. Cảm ơn đã giúp đỡ!
Ad Hoc Garf Hunter


Câu trả lời:


3

Toán học, 187 173 byte

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

Brute lực thuần túy chức năng. #đại diện cho đối số thứ nhất (chuỗi bắt đầu) và #2đại diện cho đối số thứ hai (khoảng cách).

Characters@" ()[]<>{}"là danh sách các nhân vật có thể (bao gồm " ")

Tuples[Characters@" ()[]<>{}",StringLength@#+#2] là danh sách tất cả các bộ dữ liệu của các ký tự có độ dài nhiều nhất là độ dài chuỗi gốc cộng với khoảng cách.

Tuples[Characters@" ()[]<>{}",StringLength@#+#2]/." "->""thay thế tất cả các " "ký tự bằng chuỗi trống.

""<>#&/@(...) tham gia tất cả các danh sách nhân vật đó thành chuỗi.

Tiếp theo, Selecttất cả các chuỗi như vậy được cân bằng và có chuỗi phù hợp EditDistancevới chức năng sau:

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

Tiếp theo chúng tôi sử dụng Unionđể xóa các bản sao và lấy Length.

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.