평등은 3로 나옵니다


11

출처 : OEIS- A071816

의 상한이 주어진 작업 n은 방정식을 만족시키는 솔루션의 수를 찾는 것입니다.

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

순서는 OEIS 페이지에 설명 된대로 그리고 아래 (1)로 시작됩니다.

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

를 들어 n = 1, 해결책은 단 하나입니다 :(0,0,0,0,0,0)

의 경우 n = 220 가지 주문 솔루션 (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).

난 & O를

  • 입력은를 나타내는 단일 정수입니다 n.
  • 출력은 단일 정수 / 문자열 인 의미하는데 f(n), f(...)상기 기능이다.
  • 인덱싱은 설명 된대로 정확하게 수행되며 다른 인덱싱은 허용되지 않습니다.

이것은 , 가장 낮은 바이트 수의 승리입니다.


아 crappp, 나는 OEIS에 직접 공식을 통보하지 않았다, 나는이되지 않을 것이라고 생각 편리합니다. 글쎄, 나는 그 방정식의 직항을 +1하지 않는다.
Magic Octopus Urn

1
적어도 공식은 완벽하게 골프되지 않았다 : P
fəˈnɛtɪk

다시, 그것은 reg-langs에게 eso-langs에 대한 기회를 제공합니다.
Magic Octopus Urn

제목이 "평등 함은 삼중 항으로 나온다"면 더 좋을까요?
Leaky Nun

답변:


11

젤리 , 9 6 바이트

ṗ6ḅ-ċ0

O (n 6 ) 용액.

온라인으로 사용해보십시오!

작동 원리

ṗ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.

하아! 이론적 답변을 좋아해야합니다 (이론적 대답의 기본은 이제 큰 값의 n에 대해 TIO에서 실행됩니까 , 아마도 나쁩니다). 나는 O(n^6)비록 : P 를보기를 바랐다 .
Magic Octopus Urn

9

Mathematica 17 또는 76 바이트

공식 사용하기 :

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

(@GregMartin 및 @ngenisis 당 3 바이트 저장)

수식을 사용하는 대신 문자 그대로 모든 솔루션을 계산하고 계산합니다.

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

2
비 브 루트 포스 방법을 게시 해 주셔서 감사합니다 :). 방정식이나 내장이 아닌 수학 답변에 +1.
Magic Octopus Urn

이 답변 , 당신은 대체 할 수 11/20에 의해 .552 바이트 절감.
Greg Martin

또한 첫 번째 용어에서 별표가 필요하지 않습니다.
ngenisis

8

하스켈 , 48 바이트

나는 이것을 작성하기 전에 공식을 알지 못했기 때문에 확실히 가장 짧은 (또는 가장 빠른) 일반적인 방법은 아니지만 그 방법이 예쁘다고 생각했습니다.

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

온라인으로 사용해보십시오!

f n에서 6 개의 요소 목록을 모두 생성 [1..n]한 다음 교호 합계가 0 인 항목을 계산합니다 a+b+c==d+e+f.와 동일한 사실을 사용하며 a-(d-(b-(e-(c-f))))==0모든 숫자에 1을 추가해도 문제가되지 않습니다.


나는 종종 가장 짧은 대답이 가장 인상적이지 않다는 것을 알아 차렸다;). 이것은이 답변을보기 전에 고려하지 않았을 꽤 멋진 접기 사용입니다.
Magic Octopus Urn

6

MATL , 12 바이트

l6:"G:gY+]X>

온라인으로 사용해보십시오!

설명

컨볼 루션을 다시 사용할 기회를 놓칠 수 없었습니다!

이는 OEIS의 다음 특성을 활용합니다.

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

물론 다항식 곱셈은 컨볼 루션입니다.

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

젤리 , 9 바이트

ṗ3S€ĠL€²S

@Dennis만큼 짧지는 않지만 입력을 위해 20 초 안에 완료됩니다 100.

온라인으로 사용해보십시오!

작동 원리

ṗ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.

이 방법을 설명 할 수 있습니까? 현재 젤리를 배우는 중이지만 아직 실제 답변을 제출하기에는 아직 부족합니다. 나는 항상 당신, 데니스와 다른 사람들에게 좋은 예를 찾습니다.
Magic Octopus Urn

@carusocomputing 설명을 마쳤습니다. 여전히 궁금한 점이 있으면 알려주세요 :-)
ETHproductions

놀랍게도 나는 가장 기본적인 무차별 구현의 답변을 최적화하는 데 혼란을 겪고 있습니다. 하지만 모든 설명이 한 걸음 더 가까이 다가온 것 같습니다.
Magic Octopus Urn

5

Pyth, 13 12 바이트

JsM^UQ3s/LJJ

Leaky Nun 덕분에 1 바이트를 절약했습니다.

설명

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 : P.
Magic Octopus Urn

온라인 통역사에 링크를 게시 할 수 있습니다 .
Leaky Nun

또한 /LJJ대신에 사용할 수 있습니다 m/JdJ.
Leaky Nun



2

오아시스 , 17 바이트

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

온라인으로 사용해보십시오!

오아시스는 반복 시퀀스에 최적화 된 스택 기반 언어입니다. 그러나이 경우 재귀 수식이 너무 길 것입니다.


2

근접 , 17 바이트

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

온라인으로 사용해보십시오!

설명

{  |↰}ᶠ⁶           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

I 추측은 자동으로 함께한다
새는 수녀

@LeakyNun 당신은 스스로 실행할 수 없습니다 . 그것은 전치사입니다.
페이탈 라이즈

그러나 여전히 목록에서 사용되는 경우 해당 목록에 레이블을 지정하면 기본 술어가 될 수 있습니다.
mat

@mat 그런 식으로 만들 수는 있지만 현재는 변수에 메타 술어를 사용할 수 없습니다.
페이탈 라이즈



1

파이썬 2.7 109 105 99 96 바이트

몇 바이트를 절약 해 준 ETHproductions와 Dennis에게 감사합니다.

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

흥미롭게도 Python 3는 2.7보다 짧은 범위 함수를 가지고 있지 않습니까?
Magic Octopus Urn

sum(sum(x[:3])==sum(x[3:])for x ...)더 짧을 것입니다. 또한 from itertools import*바이트를 저장합니다.
Dennis

당신은 전에 공간이 필요하지 않습니다 for. 또한 기본적으로 함수 이름을 지정할 필요가 없으므로를 제거 할 수 있습니다 h=.
Dennis

1

매스 매 티카, 52 바이트

Kelly Lowder의 OEIS 공식 구현은 훨씬 짧지 만 숫자를 직접 계산합니다.

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

글쎄, 실제로로 솔루션 수를 계산합니다 1 <= a,b,c,x,y,z <= n. 모든 변수에 1을 추가해도 동등성이 변경되지 않으므로 동일한 숫자입니다.

설명 : Range@#~Tuples~61과 n 사이에 6 개의 정수로 된 모든 목록을 만들고 #~Partition~3&/@각 목록을 길이가 3 인 두 목록으로 Tr/@나누고이 하위 목록을 합한 다음 Count[...,{n_,n_}]같은 합을 갖는 쌍의 수를 계산합니다. 나는 사이의 우선 순위와 아주 운이있어 f @, f /@~f~!



0

CJam , 17 바이트

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

11TIO에서 시간 초과 입력12 그리고 더 높은 메모리가 부족.

온라인으로 사용해보십시오!

설명

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

클로저, 79 바이트

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

코드에서 톤의 반복, 많은 수의 변수에서 매크로는 더 짧을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.