ครอบคลุมชุดที่มีทวีคูณ


14

จะช่วยให้ชุดของจำนวนเต็มที่มากกว่า 1 และเรียกว่าX เราจะกำหนดS (i)จะเป็นชุดของสมาชิกทั้งหมดของXหารด้วยฉันที่ฉัน> 1 ต้องการเลือกจากชุดย่อยเหล่านี้กลุ่มของชุดดังกล่าวที่

  • สหภาพของพวกเขาคือเซตX

  • ไม่มีองค์ประกอบของXอยู่ในสองชุด

ตัวอย่างเช่นเราสามารถจัดกลุ่มใหม่{3..11}เป็น

      {3,4,5,6,7,8,9,10,11}
S(3): {3,    6,    9,     }
S(4): {  4,      8,       }
S(5): {    5,        10,  }
S(7): {        7,         }
S(11):{                 11}

บางชุดไม่สามารถแสดงออกได้ด้วยวิธีนี้ ตัวอย่างเช่นถ้าเราใช้เวลา{3..12}, 12มีหลายทั้ง 3 และ 4 การป้องกันไม่ให้ชุดของเราจากการเป็นพิเศษร่วมกัน

บางชุดสามารถแสดงได้หลายวิธีเช่น{4..8}สามารถแสดงเป็น

      {4,5,6,7,8}
S(4): {4,      8}
S(5): {  5,     }
S(6): {    6,   }
S(7): {      7, }

แต่มันยังสามารถแสดงเป็น

      {4,5,6,7,8}
S(2): {4,  6,  8}
S(5): {  5,     }
S(7): {      7, }

งาน

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

นี่เป็นคำถามเกี่ยวกับดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยไบต์น้อยจะดีขึ้น

การทดสอบ

{3..11}       -> 5
{4..8}        -> 3
{22,24,26,30} -> 1
{5}           -> 1

หากไม่มีคุณควรส่งออกค่าอื่นที่ไม่ใช่จำนวนเต็มบวก (ตัวอย่างเช่น 0) โปรแกรมของเราไม่สามารถส่งผลให้มีพฤติกรรมที่ไม่ได้กำหนดแทนได้หรือไม่
Mr. Xcoder

นอกจากนี้คุณสามารถเพิ่มกรณีทดสอบได้[5..5]ไหม เราสามารถรับสิ่งต่าง ๆ ได้[8..4]ไหม?
Mr. Xcoder

@ Mr.Xcoder ไม่มันอาจจะไม่ โปรแกรมควรสามารถระบุกรณีที่เป็นไปไม่ได้ไม่เพียง แต่วนซ้ำไปตลอดกาลหรือล้มเหลว
โพสต์ร็อค Garf Hunter

1
" 12มีหลายอย่างทั้งสองอย่าง3และ4ป้องกันไม่ให้ฉากของเราไม่เกิดร่วมกัน ": ทำไม ฉันไม่เห็นสิ่งใดในคำชี้แจงปัญหาที่ต้องใช้12ทั้งสองชุดย่อย
ปีเตอร์เทย์เลอร์

1
นอกจากนี้ในกรณีทดสอบคืออะไร มีคูณทั้งหมดของ[22,24,26,30] 2คุณแน่ใจหรือว่าจะไม่ดีกว่าที่จะลบและ sandbox มัน?
Peter Taylor

คำตอบ:


6

Python 2 , 167 ไบต์

lambda a:([q for q in range(a[-1])if a in[sorted(sum(j,[]))for j in combinations([[p for p in a if p%i<1]for i in range(2,1+a[-1])],q)]]+[0])[0]
from itertools import*

ลองออนไลน์!

-9 ไบต์ขอบคุณที่ Zachary
-4 ไบต์ขอบคุณที่นาย Xcoder
-2 ไบต์โดยใช้รายชื่อแทนชุด
-5 ไบต์โดยใช้มากกว่าa in [...] -2 ไบต์ขอบคุณ Mr. Xcoder -8 ไบต์โดยการรวมคำสั่ง -5 ไบต์ขอบคุณ Mr. Xcoder -7 ไบต์ขอบคุณ Mr. Xcoder / Zacharý +7 ไบต์เพื่อแก้ไขข้อผิดพลาด -1 ไบต์ขอบคุณ ovs any([a == ...])





บันทึก

สิ่งนี้ช้ามากสำหรับจำนวนสูงสุดที่มากขึ้นเพราะไม่ได้รับการปรับให้เหมาะสม มันไม่ได้ภายใน 2 นาทีบนอุปกรณ์นาย Xcoder [22, 24, 26, 30]สำหรับ


5

Clingo , 51 ไบต์

{s(2..X)}:-x(X).:-x(X),{s(I):X\I=0}!=1.:~s(I).[1,I]

การสาธิต

$ echo 'x(3..11).' | clingo cover.lp -
clingo version 5.1.0
Reading from cover.lp ...
Solving...
Answer: 1
x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10) x(11) s(3) s(4) s(5) s(7) s(11)
Optimization: 5
OPTIMUM FOUND

Models       : 1
  Optimum    : yes
Optimization : 5
Calls        : 1
Time         : 0.003s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.010s
$ echo 'x(4..8).' | clingo cover.lp -
clingo version 5.1.0
Reading from cover.lp ...
Solving...
Answer: 1
x(4) x(5) x(6) x(7) x(8) s(3) s(4) s(5) s(7)
Optimization: 4
Answer: 2
x(4) x(5) x(6) x(7) x(8) s(2) s(5) s(7)
Optimization: 3
OPTIMUM FOUND

Models       : 2
  Optimum    : yes
Optimization : 3
Calls        : 1
Time         : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.000s
$ echo 'x(22;24;26;30).' | clingo cover.lp -
clingo version 5.1.0
Reading from cover.lp ...
Solving...
Answer: 1
x(22) x(24) x(26) x(30) s(5) s(8) s(22) s(26)
Optimization: 4
Answer: 2
x(22) x(24) x(26) x(30) s(3) s(22) s(26)
Optimization: 3
Answer: 3
x(22) x(24) x(26) x(30) s(2)
Optimization: 1
OPTIMUM FOUND

Models       : 3
  Optimum    : yes
Optimization : 1
Calls        : 1
Time         : 0.004s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.000s
$ echo 'x(5).' | clingo cover.lp -
clingo version 5.1.0
Reading from cover.lp ...
Solving...
Answer: 1
x(5) s(5)
Optimization: 1
OPTIMUM FOUND

Models       : 1
  Optimum    : yes
Optimization : 1
Calls        : 1
Time         : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.000s

ดูเหมือนว่าจะไม่พบเคสที่ไม่มีวิธีแก้ไขเช่นx(3..12).(หรือฉันจำเป็นต้องอัปเดต?) BTW คุณสามารถแนะนำการแนะนำที่ดีให้กับ clingo ได้หรือไม่?
Christian Sievers

1
@ChristianSievers โอ๊ะโอนั่นเป็นข้อผิดพลาดซึ่งตอนนี้ฉันได้รับการแก้ไขแล้ว มันควรจะออกUNSATISFIABLEในกรณีเช่นนี้ ผมใช้ส่วนใหญ่คู่มือ Potassco
Anders Kaseorg

4

Mathematica, 105 ไบต์

Length@Select[Subsets@Table[Select[s,Mod[#,i]==0&],{i,2,Max[s=#]}],Sort@Flatten@#==Sort@s&][[1]]~Check~0&


ลองออนไลน์
คัดลอกและวางรหัสด้วย ctrl + v
วางข้อมูลที่ท้ายรหัส
กด Shift + enter เพื่อเรียกใช้

อินพุต

[{3,4,5,6,7,8,9,10,11}]

รับรายการเป็นอินพุต
เอาต์พุต 0 หากไม่มี


ใช้งานได้ดีCheck
Keyu Gan

ทำไมคุณไม่ยกเลิกการลบคำตอบแรกเมื่อคุณมีรุ่นใช้งานอยู่
Neil

เพราะนี่เป็นวิธีการใหม่โดยสิ้นเชิง? มีปัญหาอะไรหรือไม่?
J42161217

4

Haskell, 136 ไบต์

import Data.List
f l|m<-maximum l=(sort[n|(n,c)<-[(length s,[i|j<-s,i<-[j,2*j..m],elem i l])|s<-subsequences[2..m]],c\\l==l\\c]++[0])!!0

ลองออนไลน์!

มันทำงานอย่างไร

f l     =                           -- input set is l
   |m<-maximum l                    -- bind m to maximum of l
       [   |s<-subsequences[2..m]]  -- for all subsequences s of [2..m]
        (length s, )                -- make a pair where the first element is the length of s
            [i|j<-s,i<-[j,2*j..m],elem i l]
                                    -- and the second element all multiples of the numbers of s that are also in l
     [n|(n,c)<-       ,c\\l==l\\c]  -- for all such pairs (n,c), keep the n when c has the same elements as l, i.e. each element exactly once
   sort[ ]++[0]                     -- sort those n and append a 0 (if there's no match, the list of n is empty)
 (     )!!0                         -- pick the first element

{22,24,26,30}ใช้เวลามากเวลาสำหรับ


3

เยลลี่, 38 35 34 33 31 28 25 24 23 20 19 ไบต์

ṀḊŒPð%þ@⁹¬Sḟ1ðÐḟL€Ḣ

-5 ไบต์ขอบคุณ Leaky Nun

ลองออนไลน์!

ฉันคิดว่ากรณีทดสอบที่สามใช้งานได้ แต่มันช้ามาก 0ถูกแสดงผลเมื่อไม่มีวิธีแก้ไข

คำอธิบาย (อาจทำให้คำอธิบายนี้ผิด):

ṀḊŒPð%þ@⁹¬Sḟ1ðÐḟL€Ḣ     (input z)
ṀḊ                      - 2 .. max(z)
  ŒP                    - powerset
    ð                   - new dyadic chain
     %þ@⁹               - modulo table of z and that
         ¬              - logical not
          S             - sum
           ḟ1           - filter out 1's
             ðÐḟ        - filter out elements that satisfy that condition
                L€      - length of each element
                  Ḣ     - first element


ขอบคุณ! และขอขอบคุณที่ไม่ส่งตัวคุณเอง!
Zacharý

ฉันมีวิธีการแก้ปัญหา 18 ไบต์ที่แตกต่างกันใกล้เคียงกับต้นฉบับของฉันฉันชอบแบบนี้ดีกว่า:ṀḊŒPðḍ@þ@⁹Sḟ1ðÐḟḢL
Zacharý

ว้าว ... ṀḊจริง ๆ แล้วเป็นเคล็ดลับที่เจ๋งจริงๆ!
Zacharý

อ๊ะนั่นใช้งานไม่ได้และไม่ได้เขียนใหม่เลย! ค่านี้ควรส่งออก 0 ไม่ใช่ 1
Zacharý

2

Julia, 91 ไบต์

x->(t=[];for i in x z=findfirst(x->x==0,i%(2:maximum(x)));zt?1:push!(t,z) end;length(t))

อืม ... คุณลืมใส่ลิงค์ในชื่อภาษาหรือชื่อจริง ๆ แล้วคือ "[Julia]"?
Zacharý

คุณถูกต้องชื่อคือ Julia ที่ไม่มีวงเล็บ
Tanj

คุณอาจต้องการแก้ไขในคำตอบอื่น ๆ ของคุณเช่นกัน!
Zacharý

ว้าวนั่นเป็นคำตอบมากมาย! และถ้าคุณต้องการที่จะใส่ลิงค์ซินแท็คซ์คือ[Text to display](link to website)
Zacharý
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.