Trình tự của Szekeres


9

Định nghĩa

  • a(1) = 1
  • a(2) = 2
  • a(n)là số nhỏ nhất k>a(n-1)tránh được mọi tiến trình số học 3 kỳ a(1), a(2), ..., a(n-1), k.
  • Nói cách khác, a(n)là số nhỏ nhất k>a(n-1)sao cho không tồn tại x, yở đâu 0<x<y<na(y)-a(x) = k-a(y).

Ví dụ làm việc

Dành cho n=5:

Chúng ta có a(1), a(2), a(3), a(4) = 1, 2, 4, 5

Nếu a(5)=6, sau đó 2, 4, 6hình thành một sự tiến bộ số học.

Nếu a(5)=7, sau đó 1, 4, 7hình thành một sự tiến bộ số học.

Nếu a(5)=8, sau đó 2, 5, 8hình thành một sự tiến bộ số học.

Nếu a(5)=9, sau đó 1, 5, 9hình thành một sự tiến bộ số học.

Nếu a(5)=10, không có tiến trình số học có thể được tìm thấy.

Do đó a(5)=10.

Bài tập

Cho n, đầu ra a(n).

Thông số kỹ thuật

  • n sẽ là một số nguyên dương.
  • Bạn có thể sử dụng 0-index thay vì 1-index, trong trường hợp này ncó thể 0. Vui lòng nêu nó trong câu trả lời của bạn nếu bạn đang sử dụng 0-index.

Chấm điểm

Vì chúng tôi đang cố gắng tránh tiến trình số học 3 kỳ và 3 là một số nhỏ, mã của bạn phải càng nhỏ (tức là ngắn) càng tốt, về mặt đếm byte.

Tủ thử

Các testcase là 1 chỉ mục. Bạn có thể sử dụng 0-index, nhưng vui lòng chỉ định nó trong câu trả lời của bạn nếu bạn làm như vậy.

1     1
2     2
3     4
4     5
5     10
6     11
7     13
8     14
9     28
10    29
11    31
12    32
13    37
14    38
15    40
16    41
17    82
18    83
19    85
20    86
10000 1679657

Người giới thiệu


2
Liên quan. (Nếu tôi hiểu chính xác thách thức của bạn.)
Martin Ender

@MartinEnder Bạn đã hiểu đúng thách thức của tôi.
Leaky Nun

Câu trả lời:



6

Haskell, 37 36 32 byte

Sử dụng công thức đã cho trong mục nhập OEIS, sử dụng các chỉ số dựa trên 0. Cảm ơn @nimi vì 4 byte!

a 0=1;a m=3*a(div m 2)-2+mod m 2

3

Python 3, 28 byte

lambda n:int(bin(n)[2:],3)+1

Một hàm ẩn danh nhận đầu vào thông qua đối số và trả về kết quả. Đây là chỉ số không.

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

lambda n    Anonymous function with input zero-indexed term index n
bin(n)      Convert n to a binary string..
...[2:]     ...remove `0b` from beginning...
int(...,3)  ...convert from base-3 to decimal...
...+1       ...increment...
:...        and return

Hãy thử nó trên Ideone



2

Hồng ngọc 28 24 byte

Sử dụng phương pháp tương tự như Dennis, với các chỉ mục dựa trên 0:

->n{n.to_s(2).to_i(3)+1}

Chạy các trường hợp thử nghiệm trên repl.it: https://repl.it/Cif8/1



0

Java 8, 52 46 byte

0 được lập chỉ mục.

i->Integer.valueOf(Integer.toString(i,2),3)+1;

Bạn không cần returnnhưng bạn cần dấu chấm phẩy sau đó
Leaky Nun

Câu trả lời này nói rằng dấu chấm phẩy không được tính; Tôi có thể thay đổi một trong hai cách, nhưng đếm dấu chấm phẩy có phải là sự đồng thuận không?
Justin

Eh, đó là những gì họ nói với tôi. Tôi không biết nếu sự đồng thuận là như vậy.
Leaky Nun

Được rồi, không có sự trở lại cộng với dấu chấm phẩy ngắn hơn trước dù sao đi nữa :)
Justin
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.