Altküme Faktörlerini Bul


14

Sonlu bir pozitif tamsayı grubumuz olduğunu hayal edelim. Bu küme, kümede bulunan her tamsayının bir scantron veya delikli kart gibi doldurulduğu bir nokta çizgisi olarak temsil edilebilir . Örneğin, küme {1,3,4,6}şu şekilde temsil edilebilir:

*.**.*

*grubumuzun bir üyesini temsil eder ve ayarladığı .bir üye olmayan bir tamsayıyı temsil eder.

Bu kümelerin "faktörleri" vardır. Y, x'in kopyalarından oluşturulabiliyorsa, gevşek x, y faktörüdür. Daha titiz bir şekilde faktör tanımımız şöyledir:

  • x, yalnızca y bir ofsetli x olan bir dizi ayrık kümenin birleşimi ise y faktörüdür .

Biz çağırır *.*bir faktör arasında *.**.*oldukça net bir şekilde iki nüsha oluşur çünkü *.*sonuna koymak uca.

*.**.*
------
*.*...
...*.*

Faktörlerin uçtan uca olması gerekmez, bunun *.*bir faktörü olduğunu da söyleyebiliriz*.*.*.*

*.*.*.*
-------
*.*....
....*.*

Faktörler de çakışabilir. Bu *.*aynı zamanda bir faktördür****

****
----
*.*.
.*.*

Ancak bir sayı birden fazla faktör tarafından karşılanamaz. Örneğin *.*olan olmayan bir faktör *.*.*.


İşte daha karmaşık bir örnek:

 *..*.**..***.*.*

Bunun *..*.*bir faktörü var. Aşağıda üç örneğini sıraladığım yerde görebilirsiniz *..*.*.

*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*

Görev

Herhangi bir makul gösterim çıktısıyla bir set verildiğinde, girdinin faktörleri olan tüm kümeler.

Herhangi bir değere göre endeksleyebilirsiniz (yani, girişte bulunabilecek en küçük sayıyı seçebilirsiniz). Ayrıca, girdi kümesinin her zaman en küçük değeri içereceğini varsayabilirsiniz.

Bu bir sorusudur, bu yüzden bunu mümkün olduğunca az baytta yapmayı amaçlamalısınız.

Test Durumları

Bu test vakaları elle yapıldı, büyük olanlarda bir veya iki hata olabilir

*                -> *
*.*.*            -> *, *.*.*
*.*.*.*          -> *, *.*, *...*, *.*.*.*
******           -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.**  -> *, *...**.**, *.....*, *...*****.**.**

Kümeyi bir sayı listesi olarak alırsak (ör. [1,3,5,7]İçin *.*.*.*) sıralandığını varsayabilir miyiz?
Martin Ender

1
Bu, katsayıları 0 ve 1 ile sınırlı olan polinom bölenlerini bulmakla eşdeğer midir?
xnor

1
@xnor Emin değilim. Eğer *.*.*= x+x^2+x^4, o zaman 1+x+x^2= ***bir bölen olurdu, değil mi? x+x^2+x^4 = (1-x+x^2)(1+x+x^2)
mbomb007

1
@JonathanAllan Örnekleriniz için, veya ile *aynı altkümeyi temsil eden bir faktör olarak listelenmiştir . *.*..
Martin Ender

1
@JonathanAllan Geçerli setlerin tüm ASCII temsillerini değil tüm setlerin çıktısını alır.
Martin Ender

Yanıtlar:


3

Mathematica, 71 68 bayt

#&@@@Cases[(s=Subsets)@s@#,x_/;Sort[Join@@x]==#&&Equal@@(#&@@@x-x)]&

Olarak giriş {1,3,5,7}(sıralanmış) ve çıkış olarak {{1, 3, 5, 7}, {1, 3}, {1, 5}, {1}}. Fonksiyon bir grup mesaj atar.

Bu O (2 2 Hayır ) ( N giriş uzunluğu ve p = = e = 1 O ...). Tüm alt kümelerin alt kümelerini oluşturur, daha sonra bir araya getirildiğinde girdi gönderme işlemiyle sonuçlananları seçer (yalnızca bölümleri dikkate almamız sağlanır) ve her alt kümenin en küçük değerini çıkarırsak tüm öğelerin aynı olduğu yerler).


2

Jöle , 12 bayt

;÷@DỊȦ
ÆDçÐf

Giriş ve çıkış kullanımı 1ve 0yerine *ve ..

Çevrimiçi deneyin!

Nasıl çalışır

ÆDçÐf   Main link. Argument: n (integer with decimal digits 1 and 0)

ÆD      Compute all divisors of n.
  çÐf   Filter; call the helper link with left argument d and right argument n for
        all divisors d of n. Return the array of d's for which the helper link
        returns a truthy value.


;÷@DỊȦ  Helper link. Left argument: d. Right argument: n

 ÷@     Divide n by d.
;       Concatenate, yielding [d, n÷d].
   D    Decimal; convert both integers in the pair to base 10.
    Ị   Insignificant; map 1 and 0 to 1, all other positive integers to 0.
     Ȧ  All; return 1 iff the result contains no zeroes.
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.