Thước đo góc thưa


12

Cho một số nguyên dương n, thiết kế một thước đo góc với số điểm ít nhất cho phép bạn đo tất cả các góc là bội số tích phân của 2π/nnhau (mỗi góc trong một phép đo).

Chi tiết

Là một đầu ra, bạn có thể xuất ra một danh sách các số nguyên trong phạm vi 0tới n-1(hoặc 1đến n) đại diện cho vị trí của từng nhãn hiệu. Ngoài ra, bạn có thể xuất một chuỗi / danh sách độ dài nvới #vị trí của mỗi dấu và một _dấu gạch dưới (không có dấu gạch dưới). (Hoặc hai ký tự khác nhau nếu thuận tiện hơn.)
Ví dụ: Đối với n = 5bạn cần chính xác 3 điểm để có thể đo tất cả các góc 2π/5, 4π/5, 6π/5, 8π/5, 2πbằng cách đặt (ví dụ) một dấu tại 0, một dấu tại 2π/5và một dấu tại 6π/5. Chúng ta có thể mã hóa nó dưới dạng một danh sách [0,1,3]hoặc dưới dạng một chuỗi ##_#_.

Ví dụ

Lưu ý rằng các đầu ra không nhất thiết phải là duy nhất.

n:  output:
 1  [0]
 2  [0,1]
 3  [0,1]
 4  [0,1,2]
 5  [0,1,2]
 6  [0,1,3]
 7  [0,1,3]
 8  [0,1,2,4]
 9  [0,1,3,4]
10  [0,1,3,6]
11  [0,1,3,8]
20  [0,1,2,3,6,10]

PS: Điều này tương tự như bài toán thước kẻ thưa thớt , nhưng thay vì thang đo tuyến tính (có hai đầu), chúng tôi xem xét thang đo hình tròn (góc).

PPS: Kịch bản này sẽ tính toán một ví dụ về một tập hợp các dấu cho mỗi n. Hãy thử trực tuyến!

PPPS: Như @ngn đã chỉ ra, vấn đề này tương đương với việc tìm ra một cơ sở khác biệt tối thiểu của một nhóm trật tự theo chu kỳ n. Các đơn đặt hàng tối thiểu được liệt kê trong http://oeis.org/A283297 và một số giới hạn lý thuyết được tìm thấy trong https://arxiv.org/pdf/1702.02631.pdf



Lừa đảo biên giới , với sự chồng chéo chính xác khi n = q^2 + q + 1cho quyền lực chính q.
Peter Taylor

@PeterTaylor Tôi không thấy lý do tại sao bạn nghĩ rằng đó là một bản dupe. Và bạn có thể giải thích theo cách nào có một "chồng chéo"? Mặc dù có những điểm tương đồng, nhưng đây là hai vấn đề rất khác nhau. Hơn nữa, đây là môn đánh gôn và thử thách mà bạn liên kết thậm chí không bao gồm quy mô của chương trình trong việc tính điểm.
flawr

Chúng không phải là hai vấn đề rất khác nhau. Đọc liên kết OEIS trong PPPS của bạn: "tập hợp khác biệt của Ca sĩ" được đề cập ở đó chính xác là thước đo Golomb được tạo bởi phương pháp trường chiếu được thực hiện trong câu trả lời của tôi. Tôi cho rằng phương pháp tính điểm là khác nhau.
Peter Taylor

Câu trả lời:


4

Thạch , 13 byte

ŒPðṗ2I%QLðÐṀḢ

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

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

ŒPðṗ2I%QLðÐṀḢ  Main link. Argument: n (integer)

ŒP             Powerset; generate all subsequences of [1, ..., n].
  ð       ÐṀ   Begin a dyadic chain. Call it with all subsequences S as left
               argument and n as right one. Return the array of all sequences for
               which the chain returns the maximal result, i.e., [0, ..., n-1].
   ṗ2              Cartesian power 2; generate all pairs of elements of S.
     I             Increments; map each pair [x, y] to [y-x].
      %            Map each [y-x] to [(y-x)%n].
       Q           Unique; deduplicate the array of modular difference singletons.
        L          Take the length.
         ð     Begin a new, dyadic chain.
               Left argument: S' (filted subsequences). Right argument: n
            Ḣ  Take the first element of S'.
               Since S was sorted by length, so is S', so the first element of S'
               is the shortest subsequence that satisfies the condition.

4

TOÁN , 20 byte

:qGZ^!"G:q@&-G\m?@u.

Điều này hết bộ nhớ trên TIO cho các đầu vào bên ngoài 8.

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

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

Điều này tạo ra sức mạnh của Cartesian [0 1 ... n-1]với số mũ nvà sử dụng một vòng lặp để kiểm tra từng bộ dữ liệu của Cartesian. Bài thi bao gồm trong tính toán toàn bộ chênh lệch cặp của nguyên tố nếu tuple, và nhìn thấy nếu những khác biệt modulo nbao gồm tất cả các số 0, 1, ...,n-1 .

Ngay sau khi một tuple Cartesian đáp ứng điều kiện được tìm thấy, vòng lặp đã thoát và duy nhất mục trong tuple đó được in dưới dạng giải pháp.

Điều này hoạt động vì được cung cấp u > v , một bộ tuple đủ với các mục duy nhất u được đảm bảo được kiểm tra sớm hơn bất kỳ bộ dữ liệu nào với v mục duy nhất. Một "bộ đủ" có nghĩa là nếu không có bộ dữ liệu nào trong bộ đó là một giải pháp thì không có bộ dữ liệu nào khác có cùng số lượng mục duy nhất là một giải pháp.

Ví dụ: đối với n = 3các bộ dữ liệu của Cartesian như dưới đây, trong đó mỗi hàng là một bộ dữ liệu:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
 ···
2 2 1
2 2 2
  • Bộ dữ liệu đầu tiên 0 0 0, là bộ dữ liệu duy nhất có liên quan với 1giá trị duy nhất. Ngay cả khi 1 1 12 2 2sẽ xuất hiện nhiều sau đó, 0 0 0là một giải pháp nếu và chỉ khi đó là. Vì vậy, tập đơn được hình thành bởi tuple 0 0 0là một tập hợp đủ cho u = 1.
  • Các bộ thứ hai và thứ ba, cụ thể 0 0 10 0 2, tạo thành một bộ đủ cho u = 2; nghĩa là, chúng bao gồm tất cả các trường hợp với 2các giá trị duy nhất. Bộ thứ tư 0 1 0, sẽ không bao giờ được chọn làm giải pháp, bởi vì 0 0 1sẽ được thử nghiệm đầu tiên. Tương tự, bộ dữ liệu 0 2 0sẽ không bao giờ được chọn vì nó xuất hiện muộn hơn 0 0 2. Các bộ dữ liệu như 2 2 1sẽ không bao giờ được chọn làm giải pháp vì giá trị 0 0 1tương đương (modulo nvà tối đa các giá trị trùng lặp) và xuất hiện đầu tiên.
  • Vân vân.

Mã nhận xét:

:q         % Push [0 1 ... n-1], where n is the input (implicit)
GZ^        % Cartesian power with exponent n. Gives an (n^n) × n matrix
           % where each row is a Cartesian tuple
!          % Transpose. Now each Cartesian tuple is a column
!"         % For each column (that is, each Cartesian tuple)
  G:q      %   Push [0 1 ... n-1] (*)
  @        %   Push current column
  &-       %   Matrix of pairwise differences (**)
  G\       %   Modulo n, element-wise
  m        %   Ismember function: for each entry in (*), gives true iff
           %   it is present in (**)
  ?        %   If all entries are true
    @      %     Push current column
    u      %     Unique entries. This is the solution
    .      %     Break loop
           %   End (implicit)
           % End (implicit)
           % Display (implicit)

3

Stax , 26 21 byte

Åæ4&╕u◙╩►s∙Φ▬═(0~ d+Q

Chạy và gỡ lỗi trực tuyến!

Ngay bây giờ phiên bản trực tuyến không thành công cho đầu vào 20nhưng lỗi này đã được sửa và vẫn chưa được triển khai cho trình thông dịch trực tuyến Triển khai. Coi chừng phải mất một thời gian để chạy 20vụ án.

Giải trình

Hóa ra là do cách tính khác biệt theo cặp, tôi không cần phải lo lắng về sự tương đương kx-kở đây. Tiết kiệm 5 byte.

Sử dụng phiên bản giải nén để giải thích.

rS{%o~{;i@c:2{E-x%mu%x<wm
r                            [0..`x`], where `x` is input
 S                           Powerset
  {%o~                       Sort by length
      {;i@             w     For each element in the powerset
          c:2                All pairs
             {    m          Map each pair `[p,q] to
              E-                 `q-p`
                x%               `(q-p)%x`
                   u%        Count of unique modulo differences
                     x<      Loop until the count of unique modulo differences is larger than the input(`n`)
                             Now we have found a valid set in the powerset
                        m    Output the members of the set,one element per line.

Bằng cách thực thi yêu cầu 01cả hai đều là thành viên của câu trả lời, chúng ta có thể tạo quyền hạn [2..x]thay vì [0..x]sau đó thêm 01thủ công vào mọi thành phần trong tập quyền. Nó hiệu quả hơn nhưng cần xử lý đầu vào 1đặc biệt và tốn nhiều byte hơn.



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.