최소 희소 통치자


20

길이가 n 인 표준 눈금자는 위치 0, 1, ..., n (둘 중 단위)에 거리 표시가 있습니다 . 스파 스 통치자는 그 상표의 하위 집합을 가지고있다. 눈금자 거리 측정 할 수있다 (k)를 그 위치에서 마크의 경우 , PQP - Q = K가 .

도전

양의 정수 n이 주어지면 모든 거리 1, 2, ..., n을 측정 할 수 있도록 길이 n 의 희소 눈금자에 필요한 최소 표시 수를 출력하십시오 .

이다 OEIS A046693 .

예를 들어, 입력 6의 경우 출력은 4입니다. 즉, 0, 1, 4, 6에 표시가있는 눈금자는 1-0 = 1, 6-4 = 2, 4-1 = 3, 4-0과 같이 작동합니다. = 4, 6-1 = 5 및 6-0 = 6.

추가 규칙

테스트 사례

1   ->   2
2   ->   3
3   ->   3
4   ->   4
5   ->   4
6   ->   4
7   ->   5
8   ->   5
9   ->   5
10  ->   6
11  ->   6
12  ->   6
13  ->   6
14  ->   7
15  ->   7
16  ->   7
17  ->   7
18  ->   8
19  ->   8
20  ->   8
21  ->   8
22  ->   8
23  ->   8
24  ->   9
25  ->   9
26  ->   9
27  ->   9
28  ->   9
29  ->   9
30  ->  10
31  ->  10 
32  ->  10

답변:


2

젤리 , 14 바이트

ŒcIQL
‘ŒPÇÐṀḢL

음이 아닌 정수를 가져오고 리턴하는 모나드 링크.

온라인으로 사용해보십시오! (처음 15 값을 여기에 - 효율적이지)

방법?

1부터 n + 1 ([1, n + 1]의 거듭 제곱)을 사용하여 마킹 횟수에 따라 정렬 할 수있는 모든 눈금자를 찾고 최대 측정 가능 거리 (길이의 길이)를 유지하는 눈금자 만 유지합니다. 모든 정렬 된 마크 쌍 사이의 차이의 집합), 첫 번째의 길이 (즉, 가장 짧은 것 중 하나)를 리턴한다.

ŒcIQL - Link 1: number of measurable distances: list of numbers, ruler  e.g. [1,2,3,7]
Œc    - all pairs                                [[1,2],[1,3],[1,7],[2,3],[2,7],[3,7]]
  I   - incremental differences                                          [1,2,6,1,5,4]
   Q  - de-duplicate                                                       [1,2,6,5,4]
    L - length                                                                      5

‘ŒPÇÐṀḢL - Main link: number, n              e.g. 4
‘        - increment                              5
 ŒP      - power-set (implicit range of input)   [[],[1],[2],[3],[4],[5],[1,2],[1,3],[1,4],[1,5],[2,3],[2,4],[2,5],[3,4],[3,5],[4,5],[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5],[2,4,5],[3,4,5],[1,2,3,4],[1,2,3,5],[1,2,4,5],[1,3,4,5],[2,3,4,5],[1,2,3,4,5]]
    ÐṀ   - keep those maximal under:
   Ç     -   call the last link (1) as a monad   [[1,2,3,5],[1,2,4,5],[1,3,4,5],[1,2,3,4,5]]
      Ḣ  - head                                  [1,2,3,5]
       L - length                                 4



5

Pyth , 14 바이트

lh.Ml{-M^Z2ySh

여기 사용해보십시오!

Pyth , 21 19 바이트

hlMf!-SQmaFd.cT2ySh

여기 사용해보십시오!

작동 원리

골프 후 업데이트하겠습니다.

hSlMfqSQS {maFd.cT2ySh ~ 전체 프로그램. Q = 입력

                   Sh ~ 정수 범위 [1, Q + 1].
                  y ~ 전원.
    f ~ 필터 (변수 T 사용).
              .cT2 ~ T의 모든 두 요소 조합
          m ~지도.
           aFd ~ 절대 차이로 줄입니다.
        S {~ 중복, 정렬
     qSQ ~ 정수 범위 [1, Q]와 같습니까?
  lM ~ 길이가있는 맵.
hS ~ 최소

두 번째 접근 방식을 위해 바이트를 저장하고 현재 접근 방식에서 3 바이트를 골프 로 끌어 올리는 영감주신 isaacg 에게 감사드립니다 !


전원 세트는 길이별로 정렬되므로 첫 번째 S는 필요하지 않습니다.
isaacg

@isaacg 감사합니다! 귀하의 훌륭한 답변 (+1)은 새로운 접근법에서 3 바이트를 절약하여 14 바이트로 만들도록 영감을주었습니다.
Mr. Xcoder


4

껍질 , 20 18 바이트

λ▼mLfȯ≡⁰u´×≠tṖ⁰)…0

-2 바이트에 대한 @ H.PWiz에게 감사합니다!

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

설명

λ               )…0  -- lambda with argument ⁰ as [0..N]
              Ṗ⁰     -- all subsets of [0..N]
             t       -- tail (remove empty subset)
    f(      )        -- filter by following function:
           ≠         --   absolute differences
         ´×          --   of all pairs drawn from itself
        u            --   remove duplicates
      ≡⁰             --   "equal" to [0..N]
  mL                 -- map length
 ▼                   -- minimum

oa-과 동일
H.PWiz

@ H.PWiz [0..N] 범위를 벗어난 차이는 없기 때문에 길이가 동일하다는 것만 중요합니다.
Martin Ender

아마 사용할 수도 있습니다 .
Martin Ender


3

Pyth, 15 바이트

lhf!-SQ-M^T2yUh

테스트 스위트

작동 원리

lhf!-SQ-M^T2yUh
             Uh    [0, 1, ... n]
            y      Powerset - all possible rulers
  f                Filer rulers on
         ^T2       All pairs of marks, in both orders
       -M          Differences - (a)
     SQ            [1, ... n], the desired list of differences - (b)
    -              Remove (a) from (b)
   !               Check that there's nothing left.
 h                 The first remaining ruler (powerset is ordered by size)
l                  Length


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.