Gleichheit kommt zu dritt

11

Entnommen aus: OEIS- A071816

Ihre Aufgabe bei einer Obergrenze von nist es, die Anzahl der Lösungen zu finden, die die Gleichung erfüllen:

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

Die Sequenz beginnt wie auf der OEIS-Seite beschrieben und wie folgt (1-indiziert):

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

Denn n = 1es gibt nur eine Lösung:(0,0,0,0,0,0)

Für n = 2gibt es 20 bestellte Lösungen (a,b,c,x,y,z)für 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).

Ich & O.

  • Die Eingabe ist eine einzelne Ganzzahl n .
  • Die Ausgabe ist eine einzelne Ganzzahl / Zeichenfolge f(n) , wobei f(...)die Funktion ist oben.
  • Die Indizierung ist genau wie beschrieben, keine andere Indizierung ist akzeptabel.

Dies ist , niedrigste Byte-Anzahl gewinnt.

Magische Krakenurne
quelle
Ahhh crappp, ich habe die direkte Formel auf OEIS nicht bemerkt, dachte ich , das wäre nicht das einfach. Na ja, ich bin nicht + 1'ing direkte Ports dieser Gleichung; P.
Magic Octopus Urn
1
Zumindest war die Formel nicht perfekt gespielt: P
fəˈnɛtɪk
Andererseits gibt es reg-langs eine Chance gegen die eso-langs.
Magic Octopus Urn
Wäre es besser, wenn der Titel "Gleichheit kommt in Drillingen" lautet?
Undichte Nonne

Antworten:

11

Gelee , 9 6 Bytes

ṗ6ḅ-ċ0

O (n 6 ) -Lösung.

Probieren Sie es online aus!

Wie es funktioniert

ṗ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.
Dennis
quelle
Ha! Ich muss die theoretischen Antworten lieben (meine Basis für eine theoretische Antwort ist jetzt, dass sie auf TIO für große Werte von n ausgeführt wird , das ist wahrscheinlich schlecht). Ich hatte gehofft, ein O(n^6)obwohl zu sehen : P.
Magic Octopus Urn
9

Mathematica 17 oder 76 Bytes

Mit der Formel:

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

(3 Bytes pro @GregMartin und @ngenisis gespeichert)

Anstatt die Formel zu verwenden, berechne ich hier buchstäblich alle Lösungen und zähle sie.

Length@Solve[a+b+c==x+y+z&&And@@Table[(0<=i<#),{i,{a,b,c,x,y,z}}],Integers]&
Kelly Lowder
quelle
2
Danke, dass du den Non-Brute-Force-Weg gepostet hast :). +1 für jede mathematische Antwort, die keine Gleichung oder integrierte Funktion ist.
Magic Octopus Urn
Gemäß dieser Antwort können Sie 11/20durch .55eine Einsparung von zwei Byte ersetzen .
Greg Martin
Sie brauchen das Sternchen auch im ersten Semester nicht.
Ngenisis
8

Haskell , 48 Bytes

Ich habe die Formel vor dem Schreiben nicht bemerkt, daher ist sie definitiv nicht die kürzeste (oder schnellste) allgemeine Methode, aber ich fand sie hübsch.

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

Probieren Sie es online aus!

f ngeneriert alle Listen mit 6 Elementen aus [1..n]und zählt dann diejenigen, deren alternierende Summe 0 ist. Verwendet die Tatsache, dass a+b+c==d+e+fdie gleiche ist wie a-(d-(b-(e-(c-f))))==0und dass es auch keine Rolle spielt, ob wir allen Zahlen eine 1 hinzufügen.

Ørjan Johansen
quelle
Mir ist aufgefallen, dass die kürzeste Antwort oft die am wenigsten beeindruckende ist;). Dies ist eine ziemlich coole Verwendung von Fold, die ich nicht in Betracht gezogen hätte, bevor ich diese Antwort gesehen hätte.
Magic Octopus Urn
6

MATL , 12 Bytes

l6:"G:gY+]X>

Probieren Sie es online aus!

Erläuterung

Ich konnte die Chance nicht verpassen, die Faltung wieder zu nutzen!

Dies nutzt die folgende Charakterisierung von OEIS:

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

und natürlich ist Polynommultiplikation Faltung.

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
Luis Mendo
quelle
5

Gelee , 9 Bytes

ṗ3S€ĠL€²S

Nicht so kurz wie bei @ Dennis, aber die Eingabe dauert weniger als 20 Sekunden 100.

Probieren Sie es online aus!

Wie es funktioniert

ṗ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.
ETH-Produktionen
quelle
Können Sie diese Methode erklären? Ich bin gerade dabei, Jelly zu lernen, aber ich bin immer noch nicht gut genug, um echte Antworten einzureichen. Ich freue mich immer auf Sie, Dennis und einige andere, um gute Beispiele zu finden.
Magic Octopus Urn
@carusocomputing Die Erklärung beendet. Lassen Sie mich wissen, wenn Sie noch Fragen haben :-)
ETHproductions
Genial, ich bin größtenteils verwirrt über die Optimierung der Antworten aus der grundlegendsten Brute-Force-Implementierung, die ich mit dem verrückten Funktionscode machen würde, den ich euch beim Posten sehe. aber ich denke, jede Erklärung ist einen Schritt näher, danke!
Magic Octopus Urn
5

Pyth, 13 12 Bytes

JsM^UQ3s/LJJ

Ein Byte dank Leaky Nun gespeichert.

Erläuterung

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.

quelle
+1 für die Nichtverwendung der direkten Formel: P.
Magic Octopus Urn
Möglicherweise möchten Sie einen Link zum Online-Dolmetscher veröffentlichen .
Undichte Nonne
Sie können auch /LJJanstelle von verwenden m/JdJ.
Undichte Nonne
2

TI-BASIC, 19 Bytes

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

Wertet die OEIS-Formel aus.

Scott Milner
quelle
1
Wie zählen Sie die Bytes hier? Prompt x= 2 Bytes?
Magic Octopus Urn
@carusocomputing TI-BASIC wird von Token erzielt
dzaima
1
Ein bisschen traurig, dass ich 5 Mal zuvor eine TI-BASIC-Antwort gepostet habe und sie jetzt, da ich meine Geschichte durchschaue, nie richtig bewertet habe ._.
Magic Octopus Urn
2

Oase , 17 Bytes

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

Probieren Sie es online aus!

Oasis ist eine stapelbasierte Sprache, die für wiederkehrende Sequenzen optimiert ist. Die Rekursionsformel wäre jedoch für diesen Fall zu lang.

Undichte Nonne
quelle
2

Brachylog , 17 Bytes

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

Probieren Sie es online aus!

Erläuterung

{  |↰}ᶠ⁶           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
Fatalisieren
quelle
Ich denke, sollte automatisch mit kommen
Leaky Nun
@LeakyNun Du kannst nicht alleine laufen , es ist ein Metapredikat.
Fatalize
Aber dennoch, wenn es in einer Liste verwendet wird, könnte die Kennzeichnung dieser Liste zum Standardprädikat gemacht werden, nicht wahr?
Matte
@mat Es könnte so gemacht werden, aber im Moment können Sie kein Metapredikat für eine Variable verwenden.
Fatalize
1

JavaScript, 24 Bytes

x=>11*x**5/20+x**3/4+x/5

Verwendet die Formel von der OEIS-Seite.

Probieren Sie es online aus!

fəˈnɛtɪk
quelle
Ich denke, Sie können zwei Bytes mitx=>x**5*.55+x**3/4+x/5
ETHproductions
@ETHproductions gibt es Gleitkommafehler, wenn ich * .55 anstelle von *
11/20 verwende
1

Oktave , 25 23 21 Bytes

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

Probieren Sie es online aus!

Verwendet die Formel aus dem OEIS-Eintrag. Dank fəˈnɛtɪk wurden zwei vier Bytes gespeichert, indem die Formel neu angeordnet und .55stattdessen 11/20verwendet wurde.

Stewie Griffin
quelle
1

Python 2.7, 109 105 99 96 Bytes

Vielen Dank an ETHproductions und Dennis für das Speichern einiger Bytes:

from itertools import*
lambda s:sum(sum(x[:3])==sum(x[3:])for x in product(range(s),repeat=6))
acidtobi
quelle
Interessant, hat Python 3 nicht Funktionen mit geringerer Reichweite als 2.7?
Magic Octopus Urn
sum(sum(x[:3])==sum(x[3:])for x ...)wäre noch kürzer. Außerdem from itertools import*speichert ein Byte.
Dennis
Sie brauchen den Platz vorher nicht for. Außerdem müssen Funktionen nicht standardmäßig benannt werden, damit Sie sie entfernen können h=.
Dennis
1

Mathematica, 52 Bytes

Kelly Lowders Implementierung der OEIS-Formel ist viel kürzer, aber dies berechnet die Zahlen direkt:

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

Nun, es zählt tatsächlich die Anzahl der Lösungen mit 1 <= a,b,c,x,y,z <= n . Dies ist dieselbe Zahl, da das Hinzufügen von 1 zu allen Variablen die Gleichheit nicht ändert.

Erläuterung: Range@#~Tuples~6Erstellt alle Listen mit sechs Ganzzahlen zwischen 1 und n, #~Partition~3&/@teilt jede Liste in zwei Listen mit der Länge 3 auf, Tr/@summiert diese Unterlisten und Count[...,{n_,n_}]zählt, wie viele Paare dieselbe Summe haben. Ich habe sehr viel Glück mit der Rangordnung zwischen f @, f /@und ~f~!

Kein Baum
quelle
1

Oktave , 41 Bytes

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

Probieren Sie es online aus!

Ähnlich wie meine MATL-Antwort , berechnet jedoch die Faltung über eine diskrete Fourier-Transformation ( fft) mit einer ausreichenden Anzahl von Punkten ( n^2). ~~(1:n)wird als kürzere Version von verwendet ones(1,n). roundist wegen Gleitkommafehlern notwendig.

Luis Mendo
quelle
0

CJam , 17 Bytes

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

Die Eingabe von 11Timeouts auf TIO 12und höher hat nicht genügend Speicher.

Probieren Sie es online aus!

Erläuterung

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.
Geschäftskat
quelle
0

Clojure, 79 Bytes

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

Tonnenweise Wiederholungen im Code, bei einer größeren Anzahl von Variablen kann ein Makro kürzer sein.

NikoNyrh
quelle