배수로 세트를 커버


14

1보다 큰 정수 세트를 가져 와서 X 라고합니다 . 우리는 정의 할 S (i)를 모든 구성원의 세트로 X에 의해 나누어 내가 I> 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 아닙니다. 프로그램은 영원히 반복되거나 충돌하지 않고 불가능한 사례를 식별 할 수 있어야합니다.
포스트 락 가프 헌터

1
" 12모두의 배수입니다 34상호 배타적 인에서 우리의 세트를 방지 "왜? 문제 설명 12에 두 하위 집합으로 이동 해야하는 다른 내용이 없습니다 .
피터 테일러

1
또한 테스트 사례는 무엇입니까? [22,24,26,30]의 배수입니다 2. 이것을 삭제하고 샌드 박스로 만드는 것이 좋지 않을까요?
피터 테일러

답변:


6

파이썬 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 재커리 덕분에 바이트
씨 Xcoder 덕분에 바이트 -4
-2 목록을 사용하는 대신 세트에 의해 바이트를
사용하여 -5 바이트 a in [...]보다는 any([a == ...]).
Xcoder 덕분에 -2 바이트
문을 병합하여 -8 바이트 Xcoder 덕분에
-5 바이트 Mr. Xcoder
덕분에 -7 바이트 / ovs 덕분에
버그
-1 바이트 수정을위한 Zacharý +7 바이트

노트

최적화되지 않았기 때문에 최대 값이 클수록 속도가 매우 느립니다. Mr. Xcoder의 기기에서 2 분 이내에 [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

수학, 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

하스켈, 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€Ḣ

Leaky Nun 덕분에 -5 바이트

온라인으로 사용해보십시오!

나는 생각하는 세 번째 테스트 케이스의 작품을하지만 매우 느립니다. 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ý

으악, 그것은 작동하지 않으며, 내 재 작성도하지 않습니다! 이것은 1이 아니라 0을 출력해야한다
Zacharý

2

줄리아, 91 바이트

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

음 ... 언어 이름에 링크를 포함시키는 것을 잊었습니까? 아니면 실제로 "[줄리아]"라는 이름을 사용합니까?
Zacharý

자네 말이 맞아, 이름은 괄호없이 줄리아
Tanj

다른 답변에서도 문제를 해결하고 싶을 수도 있습니다!
Zacharý

와우, 그것은 많은 답변이었습니다! 당신이 링크를 삽입 할 경우에, 구문은[Text to display](link to website)
재커리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.