พาร์ติชันของรายการ


9

คำตอบสำหรับคำถามนี้ยาวเกินไป

ความท้าทายของคุณคือการเขียนฟังก์ชั่นการแบ่งพาร์ติชันด้วยจำนวนอักขระที่น้อยที่สุด

ตัวอย่างอินพุต

['a', 'b', 'c']

ตัวอย่างผลลัพธ์

[(('a'),('b'),('c')),
 (('a', 'b'), ('c')),
 (('a', 'c'), ('b')),
 (('b', 'c'), ('a')),
 (('a', 'b', 'c'))]

อินพุตสามารถเป็นรายการ / อาร์เรย์ / ชุด / สตริง ฯลฯ สิ่งที่ง่ายที่สุดสำหรับการทำงานของคุณในการประมวลผล

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

ฟังก์ชันของคุณควรทำงานอย่างน้อย 6 รายการในอินพุต


พาร์ติชันที่ว่างเปล่าจะเป็นส่วนหนึ่งของผลลัพธ์ด้วยหรือไม่
FUZxxl

คำตอบ:


3

GolfScript (43 ตัวอักษร)

{[[]]:E\{:v;{:^E+1/{^1$-\[~[v]+]+}/}%}/}:P;

หรือ

{[[]]:E\{:v;{:^E+1/{^1$-\{[v]+}%+}/}%}/}:P;

รูปแบบอินพุตเดียวกันรูปแบบเอาต์พุตและชื่อฟังก์ชันเหมือนกับโซลูชันของ Howard ไม่มีการบังคับเดรัจฉาน: วิธีนี้ใช้วิธีวนซ้ำอย่างง่าย ๆ ในการเพิ่มองค์ประกอบหนึ่งจากรายการอินพุตไปยังพาร์ติชันในแต่ละครั้งที่วนรอบวงรอบนอก


6

GolfScript, 51 ตัวอักษร

{[[]]\{[.;]`{1$[1$]+@@`1$`{[2$]-@@[+]+}++/}+%}/}:P;

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

[1 2] P            # => [[[1] [2]] [[1 2]]]
["a" "b" "c"] P    # => [[["a"] ["b"] ["c"]] [["b"] ["a" "c"]] [["a"] ["b" "c"]] [["a" "b"] ["c"]] [["a" "b" "c"]]]

มันยังทำงานกับรายการที่มีขนาดใหญ่กว่า:

6, P ,p            # prints 203, i.e. Bell number B6
8, P ,p            # 4140

คุณสามารถทำการทดสอบออนไลน์ได้


6

J, 51 ตัวอักษร

([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1

รับอินพุตจากคีย์บอร์ดรายการที่คั่นด้วยช่องว่าง:

   ([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
a b c
+-----+------+------+------+-------+
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
||abc|||ab|c|||ac|b|||a|bc|||a|b|c||
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
+-----+------+------+------+-------+

1

Haskell, 90 87 71 66

ที่บันทึกไว้ 5 ไบต์ขอบคุณที่Nimi

x#[]=[[[x]]]
x#(y:s)=((x:y):s):map(y:)(x#s)
p=foldr((=<<).(#))[[]]

ตัวอย่าง:

*Main> p "abc"
[["abc"],["bc","a"],["ac","b"],["c","ab"],["c","b","a"]]

ไม่กี่ไบต์ที่จะบันทึก: จัดเรียงวงเล็บในบรรทัดที่ 2 #: และเปิดแลมบ์ดาเป็นรุ่นจุดฟรี::map(y:)(x#s) foldr((=<<).(#))[[]]
nimi

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