สร้างสตริงรั้งทั้งหมดของความยาว n


16

สตริง brace ถูกกำหนดเป็นสตริงที่ประกอบด้วยอักขระ*()[]ที่วงเล็บปีกกาตรงกันอย่างถูกต้อง:

[brace-string] ::= [unit] || [unit] [brace-string]
[unit]         ::= "" || "*" || "(" [brace-string] ")" || "[" [brace-string] "]"

นี่คือวงเล็บปีกกาที่ถูกต้อง:

((())***[]**)****[(())*]*

แต่นี่ไม่ใช่:

)(
**(**[*](**)
**([*)]**

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

ข้อมูลจำเพาะ

  • คุณสามารถส่งออกสตริงในลำดับใดก็ได้
  • คุณอาจส่งออกเป็นรายการหรือสตริงที่คั่นด้วยอักขระอื่น
  • โปรแกรมของคุณต้องจัดการกับ 0 อย่างถูกต้อง มี 1 เป็นไปรั้งสตริงของความยาว 0 ""ซึ่งเป็นสตริงที่ว่างเปล่าเป็น
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง - วัดเป็นไบต์ - ชนะ

กรณีทดสอบ

0. 
1. *
2. ** () []
3. *** ()* []* (*) [*] *() *[]
4. **** ()** []** (*)* [*]* (**) **() **[] *(*) *[*] (()) ()() ()[] ([]) [**] [()] [[]] []() [][] *()* *[]*

3
จำนวนรายการในผลลัพธ์คือA025235
Gabriel Benamy

@GabrielBenamy Ah ฉันสงสัยว่าสิ่งนั้นเคยถูกมองมาก่อนหรือไม่ น่าสนใจ
แยกผลไม้

2
เงื่อนไขการชนะคืออะไร? ฉันถือว่าโปรแกรมที่สั้นที่สุด (code golf)
Zgarb


1
เนื่องจากทุกคนสมมติว่านี่คือรหัสกอล์ฟฉันจะติดแท็กความท้าทายตามนั้น หากคุณต้องการให้มีเกณฑ์การชนะที่แตกต่างกันคุณสามารถลองโพสต์ความท้าทายใหม่ได้
Martin Ender

คำตอบ:


3

เยลลี่ 29 ไบต์

-3 ไบต์ขอบคุณ @JonathanAllan

โปรดแจ้งเตือนฉันหากมีปัญหา / ข้อบกพร่อง / ข้อผิดพลาดหรือไบต์ฉันสามารถตัดออก!

“[(*)]”ṗµḟ”*œṣ⁾()Fœṣ⁾[]FµÐLÐḟ

ลองออนไลน์!

วิธีแก้ไขก่อนหน้านี้ที่ฉันมี:

“[(*)]”ṗµḟ”*œṣ⁾()Fœṣ⁾[]FµÐL€Ṇ€Tị
“[(*)]”ṗµ¹ḟ”*œṣ⁾()Fœṣ⁾[]FµÐL€Ṇ€Tị
“[(*)]”ṗµ¹ḟ”*œṣ⁾()Fœṣ⁾[]FµÐL€Ṇ€×Jḟ0ị
“[(*)]”x⁸ṗ⁸Qµ¹ḟ”*œṣ⁾()Fœṣ⁾[]FµÐL€Ṇ€×Jḟ0ị
“[(*)]”x⁸ṗ⁸Qµ¹µḟ”*œṣ⁾()Fœṣ⁾[]FµÐL€Ṇ€×Jḟ0ị
“[(*)]”x⁸ṗ⁸Qµ¹µḟ”*œṣ⁾()Fœṣ⁾[]FµÐLµ€Ṇ€×Jḟ0ị

คำอธิบาย (ความพยายามอย่างเต็มที่ในการอธิบาย):

Input n
“[(*)]”ṗ-All strings composed of "[(*)]" of length n
µḟ”*    -Filter out all occurences of "*"
œṣ⁾()   -Split at all occurences of "()"
F       -Flatten
œṣ⁾[]   -Split at all occurences of "[]"
F       -Flatten
µÐL     -Repeat that operation until it gives a duplicate result
Ðḟ      -Filter

คุณสามารถบันทึกสามไบต์โดยใช้ตัวกรอง ( “[(*)]”ṗµḟ”*œṣ⁾()Fœṣ⁾[]FµÐLÐḟ)
Jonathan Allan

15

Prolog, 69 ไบต์

s-->[];e,s.
e-->"*";"(",s,")";"[",s,"]".
b(N,A):-length(A,N),s(A,[]).

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

ข้างต้นกำหนดภาคแสดง (เทียบเท่าของฟังก์ชั่น) bซึ่งการทดสอบเพื่อดูว่าสตริงมีความยาวที่กำหนดและเป็น "สตริงรั้ง" ตามที่กำหนดไว้ในคำถาม โดยเฉพาะมันทำผ่านการสนับสนุนไวยากรณ์ / regex / รูปแบบการจับคู่ของ Prolog ที่ให้น้ำตาลที่ดีสั้น ๆ สำหรับการกำหนดการแสดงออกประเภทนี้ (เห็นได้ชัดว่านี่เป็นมาตรฐาน / พกพา สมมติว่าคำตอบนั้นใช้ได้กับการใช้งานโพรล็อกเดียวเท่านั้นดูเหมือนว่าจะใช้ได้กับทุกการใช้งานที่เป็นไปตามมาตรฐาน โปรแกรมสามารถแปลเป็นภาษาอังกฤษได้โดยตรง สองบรรทัดแรกบอกว่า " sคือสตริงว่างหรือeตามด้วยs ; eเป็นเครื่องหมายดอกจันหรือsในวงเล็บหรือsในวงเล็บเหลี่ยม "บรรทัดที่สามสามารถตีความได้ว่า" The bของ Nสามารถเป็นAถ้าAเป็นรายการที่มีความยาวNและAคือsตามด้วย null สตริง."

ฉันใช้ความระมัดระวังในการเขียนs(และดังนั้นb) เพื่อให้พวกเขาจับคู่แต่ละ "สตริงรั้ง" ในทางเดียว (ซึ่งเป็นเหตุผลที่ทั้งสองsและeต้องมีอยู่มากกว่าที่จะจัดกลุ่มพวกเขาเป็นกริยาหนึ่ง) สิ่งนี้ทำให้พวกเขาทั้งสองสามารถย้อนกลับได้ทั้งหมด ดังนั้นbสามารถใช้ในการสร้าง "สายรั้ง" ทั้งหมดของความยาวที่กำหนดนอกเหนือจากการทดสอบว่าสตริงเป็นสตริงรั้งของความยาวที่กำหนด (นอกจากนี้ยังสามารถใช้รอบที่สามวิธีเพื่อหาความยาวของรั้ง สตริง แต่นั่นก็เป็นโหมดการทำงานที่มีประโยชน์น้อยที่สุด) การดำเนินการเป็น recursive เช่นการสร้างsรหัสจะสร้างเป็นไปได้ทั้งหมดE s ที่มีความยาวไม่เกินความยาวที่จำเป็นของการส่งออกและผนวกเป็นไปได้ทั้งหมดss ที่พอดีกับพื้นที่ที่เหลือให้พวกเขา; เนื่องจากฉันระบุความยาวของอาร์กิวเมนต์ล่วงหน้า (ภายในb ) เอ็นจิน Prolog รู้ว่าไม่สามารถสร้างเอาต์พุตที่ยาวกว่าความยาวที่กำหนดซึ่งอนุญาตให้การเรียกซ้ำสิ้นสุดลง

นี่คือตัวอย่างของโปรแกรมที่ใช้งานอยู่:

| ?- b(4,A),format("~s ",[A]),fail.
**** **() **[] *()* *(*) *[]* *[*] ()** ()() ()[] (*)* (**) (()) ([]) []** []() [][] [*]* [**] [()] [[]]

รู้สึกว่าควรมีค่าใช้จ่ายสำหรับไวยากรณ์ที่จำเป็นในการระบุว่าคุณต้องการรันโปรแกรม "ส่งต่อ" หรือ "ย้อนกลับ" Perl จ่าย 1 ไบต์สำหรับทุกประเภทของสิ่งนั้น
Sparr

ทีนี้คุณสามารถสร้างกฎที่ข้อโต้แย้งในตอนท้ายมักจะเป็นค่าที่ส่งคืนแล้วกลับลำดับของอาร์กิวเมนต์เพื่อระบุว่าคุณใช้โปรแกรมในทางใด เป็นเรื่องปกติที่ภาษากอล์ฟจะต้องเข้าใจว่าพวกเขาควรทำอะไรบ้างโดยดูว่าพวกเขาได้รับการป้อนข้อมูลหรือไม่และนี่คือหลักการที่เปรียบเทียบกันได้ โดยทั่วไปแล้วมันเป็นเรื่องยากที่จะสร้างกฎที่ใช้กับทุกภาษาที่เป็นไปได้ การรันบิวอินเหมือนlengthและappendรอบทางเป็นส่วนพื้นฐานของภาษาและฟังก์ชั่นผู้ใช้มักจะทำเช่นเดียวกัน

โอ้โห ฉันคิดว่ามีสิ่งบ่งชี้บางอย่างในตัวอย่างของคุณที่ทำให้เกิดพฤติกรรมดังกล่าว
SPARR

ไม่เป็นเพราะทั้งหมดมีการให้ข้อโต้แย้ง ในโปรแกรมด้านบนฉันเขียนlength(A,N); หากNได้รับและAไม่ได้ (ซึ่งจะเกิดขึ้นหากภาคแสดงของใช้ในแบบที่ร้องขอในโปรแกรม) lengthจะสร้างรายการที่Aประกอบด้วยNองค์ประกอบที่ไม่รู้จัก การใช้lengthเพื่อวัดความยาวของรายการมักจะใช้บ่อยกว่า (แม้ว่าจะใช้ "ย้อนหลัง" เป็นเรื่องปกติในการเขียนโปรแกรม Prolog) เพรดิเคตส่วนใหญ่ทำงานด้วยวิธีเดียวกัน (เหตุผลเดียวที่พวกเขาไม่ทำคือถ้าพยายามย้อนกลับจะสร้างวงวนไม่สิ้นสุดซึ่งเป็นเรื่องธรรมดา)

1
@ ais523 -->และ DCGs โดยทั่วไปมาตรฐาน ISO เปิดฉาก
เสียชีวิต

5

Haskell, 101 94 ไบต์

7 ไบต์บันทึกโดย Zgarb!

b 0=[""]
b n=[x++y|k<-[1..n],x<-u k,y<-b$n-k]
u 1=["*"]
u n=[a:s++b|s<-b$n-2,a:b<-["()","[]"]]

เกือบจะตรงไปตรงมาตามคำนิยาม แต่ด้วย""กรณีที่ย้าย

ใช้:

*Main> map b [0..3]
[[""],["*"],["**","()","[]"],["***","*()","*[]","()*","[]*","(*)","[*]"]]
*Main> length $ b 10
21595

(การคำนวณที่สองใช้เวลาน้อยกว่าหนึ่งวินาทีในเครื่องที่ช้า)

ฉันต้องการแบ่งปันผลลัพธ์ของวิธีการอื่นที่ฉันคิดขึ้นมาขณะที่คิดเกี่ยวกับการสร้างฟังก์ชั่น มันกำหนดรายชื่อ bของรายการของสตริงดังกล่าวว่ามีรั้งสตริงทุกความยาวb!!n nในทำนองเดียวกันมีอะตอมทุกขนาดu!!n n-1สิ่งหนึ่งที่ดีคือรหัสไม่ได้ใช้ตัวเลขใด ๆ มันไม่ได้เล่นกอล์ฟอย่างสมบูรณ์: uและiอาจมีการแทรกและแน่นอนพลาดโอกาสในการเล่นกอล์ฟอื่น ๆ น่าเสียดายที่ดูเหมือนว่ามันจะสั้นกว่ารุ่นแรก แต่ก็คำนวณlength $ b !! 10ได้เร็วขึ้น

b=[""]:b%u
u=["*"]:map i b
i=concatMap(\s->['(':s++")",'[':s++"]"])
(b:c)%f=zipWith(++)[[x++y|x<-b,y<-e]|e<-f]([]:c%f)

บันทึกไบต์ที่สองด้วยและb$n-k b$n-2นอกจากนี้ในบรรทัดสุดท้ายที่คุณสามารถทำได้และกลับa:b<-["()","[]"] a:s++b
Zgarb

โอ้ฉันต้องการใช้ ["()","[]"]แต่ไม่เห็นวิธีปรับปรุงขนาดรหัสด้วย ขอบคุณ!
Christian Sievers

4

Mathematica, 116 ไบต์

#<>""&/@Select[Characters@"*([)]"~Tuples~#,(#/."*"->Nothing//.{a___,"(",")",b___}|{a___,"[","]",b___}:>{a,b})=={}&]&

คำอธิบาย

Characters@"*([)]"

ค้นหาตัวละครของสตริงที่"*([)]"ให้List {"*", "(", "[", ")", "]"}ให้

... ~Tuples~#

ค้นหาสิ่งอันดับของรายการด้านบนที่มีความยาว nค้นหาสิ่งอันดับของรายการดังกล่าวข้างต้นมีความยาว

(#/."*"->Nothing//.{a___,"(",")",b___}|{a___,"[","]",b___}:>{a,b})=={}&

ฟังก์ชัน Boolean ที่ไม่มีชื่อเพื่อค้นหาว่า tuple นั้นสมดุลหรือไม่:

#/."*"->Nothing

ลบทั้งหมด "*"ในอินพุต

... //.{a___,"(",")",b___}|{a___,"[","]",b___}:>{a,b}

ลบซ้ำที่เกิดขึ้นต่อเนื่องทั้งหมดของ "("และ")"หรือ"["และ"]"จนกว่าการป้อนข้อมูลที่ไม่เปลี่ยนแปลง

... =={}

ตรวจสอบว่าผลลัพธ์ว่างเปล่า Listตรวจสอบว่าผลที่ได้คือที่ว่างเปล่า

Select[ ... , ... ]

ค้นหาสิ่งอันดับที่ให้Trueเมื่อใช้ฟังก์ชันบูลีน

#<>""&/@

แปลงListอักขระแต่ละตัวเป็นStrings


2
ค่อนข้างไม่คาดคิด{x=a___,"(",")",y=b___}|{x,"[","]",y}ดูเหมือนว่าจะทำงาน
Martin Ender

4

Python 2, 128 ไบต์

n=input()
for i in range(5**n):
 try:s=','.join('  "00([*])00"  '[i/5**j%5::5]for j in range(n));eval(s);print s[1::4]
 except:1

Screw recursive regexes - เรากำลังใช้เครื่องมือแยกวิเคราะห์ของ Python! เพื่อตรวจสอบว่าตัวอย่างเช่น*(**[])*เป็นวงเล็บปีกกา - สตริงเราทำดังต่อไปนี้:

  1. ทำให้สตริงเหมือน"*", (0,"*","*", [0,0] ,0) ,"*"ที่ทุกตัวละครที่สองของสี่เป็นตัวละครจากวงเล็บปีกกาและตัวละครที่เหลือเป็นกาวเพื่อให้การแสดงออก Python ที่มีศักยภาพ

  2. eval มัน.

  3. หากไม่ได้เกิดข้อผิดพลาดให้พิมพ์s[1::4](ตัวอักษร brace-string)

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


2

PHP, 149 ไบต์

for(;$argv[1]--;$l=$c,$c=[])foreach($l?:['']as$s)for($n=5;$n--;)$c[]=$s.'*()[]'[$n];echo join(' ',preg_grep('/^((\*|\[(?1)]|\((?1)\))(?1)?|)$/',$l));

ใช้ตัวสร้างเก่าที่ดีที่สุดเท่าที่จะเป็นไปได้แล้วจึงกรองวิธี ใช้เช่น:

php -r "for(;$argv[1]--;$l=$c,$c=[])foreach($l?:['']as$s)for($n=5;$n--;)$c[]=$s.'*()[]'[$n];echo join(' ',preg_grep('/^((\*|\[(?1)]|\((?1)\))(?1)?|)$/',$l));" 4

1

Python ขนาด 134 ไบต์

from itertools import*
lambda n:[x for x in map(''.join,product('*()[]',repeat=n))if''==eval("x"+".replace('%s','')"*3%('*',(),[])*n)]

repl.it

nฟังก์ชั่นที่ไม่มีชื่อที่ส่งกลับรายการของสตริงที่ถูกต้องของความยาว
ทุกรูปแบบความยาวntuples ของตัวละคร*()[], ร่วมกับพวกเขาเป็นสตริงใช้map(''.join,...)และตัวกรองสำหรับผู้ที่มีความสมดุลวงเล็บโดยการเอา "คู่" "*", "()"และ"[]"ในทางกลับกันnครั้งและการตรวจสอบว่าผลที่ได้คือสตริงว่าง ( nครั้งเป็น overkill โดยเฉพาะ"*"แต่ เป็นนักกอล์ฟ)


1

จอตา , 78 ไบต์

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

.+
$*
+%1`1
*$'¶$`($'¶$`)$'¶$`[$'¶$`]
%(`^
$';
)+`(\[]|\(\)|\*)(?=.*;)|^;

A`;

ลองออนไลน์!

คำอธิบาย

ฉันกำลังสร้างสตริงที่มีความยาว 5 ที่เป็นไปได้ทั้งหมดจากนั้นฉันกรองสิ่งที่ไม่ถูกต้องออก

.+
$*

สิ่งนี้จะแปลงอินพุตเป็นเอกภาพโดยใช้1เป็นตัวเลข

+%1`1
*$'¶$`($'¶$`)$'¶$`[$'¶$`]

ซ้ำ ๆ นี้ ( +) แทนที่1หนึ่ง( ) หนึ่งในแต่ละบรรทัด ( %) ในลักษณะที่มันทำให้ห้าสำเนาของบรรทัดหนึ่งสำหรับแต่ละตัวละครที่เป็นไปได้ สิ่งนี้ทำได้โดยใช้การทดแทนคำนำหน้าและคำต่อท้าย $`และ$'เพื่อสร้างส่วนที่เหลือของแต่ละบรรทัด

การวนซ้ำนี้จะหยุดเมื่อไม่มีการแทนที่ 1 วินาทีอีกต่อไป ณ จุดนี้เรามีความยาวที่เป็นไปได้ทั้งหมดNหนึ่งอันในแต่ละบรรทัด

%(`^
$';
)+`(\[]|\(\)|\*)(?=.*;)|^;

สองขั้นตอนเหล่านี้จะดำเนินการสำหรับแต่ละบรรทัดแยกจากกัน ( %) ขั้นตอนแรกเพียงแค่ทำซ้ำบรรทัดโดยมี;เพื่อแยกทั้งสองสำเนา

ขั้นที่สองคือวงอื่น ( +) ซึ่งซ้ำ ๆ ลบ[], ()หรือ*จากสำเนาแรกของสตริงหรือเอาอัฒภาคที่จุดเริ่มต้นของบรรทัด (ซึ่งเป็นไปได้เฉพาะหลังจากสตริงได้หายไปอย่างสมบูรณ์)

A`;

สตริงที่ใช้ได้คือสตริงที่ไม่มีเครื่องหมายอัฒภาคอยู่ข้างหน้าอีกต่อไปดังนั้นเราจึงทิ้งทุกบรรทัด ( A) ซึ่งมีเครื่องหมายอัฒภาค


ฉันลองออนไลน์ด้วยอินพุต 5: ตกลง ด้วยอินพุต 6 ฉันได้รับหน้าข้อผิดพลาด
edc65

@ edc65 ใช้งานได้สำหรับฉัน แต่แน่นอนว่าวิธีการนี้ไม่มีประสิทธิภาพอย่างแน่นอนดังนั้นจึงใช้เวลาสองสามวินาที หน้าข้อผิดพลาดประเภทใดที่คุณหมายถึง
Martin Ender

อินพุต 5: คำตอบใน 3 วินาที อินพุต 6: หลังจาก 7 วินาที, ภายในกล่องเอาท์พุท, ฉันจะได้รับซอร์ส html ของสิ่งที่อาจเป็นหน้าข้อผิดพลาดจากพร็อกซีของฉัน ถ้าเป็นการหมดเวลาแล้วมันเป็นการหมดเวลาที่สั้นมาก ... ฉันพยายามรับกรณีทดสอบที่ถูกต้องสำหรับอินพุต 6 เนื่องจากคำตอบของฉันดูเหมือนจะใช้ได้กับอินพุต 5 แต่ผิดสำหรับ 6 ตัวขึ้นไป
edc65

@ edc65 ใช้เวลานานกว่า 7 วินาทีและการหมดเวลาของ TIO นั้นใช้เวลาหนึ่งนาที ฉันไม่เคยเห็นข้อผิดพลาดที่คุณอธิบายอาจจะคุ้มค่าที่จะนำสิ่งนี้มาใช้ในการแชทของ TIO (หรือหากคุณต้องการที่จะเป็น gitterหรือGitHub ) สำหรับเอาต์พุตอ้างอิงนี่คือสิ่งที่ฉันได้รับจากอินพุต 6: pastebin.com/WmmPPmrc (อินพุต 7 ใช้เวลามากกว่าหนึ่งนาที)
Martin Ender

1

Python 3.5, 146 ไบต์

import re;from itertools import*;lambda f:{i for i in map(''.join,permutations("[()]*"*f,f))if re.fullmatch("(\**\[\**\]\**|\**\(\**\)\**)*|\**",i)}

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

print(<Function Name>(<Integer>))

เอาต์พุตชุด Python ของสตริงที่ไม่เรียงลำดับซึ่งแสดงถึงวงเล็บปีกกาที่เป็นไปได้ทั้งหมดของความยาวอินพุต

ตัวอย่างเช่นสมมติว่าชื่อฟังก์ชั่นด้านบนการGเรียกใช้G(3)จะส่งผลให้ผลลัพธ์ต่อไปนี้:

{'[*]', '*()', '*[]', '(*)', '***', '[]*', '()*'}

ลองออนไลน์! (Ideone)


อย่างไรก็ตามถ้าเช่นฉันคุณไม่ได้เป็นแฟนตัวยงของการทำให้สิ่งต่าง ๆ เรียบง่ายโดยใช้ built-in ดังนั้นนี่คือคำตอบดั้งเดิมของฉันที่ไม่ได้ใช้ใด ๆห้องสมุดภายนอกเพื่อหาพีชคณิตและขณะยืนอยู่ที่มหันต์288 237 ไบต์ :

import re;D=lambda f:f and"for %s in range(%d)"%(chr(64+f),5)+D(f-1)or'';lambda g:[i for i in eval('["".join(('+''.join('"[()]*"['+chr(o)+'],'for o in range(65,65+g))+'))'+D(g)+']')if re.fullmatch("(\**\[\**\]\**|\**\(\**\)\**)*|\**",i)]

อีกครั้งเช่นเดียวกับคำตอบที่แข่งขันสิ่งนี้อยู่ในรูปแบบของฟังก์ชั่นแลมบ์ดาดังนั้นจึงต้องถูกเรียกในรูปแบบ

print(<Function Name>(<Integer>))

และส่งออกเป็นไพ ธ อน รายการของสตริงที่ไม่เรียงลำดับซึ่งแสดงถึงวงเล็บปีกกาทั้งหมดของความยาวอินพุต ตัวอย่างเช่นถ้าแลมบ์ดาถูกเรียกใช้ในG(3)ครั้งนี้เอาต์พุตจะเป็นดังนี้:

['*()', '(*)', '*[]', '[*]', '()*', '[]*', '***']

นอกจากนี้ยังเป็นจำนวนมากได้เร็วกว่าคำตอบอื่น ๆ ของฉันสามารถที่จะหารั้งสตริงทุกความยาว11ประมาณ115 วินาที , ผู้ที่มีความยาว10ประมาณ19 วินาทีผู้ที่มีความยาว9ประมาณ4 วินาทีและผู้ที่มีความยาว8ใน เกี่ยวกับ0.73 วินาทีในเครื่องของฉันในขณะที่คำตอบของฉันการแข่งขันจะใช้เวลามากนานกว่า 115 6วินาทีสำหรับการป้อนข้อมูลของ

ลองออนไลน์! (Ideone)


0

05AB1E, 23 ไบต์

…[(*.∞sãʒ'*м„()„[]‚õ:õQ

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

ลองออนไลน์!

อย่างไร?

…[(* - the string '[(*'
.∞ - intersected mirror, '[(*'=>'[(*)]'
s - swap the top two items, which moves the input to the top
ã - cartesian power
ʒ ...  - filter by this code:
  '*м      - remove all occurrences of '*'
  „()„[]‚  - the array ["()","[]"]
  õ        - the empty string ""
  :        - infinite replacement (this repeatedly removes "()", "[]", and "*" from the string
  õQ       - test equality with the empty string

ฉันไม่รู้จัก 05AB1E แต่ยังไม่*สามารถอยู่ในอาร์เรย์การลบได้หรือไม่ และการõQตรวจสอบอาจถูกแทนที่ด้วยสิ่งที่ไม่ชอบ?
แยกผลไม้

ข้อเสนอแนะแรกจะไม่บันทึกไบต์ใด ๆ : '*м„()„[]‚õ:vs „()„[]‚'*«õ:(ไม่ผ่านการทดสอบ) เนื่องจากไม่มีคำสั่งเพื่อเชื่อม 3 ค่า AFAIK ส่วนที่สองจะไม่ทำงานเนื่องจากไม่มีสิ่งใดที่จะทำงานเช่นนั้นบนสตริง AFAIK (AFAIK เป็นตัวแทนของ "เท่าที่ฉันรู้")
Zacharý
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.