Bir listenin bölümleri


9

Cevabı bu soruya çok uzun fazla

Zorluğunuz, en az sayıda karaktere bir bölümleme işlevi yazmaktır .

Giriş örneği

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

Çıktı örneği

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

Girdi bir liste / dizi / küme / dizi vb. Olabilir.

Ayrıca, yapı açık olduğu sürece kendinize uygun çıktı biçimini de seçebilirsiniz.

İşleviniz girişteki en az 6 öğe için çalışmalıdır


boş bölüm de çıktının bir parçası mı olacak?
FUZxxl

Yanıtlar:


3

GolfScript (43 karakter)

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

veya

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

Howard'ın çözümü ile aynı girdi biçimi, çıktı biçimi ve işlev adı. Kaba zorlama yoktur: bu, dış döngüde her seferinde giriş listesinden bölüme bir öğe eklemenin basit yinelemeli yaklaşımını alır.


6

GolfScript, 51 karakter

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

Komut dosyası, Pdiziyi yığının üstünden alan ve tüm bölümlerin listesini geri iten bir değişkeni tanımlar , örn.

[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"]]]

Ayrıca daha büyük listelerde de çalışır:

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

Sen olabilir çevrimiçi kendi testlerini .


6

J, 51 karakter

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

Klavyeden, boşluklarla ayrılmış öğelerden giriş alır:

   ([:<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

Nimi sayesinde 5 bayt kaydedildi .

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

Misal:

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

Birkaç byte kaydetmek için: 2. satırında parantez yeniden düzenlemek #: :map(y:)(x#s)ve bir nokta-ücretsiz sürümü içine lambda çevirmek: foldr((=<<).(#))[[]].
nimi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.