ความเสมอภาคมาในสาม


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 = 2มีคำสั่ง 20 คำสั่ง(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).

I & O

  • การป้อนข้อมูลเป็นจำนวนเต็ม ndenoting
  • เอาท์พุทเป็น denoting จำนวนเต็ม / สตริงเดียวf(n)โดยที่f(...)ฟังก์ชั่นด้านบน
  • การจัดทำดัชนีตรงตามที่อธิบายไว้ไม่มีการยอมรับการทำดัชนีอื่น ๆ

นี่คือชนะน้อยที่สุดนับไบต์


crappp Ahhh ผมไม่ได้สังเกตเห็นสูตรโดยตรงต่อ OEIS ผมคิดว่านี้จะไม่เป็นที่ง่าย โอ้ฉันไม่ได้ +1 พอร์ตโดยตรงของสมการนั้น P
Magic Octopus Urn

1
อย่างน้อยสูตรก็ไม่ได้สมบูรณ์นัก: P
fəˈnɛtɪk

จากนั้นอีกครั้งมันเปิดโอกาสให้ reg-langs ต่อ eso-langs
Magic Octopus Urn

จะดีกว่าไหมถ้าชื่อเรื่อง "ความเท่าเทียมกันมาเป็นสามเท่า"?
Leun 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.

ฮา! ต้องรักคำตอบเชิงทฤษฎี (พื้นฐานของฉันสำหรับคำตอบเชิงทฤษฎีคือตอนนี้มันทำงานบน TIO สำหรับค่ามากของ nนี้อาจไม่ดี) ฉันหวังว่าจะได้เห็นO(n^6): หน้า
Magic Octopus Urn

9

Mathematica 17 หรือ 76 Bytes

ใช้สูตร:

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

(บันทึก 3 ไบต์ต่อ @GregMartin และ @ngenisis)

แทนที่จะใช้สูตรนี่ฉันคำนวณคำตอบทั้งหมดแล้วนับมัน

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ด้วย.55การประหยัดแบบสองไบต์
Greg Martin

คุณไม่จำเป็นต้องใช้ดอกจันในเทอมแรก
ngenisis

8

Haskell , 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

ไม่ได้เป็นสั้น @ เดนนิส แต่มันเสร็จสิ้นภายใน 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

คำอธิบาย

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

คุณอาจต้องการที่จะโพสต์ลิงค์เพื่อเป็นล่ามออนไลน์
Leun Nun

นอกจากนี้คุณยังสามารถใช้แทน/LJJ m/JdJ
Leun Nun


2

TI-BASIC, 19 ไบต์

:Prompt X
:.05X(11X^4+5X²+4

ประเมินสูตร OEIS


1
คุณนับจำนวนไบต์ที่นี่ได้อย่างไร Prompt x= 2 ไบต์
Magic Octopus Urn


1
ค่อนข้างเศร้าที่ฉันโพสต์คำตอบ TI-BASIC 5 ครั้งก่อนหน้านี้และไม่เคยให้คะแนนอย่างถูกต้องตอนนี้ที่ฉันดูประวัติของฉัน
Magic Octopus Urn

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

ลองออนไลน์!

Oasis เป็นภาษาสแต็กที่ปรับให้เหมาะสมสำหรับลำดับที่เกิดซ้ำ อย่างไรก็ตามสูตรการสอบถามซ้ำจะยาวเกินไปสำหรับกรณีนี้


2

Brachylogขนาด 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

ฉันเดาว่าควรมาโดยอัตโนมัติ
Leaky Nun

@LeakyNun คุณไม่สามารถเรียกใช้โดยตัวเองมันเป็น metapredicate
เสียชีวิต

แต่ถึงกระนั้นถ้ามันถูกใช้ในรายการการติดฉลากรายการนั้นอาจทำให้ภาคแสดงเริ่มต้นไม่ใช่หรือ?
เสื่อ

@mat มันอาจเป็นไปได้ แต่ตอนนี้คุณไม่สามารถใช้ metapredicate กับตัวแปรได้
เสียชีวิต



1

Python 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

Mathematica ขนาด 52 ไบต์

การปฏิบัติตามสูตร OEIS ของ Kelly Lowder นั้นสั้นกว่านี้ แต่จะคำนวณตัวเลขโดยตรง:

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

1 <= a,b,c,x,y,z <= nดีก็จริงนับจำนวนของการแก้ปัญหาที่มี นี่คือตัวเลขเดียวกันเนื่องจากการเพิ่ม 1 ให้กับตัวแปรทั้งหมดจะไม่เปลี่ยนความเท่าเทียมกัน

คำอธิบาย: Range@#~Tuples~6สร้างรายการทั้งหมดหกจำนวนเต็มระหว่าง 1 ถึง n #~Partition~3&/@แยกแต่ละรายการออกเป็นสองรายการที่มีความยาว 3 Tr/@ผลรวมรายการย่อยเหล่านี้และCount[...,{n_,n_}]นับจำนวนคู่ที่มีผลรวมเท่ากัน ผมโชคดีมากที่มีลำดับความสำคัญระหว่างf @, f /@และ~f~!


1

อ็อกเทฟ 41 ไบต์

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

ลองออนไลน์!

คล้ายกับคำตอบ MATLของฉันแต่คำนวณการแปลงผ่านการแปลงฟูริเยร์แบบแยก ( fft) ด้วยจำนวนคะแนนที่เพียงพอ ( n^2) ถูกนำมาใช้เป็นรุ่นสั้น~~(1:n) จำเป็นเนื่องจากข้อผิดพลาดของจุดลอยones(1,n)round


0

CJam , 17 ไบต์

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

อินพุต11เวลาที่หมดใน TIO และ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

Clojure, 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.