Bình đẳng đến trong Threes


11

Lấy từ: OEIS- A071816

Nhiệm vụ của bạn, được đưa ra giới hạn trên n, là tìm số lượng các giải pháp thỏa mãn phương trình:

a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n

Trình tự bắt đầu như được mô tả trên trang OEIS và như dưới đây (1 chỉ mục):

1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756

Đối với n = 1, chỉ có một giải pháp:(0,0,0,0,0,0)

Đối với n = 2, có 20 giải pháp được đặt hàng (a,b,c,x,y,z)để a+b+c = x+y+z:

(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1), 
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0), 
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1), 
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).

Tôi và O

  • Đầu vào là một số nguyên biểu thị n.
  • Đầu ra là một số nguyên / chuỗi biểu thị f(n), trong đó f(...)là hàm ở trên.
  • Việc lập chỉ mục chính xác như được mô tả, không có chỉ mục nào khác được chấp nhận.

Đây là , byte thấp nhất.


Ahhh crappp, tôi không để ý công thức trực tiếp trên OEIS, tôi nghĩ điều này sẽ không được dễ dàng. Ồ, tôi không + 1 cổng trực tiếp của phương trình đó; P.
Bạch tuộc ma thuật Urn

1
Ít nhất là công thức không được đánh gôn hoàn hảo: P
fəˈnɛtɪk

Sau đó, một lần nữa, nó cho reg-langs một cơ hội chống lại eso-langs.
Bạch tuộc ma thuật Urn

Sẽ tốt hơn nếu tiêu đề là "sự bình đẳng đến trong ba"?
Leaky Nun

Câu trả lời:


11

Thạch , 9 6 byte

ṗ6ḅ-ċ0

Dung dịch O (n 6 ) .

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

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

ṗ6ḅ-ċ0  Main link. Argument: n

ṗ6      Cartesian power 6; build all 6-tuples (a, x, b, y, c, z) of integers in
        [1, ..., n]. The challenge spec mentions [0, ..., n-1], but since there
        are three summands on each side, this doesn't matter.
  ḅ-    Unbase -1; convert each tuple from base -1 to integer, mapping (a, ..., z)
        to a(-1)**5 + x(-1)**4 + b(-1)**3 + y(-1)**2 + c(-1)**1 + z(-1)**0, i.e.,
        to -a + x - b + y - c + z = (x + y + z) - (a + b + c). This yields 0 if and
        only if the 6-tuple is a match.
    ċ0  Count the number of zeroes.

Hà! Phải yêu các câu trả lời lý thuyết (cơ sở của tôi cho một câu trả lời lý thuyết là bây giờ nó chạy trên TIO cho các giá trị lớn của n , điều này có lẽ là xấu). Tôi đã hy vọng nhìn thấy một O(n^6)mặc dù: P.
Bạch tuộc ma thuật Urn

9

Toán học 17 hoặc 76 byte

Sử dụng công thức:

.55#^5+#^3/4+#/5&

(Đã lưu 3 byte mỗi @GregMartin và @ngenisis)

Thay vì sử dụng công thức, ở đây tôi thực sự tính toán tất cả các giải pháp và đếm chúng.

Length@Solve[a+b+c==x+y+z&&And@@Table[(0<=i<#),{i,{a,b,c,x,y,z}}],Integers]&

2
Cảm ơn bạn đã đăng bài cách không vũ phu :). +1 cho bất kỳ câu trả lời toán học nào không phải là phương trình hoặc tích hợp.
Bạch tuộc ma thuật Urn

Theo câu trả lời này , bạn có thể thay thế 11/20bằng cách .55tiết kiệm hai byte.
Greg Martin

Bạn cũng không cần dấu hoa thị trong nhiệm kỳ đầu tiên.
ngenisis

8

Haskell , 48 byte

Tôi đã không chú ý đến công thức trước khi viết bài này, vì vậy đây chắc chắn không phải là phương pháp chung ngắn nhất (hoặc nhanh nhất), nhưng tôi nghĩ nó rất hay.

f n=sum[1|0<-foldr1(-)<$>pure[1..n]`mapM`[1..6]]

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

f ntạo ra tất cả các danh sách gồm 6 phần tử từ [1..n]đó, sau đó đếm các phần tử có tổng xen kẽ là 0. Sử dụng thực tế a+b+c==d+e+fgiống như a-(d-(b-(e-(c-f))))==0và cũng không thành vấn đề nếu chúng ta thêm 1 vào tất cả các số.


Tôi đã nhận thấy rằng, thông thường, câu trả lời ngắn nhất là ít ấn tượng nhất;). Đây là một cách sử dụng gấp tuyệt vời mà tôi chưa từng xem xét trước khi xem câu trả lời này.
Bạch tuộc ma thuật Urn

6

MATL , 12 byte

l6:"G:gY+]X>

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

Giải trình

Tôi không thể bỏ lỡ cơ hội sử dụng chập một lần nữa!

Điều này sử dụng các đặc tính sau từ OEIS:

a(n) = largest coefficient of (1+...+x^(n-1))^6

và tất nhiên phép nhân đa thức là tích chập.

l        % Push 1
6:"      % Do the following 6 times
  G:g    %   Push a vector of n ones, where n is the input
  Y+     %   Convolution
]        % End
X>       % Maximum

5

Thạch , 9 byte

ṗ3S€ĠL€²S

Không ngắn như @ Dennis, nhưng nó hoàn thành trong vòng dưới 20 giây cho đầu vào 100.

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

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

ṗ3S€ĠL€²S  Main link. Argument: n

ṗ3         Cartesian power; yield all subsets of [1, ..., n] of length 3.
  S€       Sum each. 
    Ġ      Group indices by their values; for each unique sum S, list all indices whose
           values are equal to S.
     L€    Length each; for each unique sum S, yield the number of items in the original
           array that sum to S.
       ²   Square each; for each unique sum S, yield the number of pairs that both sum to S.
        S  Sum; yield the total number of equal pairs.

Bạn có thể giải thích phương pháp này? Tôi hiện đang trong quá trình học Jelly, nhưng tôi vẫn chưa đủ tốt để gửi câu trả lời thực sự; Tôi luôn tìm đến bạn, Dennis và một vài người khác để lấy ví dụ tốt.
Bạch tuộc ma thuật Urn

@carusocomputing Kết thúc phần giải thích. Hãy cho tôi biết nếu bạn vẫn còn bất kỳ câu hỏi nào :-)
ETHproductions

Thật tuyệt vời, tôi chủ yếu bối rối về việc tối ưu hóa các câu trả lời từ việc triển khai vũ lực cơ bản nhất mà tôi sẽ làm với mã ngắn điên rồ mà tôi thấy các bạn đăng; nhưng tôi cảm thấy như mọi lời giải thích là một bước gần hơn cảm ơn bạn!
Bạch tuộc ma thuật Urn

5

Bình thường, 13 12 byte

JsM^UQ3s/LJJ

Đã lưu một byte nhờ Leaky Nun.

Giải trình

JsM^UQ3s/LJJ
   ^UQ3         Get all triples in the range.
JsM             Save the sums as J.
        /LJJ    Count occurrences of each element of J in J.
       s        Take the sum.

+1 khi không sử dụng công thức trực tiếp: P.
Bạch tuộc ma thuật Urn

Bạn có thể muốn gửi một liên kết đến thông dịch viên trực tuyến .
Nữ tu bị rò rỉ

Ngoài ra, bạn có thể sử dụng /LJJthay vì m/JdJ.
Nữ tu bị rò rỉ



2

Ốc đảo , 17 byte

5m11*n3m5*nz++20÷

5                   n 5             implicit n for illustration
 m                  n**5
  11                n**5 11
    *               11*n**5
     n              11*n**5 n
      3             11*n**5 n 3
       m            11*n**5 n**3
        5           11*n**5 n**3 5
         *          11*n**5 5*n**3
          n         11*n**5 5*n**3 n
           z        11*n**5 5*n**3 4*n
            +       11*n**5 5*n**3+4*n
             +      11*n**5+5*n**3+4*n
              20    11*n**5+5*n**3+4*n 20
                ÷  (11*n**5+5*n**3+4*n)÷20

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

Oasis là một ngôn ngữ dựa trên ngăn xếp được tối ưu hóa cho các chuỗi định kỳ. Tuy nhiên, công thức đệ quy sẽ quá dài cho trường hợp này.


2

Brachylog , 17 byte

{>ℕ|↰}ᶠ⁶ḍD+ᵐ=∧D≜ᶜ

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

Giải trình

{  |↰}ᶠ⁶           Generate a list of 6 variables [A,B,C,D,E,F]...
 >ℕ                  ...which are all in the interval [0, Input)
        ḍD         Dichotomize; D = [[A,B,C],[D,E,F]]
          +ᵐ=      A + B + C must be equal to D + E + F
             ∧
              D≜ᶜ  Count the number of possible ways you can label the elements of D while
                     satisfying the constraints they have

Tôi đoán sẽ tự động đi kèm
Leaky Nun

@LeakyNun Bạn không thể tự chạy , đó là một phép ẩn dụ.
Gây tử vong

Nhưng nếu nó được sử dụng trong danh sách, việc dán nhãn danh sách đó có thể được làm vị ngữ mặc định, không?
mat

@mat Nó có thể được thực hiện theo cách đó, nhưng ngay bây giờ bạn không thể sử dụng siêu dữ liệu trên một biến.
Gây tử vong vào


1

Octave , 25 23 21 byte

@(n).55*n^5+n^3/4+n/5

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

Sử dụng công thức từ mục nhập OEIS. Đã lưu hai bốn byte bằng cách sắp xếp lại công thức và sử dụng .55thay vì 11/20, nhờ vào fnɛtɪk.


1

Python 2.7, 109 105 99 96 byte

Cảm ơn ETHproductions và Dennis đã lưu một vài byte:

from itertools import*
lambda s:sum(sum(x[:3])==sum(x[3:])for x in product(range(s),repeat=6))

Thật thú vị, không phải Python 3 có chức năng phạm vi ngắn hơn 2.7?
Bạch tuộc ma thuật Urn

sum(sum(x[:3])==sum(x[3:])for x ...)thậm chí sẽ ngắn hơn Ngoài ra, from itertools import*tiết kiệm một byte.
Dennis

Bạn không cần không gian trước for. Ngoài ra, chúng tôi không yêu cầu các chức năng được đặt tên theo mặc định, vì vậy bạn có thể xóa h=.
Dennis

1

Toán học, 52 byte

Việc triển khai công thức OEIS của Kelly Lowder ngắn hơn nhiều, nhưng điều này sẽ tính toán các con số trực tiếp:

Count[Tr/@#~Partition~3&/@Range@#~Tuples~6,{n_,n_}]&

Vâng, nó thực sự đếm số lượng các giải pháp với 1 <= a,b,c,x,y,z <= n. Đây là cùng một số, vì thêm 1 vào tất cả các biến không làm thay đổi đẳng thức.

Giải thích: Range@#~Tuples~6làm cho tất cả các danh sách sáu số nguyên từ 1 đến n, #~Partition~3&/@chia mỗi danh sách thành hai danh sách có độ dài 3, tính Tr/@tổng các danh sách phụ này và Count[...,{n_,n_}]đếm xem có bao nhiêu cặp có cùng một tổng. Tôi đã rất may mắn với thứ tự ưu tiên giữa f @, f /@~f~!


1

Octave , 41 byte

@(n)round(max(ifft(fft(~~(1:n),n^2).^6)))

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

Tương tự như câu trả lời MATL của tôi , nhưng tính toán tích chập thông qua một biến đổi Fourier rời rạc ( fft) với đủ số điểm ( n^2). ~~(1:n)được sử dụng như một phiên bản ngắn hơn của ones(1,n). roundlà cần thiết vì lỗi dấu phẩy động.


0

CJam , 17 byte

ri,6m*{3/::+:=},,

Đầu vào hết 11thời gian trên TIO 12và cao hơn hết bộ nhớ.

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

Giải trình

ri                e# Read an int from input.
  ,               e# Generate the range 0 ... input-1.
   6m*            e# Take the 6th Cartesian power of the range.
      {           e# Keep only the sets of 6 values where:
       3/         e#  The set split into (two) chunks of 3
         ::+:=    e#  Have the sums of both chunks equal.
              },  e# (end of filter)
                , e# Get the length of the resulting list.

0

Clojure, 79 byte

#(count(for[r[(range %)]a r b r c r x r y r z r :when(=(+ a b c)(+ x y z))]1))

Hàng tấn lặp lại trong mã, với số lượng biến lớn hơn, một macro có thể ngắn 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.