Đây có phải là một chuỗi hình học arithmetico?


11

Một chuỗi hình học arithmetico là sản phẩm nguyên tố của một chuỗi số học và một chuỗi hình học. Ví dụ, 1 -4 12 -32là sản phẩm của chuỗi số học 1 2 3 4và chuỗi hình học 1 -2 4 -8. Thuật ngữ thứ n của một chuỗi hình học số nguyên có thể được biểu diễn dưới dạng

an=rn(a0+nd)

đối với một số thực , khác không thực và số nguyên . Lưu ý rằng và không nhất thiết là số nguyên.dra0rd

Ví dụ: chuỗi 2 11 36 100 256 624 1472 3392có , và .a0=2r=2d=3.5

Đầu vào

Một danh sách được sắp xếp của số nguyên làm đầu vào ở bất kỳ định dạng hợp lý nào. Vì một số định nghĩa của chuỗi hình học cho phép và xác định , nên liệu đầu vào có phải là chuỗi hình học arithmetico hay không sẽ không phụ thuộc vào việc có được phép là 0. Ví dụ, sẽ không xảy ra như đầu vào.n2r=000=1r123 0 0 0 0

Đầu ra

Cho dù đó là một chuỗi hình học arithmetico. Xuất ra một giá trị trung thực / giả, hoặc hai giá trị nhất quán khác nhau.

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

Thật:

1 -4 12 -32
0 0 0
-192 0 432 -1296 2916 -5832 10935 -19683
2 11 36 100 256 624 1472 3392
-4374 729 972 567 270 117 48 19
24601 1337 42
0 -2718
-1 -1 0 4 16
2 4 8 16 32 64
2 3 4 5 6 7
0 2 8 24

Sai:

4 8 15 16 23 42
3 1 4 1
24601 42 1337
0 0 0 1
0 0 1 0 0
1 -1 0 4 16

1
FYI bạn có thể sử dụng chế độ toán học nội tuyến với \$để viết những thứ như . a0
FryAmTheEggman

Là đầu vào hai kỳ thực sự có thể? Không có bất kỳ trường hợp thử nghiệm nào.
xnor

@xnor Một cách tầm thường, bạn có thể đặt hoặc để các chuỗi không phải là duy nhất trong trường hợp đó, nhưng đầu ra phải luôn trung thựcd = 0r=1d=0
Giuseppe

1
Đề xuất testcase 0 2 8 24, 0 0 1, 0 0 0 1
tsh

1
1 -1 0 4 16sẽ là một trường hợp Sai hữu ích, vì nó chia sẻ bốn yếu tố liên tiếp với mỗi trường hợp Đúng 1 -1 0 4 -16-1 -1 0 4 16.
Anders Kaseorg

Câu trả lời:


2

Perl 6 , 184 128 135 byte

{3>$_||->\x,\y,\z{?grep ->\r{min (x,{r&&r*$_+(y/r -x)*($×=r)}...*)Z==$_},x??map (y+*×sqrt(y²-x*z).narrow)/x,1,-1!!y&&z/y/2}(|.[^3])}

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

Tính và từ ba phần tử đầu tiên và kiểm tra xem chuỗi kết quả có khớp với đầu vào không. Thật không may, Rakudo ném một ngoại lệ khi chia cho 0, ngay cả khi sử dụng các số dấu phẩy động, có giá ~ 9 byte.rd

Liệt kê chuỗi bằng .an=ran1+rnd

Một số cải tiến được lấy cảm hứng từ câu trả lời JavaScript của Arnauld.

Giải trình

3>$_||  # Return true if there are less than three elements

->\x,\y,\z{ ... }(|.[^3])}  # Bind x,y,z to first three elements

# Candidates for r
x  # If x != 0
??map (y+*×sqrt(y²-x*z).narrow)/x,1,-1  # then solutions of quadratic equation
!!y&&z/y/2  # else solution of linear equation or 0 if y==0

?grep ->\r{ ... },  # Is there an r for which the following is true?

    ( ,                         ...*)  # Create infinite sequence
     x  # Start with x
       {                       }  # Compute next term
        r&&  # 0 if r==0
                (y/r -x)  # d
           r*$_  # r*a(n-1)
                          ($×=r)  # r^n
                +        *  # r*a(n-1)+d*r^n
                                     Z==$_  # Compare with each element of input
min  # All elements are equal?

2

JavaScript (ES7), 135 127 byte

a=>!([x,y,z]=a,1/z)|!a.some(n=>n)|[y/x+(d=(y*y-x*z)**.5/x),y/x-d,z/y/2].some(r=>a.every((v,n)=>(v-(x+n*y/r-n*x)*r**n)**2<1e-9))

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

Làm sao?

Chúng tôi sử dụng hai xét nghiệm sơ bộ để loại bỏ một số trường hợp đặc biệt. Trong trường hợp chính, chúng tôi thử ba giá trị có thể khác nhau của (và các giá trị tương ứng của , có thể dễ dàng suy ra) và kiểm tra xem tất cả các thuật ngữ của chuỗi đầu vào có khớp với các giá trị đã đoán hay không. Do các lỗi làm tròn tiềm năng, chúng tôi thực sự kiểm tra xem tất cả các khác biệt bình phương có .rd<109

Trường hợp đặc biệt # 1: ít hơn 3 điều khoản

Nếu có ít hơn 3 thuật ngữ, bạn luôn có thể tìm thấy một chuỗi phù hợp. Vì vậy, chúng tôi buộc một giá trị trung thực.

Trường hợp đặc biệt # 2: chỉ số không

Nếu tất cả các điều khoản đều bằng , chúng ta có thể sử dụng , và bất kỳ . Vì vậy, chúng tôi buộc một giá trị trung thực.0a0=0d=0r0

Trường hợp chính vớia0=0

Nếu , chuỗi có thể được đơn giản hóa thành:a0=0

an=rn×n×d

Cung cấp cho:

a1=r×da2=2r2×d

Chúng tôi biết rằng không bằng (nếu không, chúng tôi sẽ ở trong trường hợp đặc biệt # 2). Vì vậy, chúng tôi có và:d0a10

r=a22a1

Trường hợp chính vớia00

Chúng tôi có mối quan hệ sau đây giữa và :an+1an

an+1=r.an+rn+1d

Đối với , chúng tôi có:an+2

an+2=r.an+1+rn+2d=r(r.an+rn+1d)+rn+2d=r2an+2r.rn+1d=r2an+2r(an+1r.an)=r2an+2r.an+1

Chúng tôi đáng chú ý có:

a2=r2a0+2r.a1

Dẫn đến bậc hai sau:

r2a02r.a1+a2=0

Rễ là của ai:

r0=a1+a12a0a2a0r1=a1a12a0a2a0


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.