Bạn có thể đã nghe nói về các số Fibonacci. Bạn có biết, chuỗi số nguyên đó bắt đầu bằng 1, 1
, và sau đó mỗi số mới là tổng của hai số cuối không?
1 1 2 3 5 8 13...
Và như vậy. Những thách thức về số lượng Fibonacci khá phổ biến 'ở đây . Nhưng ai nói rằng các số Fibonacci phải bắt đầu bằng 1, 1
? Tại sao họ không thể bắt đầu với 0, 1
? Được rồi, hãy xác định lại chúng để bắt đầu từ 0:
0 1 1 2 3 5 8 13...
Nhưng ... chúng ta cũng không phải dừng lại ở đó! Nếu chúng ta có thể thêm hai số cuối để lấy số tiếp theo, chúng ta cũng có thể trừ số thứ nhất khỏi số thứ hai để thêm số mới. Vì vậy, nó có thể bắt đầu với 1, 0
:
1 0 1 1 2 3 5 8 13...
Chúng tôi thậm chí có thể kết thúc với tiêu cực:
-1 1 0 1 1 2 3 5 8 13...
Và loạt bài này cũng diễn ra mãi mãi. Tôi nghĩ thật thú vị khi nó kết thúc bằng cách phản chiếu các số Fibonacci thông thường, chỉ với mỗi số khác bị âm:
13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...
Chúng ta hãy gọi chuỗi này là "Số Fibonacci mở rộng", hoặc EFN . Vì thực sự không có số âm rõ ràng để bắt đầu chuỗi này, nên chúng tôi sẽ nói rằng 0 xuất hiện ở 0 , các số Fibonacci thông thường mở rộng đến các chỉ số dương và các số Fibonacci âm (nửa âm?) Mở rộng trong các chỉ số tiêu cực, như vậy:
Indices: ...-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ...
Values: ...13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...
Điều này dẫn đến thách thức ngày nay:
Cho một số nguyên N , trả về mọi chỉ số mà N xuất hiện trong chuỗi EFN .
Một số quan sát ngẫu nhiên về nhiệm vụ này:
1 xuất hiện nhiều lần trong EFN hơn bất kỳ số nào khác :
[-1, 1, 2]
. Không có số sẽ xuất hiện ở hơn 3 nơi.Mỗi số Fibonacci> 1 sẽ hiển thị một lần (3, 8, 21, v.v.) hoặc hai lần (2, 5, 13, v.v.)
Làm rõ quy tắc:
- Nếu
abs(N)
không phải là số Fibonacci, nó sẽ không bao giờ xuất hiện trong chuỗi EFN , do đó bạn phải xuất ra không có gì / một bộ sưu tập trống nếu có thể, hoặc nếu điều đó là không thể trong ngôn ngữ của bạn, bạn có thể xuất một số giá trị không phải là số không đổi. - Nếu N xuất hiện ở nhiều nơi trong EFN , đầu ra của bạn không cần phải được sắp xếp. Mặc dù mỗi chỉ số phải xuất hiện chính xác một lần.
- Mặc dù hầu hết các thử thách theo trình tự cho phép bạn chọn xem bạn muốn sử dụng lập chỉ mục dựa trên 1 hay 0, thử thách này phải sử dụng lập chỉ mục được mô tả (trong đó 0 xuất hiện ở 0).
- Bạn có thể đưa I / O qua bất kỳ định dạng tiêu chuẩn nào.
Các trường hợp thử nghiệm
-13: []
-12: []
-11: []
-10: []
-9: []
-8: [-6]
-7: []
-6: []
-5: []
-4: []
-3: [-4]
-2: []
-1: [-2]
0: 0
1: [-1, 1, 2]
2: [-3, 3]
3: [4]
4: []
5: [-5, 5]
6: []
7: []
8: [6]
9: []
10: []
11: []
12: []
13: [-7, 7]
Và một số trường hợp thử nghiệm lớn hơn:
89: [-11, 11]
1836311903: [46]
10000: []
-39088169: [-38]
Như thường lệ, câu trả lời ngắn nhất trong byte chiến thắng!