Che một bộ với bội số


14

Cho phép lấy một tập hợp các số nguyên lớn hơn 1 và gọi nó là X . Chúng ta sẽ định nghĩa S (i) là tập hợp tất cả các thành viên của X chia hết cho i trong đó i> 1 . Muốn chọn từ các tập hợp con này một nhóm các tập hợp sao cho

  • Liên minh của họ là tập X

  • Không có phần tử nào của X nằm trong hai trong số các tập hợp.

Ví dụ: chúng ta có thể tập hợp lại {3..11}thành

      {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}

Một số bộ không thể được thể hiện theo cách này. Ví dụ: nếu chúng ta lấy {3..12}, 12là bội số của cả 3 và 4 ngăn các bộ của chúng ta loại trừ lẫn nhau.

Một số bộ có thể được thể hiện theo nhiều cách, ví dụ {4..8}có thể được biểu diễn dưới dạng

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

nhưng nó cũng có thể được biểu diễn dưới dạng

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

Bài tập

Mục tiêu của chúng tôi là viết một chương trình sẽ lấy một bộ làm đầu vào và đầu ra số lượng tập con nhỏ nhất bao trùm nó theo kiểu này. Nếu không có, bạn nên xuất một số giá trị khác với số nguyên dương (ví dụ 0).

Đây là một câu hỏi vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.

Xét nghiệm

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

Nếu không có, bạn nên xuất một số giá trị khác với số nguyên dương (ví dụ 0). Thay vào đó, chương trình của chúng tôi không thể dẫn đến hành vi không xác định?
Ông Xcoder

Ngoài ra, bạn có thể thêm một trường hợp thử nghiệm như thế [5..5]nào? Chúng ta có thể nhận được những thứ như thế [8..4]nào?
Ông Xcoder

@ Mr.Xcoder Không có thể không. Các chương trình sẽ có thể xác định các trường hợp không thể không chỉ lặp lại mãi mãi hoặc sụp đổ trên chúng.
Đăng Rock Garf Hunter

1
" 12Là bội số của cả hai 34ngăn chặn các bộ của chúng tôi loại trừ lẫn nhau ": tại sao? Tôi không thấy bất cứ điều gì khác trong báo cáo vấn đề đòi hỏi 12phải đi vào cả hai tập hợp con.
Peter Taylor

1
Ngoài ra, những gì với các trường hợp thử nghiệm? [22,24,26,30]là tất cả bội số của 2. Bạn có chắc chắn sẽ tốt hơn nếu xóa cái này và hộp cát không?
Peter Taylor

Câu trả lời:


6

Python 2 , 167 byte

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*

Hãy thử trực tuyến!

-9 byte nhờ Zacharý
-4 byte nhờ ông Xcoder
-2 byte bằng cách sử dụng danh sách thay vì đặt
-5 byte bằng cách sử dụng a in [...]thay vì any([a == ...]).
-2 byte nhờ vào ông Xcoder
-8 byte bằng cách hợp nhất các câu lệnh
-5 byte nhờ vào ông Xcoder
-7 byte nhờ vào ông Xcoder / Zacharý
+7 byte để sửa lỗi
-1 byte nhờ các ovs

Ghi chú

Điều này là cực kỳ chậm đối với số lượng tối đa lớn hơn bởi vì nó không được tối ưu hóa; nó không hoạt động trong vòng 2 phút trên thiết bị của ông Xcoder [22, 24, 26, 30].


5

Clingo , 51 byte

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

Bản giới thiệu

$ 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

Điều này dường như không phát hiện các trường hợp mà không có giải pháp như x(3..12).(hoặc tôi cần cập nhật?). BTW, bạn có thể đề xuất một giới thiệu tốt về clingo?
Christian Sievers

1
@ChristianSievers Rất tiếc, đó là một lỗi mà tôi đã sửa. Nó sẽ xuất ra UNSATISFIABLEtrong trường hợp như vậy. Tôi chủ yếu sử dụng hướng dẫn Potassco .
Anders Kaseorg

4

Toán học, 105 byte

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


Dùng thử trực tuyến
sao chép và dán mã bằng ctrl + v,
dán đầu vào ở cuối mã,
nhấn shift + enter để chạy

đầu vào

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

lấy danh sách làm đầu
ra đầu vào 0 nếu không có


Công dụng tuyệt vời củaCheck
Keyu Gan

Tại sao bạn không hoàn tác câu trả lời đầu tiên của mình sau khi bạn có phiên bản làm việc?
Neil

Bởi vì đây là một cách tiếp cận hoàn toàn mới? Có vấn đề gì không?
J42161217

4

Haskell, 136 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Mất rất nhiều thời gian cho {22,24,26,30}.


3

Thạch, 38 35 34 33 31 28 25 24 23 20 19 byte

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

-5 byte nhờ Leaky Nun

Hãy thử trực tuyến!

Tôi nghĩ rằng trường hợp thử nghiệm thứ ba hoạt động, nhưng nó rất chậm.0được xuất ra khi không có giải pháp.

Giải thích (có thể đã giải thích sai này):

ṀḊŒ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


Cảm ơn! Và cảm ơn bạn đã không gửi bản thân mình!
Zacharý

Tôi đã có một giải pháp 18 byte khác gần với bản gốc của mình hơn, tôi cá nhân thích giải pháp này hơn:ṀḊŒPðḍ@þ@⁹Sḟ1ðÐḟḢL
Zacharý

Woah ... ṀḊthực sự là một mẹo rất hay!
Zacharý

Rất tiếc, điều đó không hoạt động, và tôi cũng không viết lại! Điều này sẽ xuất 0, không phải 1
Zacharý

2

Julia, 91 byte

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

Ừm ... bạn đã quên bao gồm một liên kết trong tên ngôn ngữ, hay nó thực sự có tên là "[Julia]"?
Zacharý

Bạn nói đúng, tên là Julia không có dấu ngoặc
Tanj

Bạn có thể muốn sửa nó trên các câu trả lời khác của bạn!
Zacharý

Wow, đó là rất nhiều câu trả lời! Và nếu bạn muốn chèn một liên kết, cú pháp là[Text to display](link to website)
Zacharý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.