Thước kẻ thưa thớt tối thiểu


20

Một thước đo tiêu chuẩn có độ dài n có các khoảng cách ở các vị trí 0, 1, ..., n (tính theo đơn vị nào). Một người cai trị thưa thớt có một tập hợp con của những dấu hiệu đó. Một thước đo có thể đo khoảng cách k nếu nó có dấu ở vị trí pq với p - q = k .

Các thách thức

Cho một số nguyên dương n , xuất ra số lượng dấu tối thiểu cần thiết trong một thước đo thưa thớt có độ dài n để nó có thể đo được tất cả các khoảng cách 1, 2, ..., n .

Đây là OEIS A046693 .

Ví dụ, đối với đầu vào 6, đầu ra là 4. Cụ thể, một thước đo có các dấu tại 0, 1, 4, 6 hoạt động, như 1−0 = 1, 6−4 = 2, 4−1 = 3, 4−0 = 4, 6−1 = 5 và 6−0 = 6.

Quy tắc bổ sung

Các trường hợp thử nghiệm

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

Câu trả lời:


2

Thạch , 14 byte

ŒcIQL
‘ŒPÇÐṀḢL

Một liên kết đơn lấy và trả về số nguyên không âm.

Hãy thử trực tuyến! (15 giá trị đầu tiên ở đây - không hiệu quả)

Làm sao?

Tìm tất cả những người cai trị có thể thực hiện bằng cách sử dụng các dấu từ 1 đến n + 1 (bộ sức mạnh của [1, n + 1]) được sắp xếp theo số đếm của họ và chỉ giữ những người tạo khoảng cách tối đa có thể đo được (độ dài của tập hợp các khác biệt giữa tất cả các cặp dấu theo thứ tự), sau đó trả về độ dài của dấu đầu tiên (tức là [một trong] ngắn nhất [s]).

Œ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

Bình thường , 14 byte

lh.Ml{-M^Z2ySh

Hãy thử nó ở đây!

Pyth , 21 19 byte

hlMf!-SQmaFd.cT2ySh

Hãy thử nó ở đây!

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

Tôi sẽ cập nhật điều này sau khi chơi golf.

hSlMfqSQS {maFd.cT2ySh ~ Chương trình đầy đủ. Q = đầu vào.

                   Sh ~ Phạm vi số nguyên [1, Q + 1].
                  y ~ Quyền hạn.
    Bộ lọc f ~ (sử dụng biến T).
              .cT2 ~ Tất cả các kết hợp hai yếu tố của T.
          m ~ Bản đồ.
           aFd ~ Giảm bởi sự khác biệt tuyệt đối.
        S {~ Không trùng lặp, sắp xếp.
     qSQ ~ Có bằng phạm vi số nguyên [1, Q] không?
  lM ~ Bản đồ với chiều dài.
hS ~ Tối thiểu.

Cảm ơn isaacg vì đã tiết kiệm một byte cho cách tiếp cận thứ hai của tôi và truyền cảm hứng cho tôi chơi golf 3 byte khỏi cách tiếp cận hiện tại của tôi!


Vì powerset được sắp xếp theo chiều dài, nên thứ nhất Slà không cần thiết.
isaacg

@isaacg Cảm ơn! Câu trả lời tuyệt vời của bạn (+1) cũng truyền cảm hứng cho tôi để tiết kiệm 3 byte khỏi cách tiếp cận mới của tôi, biến nó thành 14 byte.
Ông Xcoder


4

Husk , 20 18 byte

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

Cảm ơn @ H.PWiz cho -2 byte!

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

Giải trình

λ               )…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-giống như
H.PWiz

@ H.PWiz thực sự chỉ có vấn đề là độ dài của chúng là như nhau, vì không thể có bất kỳ sự khác biệt nào ngoài phạm vi [0..N].
Martin Ender

Bạn thậm chí có thể sử dụng .
Martin Ender


3

Bình thường, 15 byte

lhf!-SQ-M^T2yUh

Bộ kiểm tra

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

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


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.