101225_/tex/py101225pychecksumnumberdataset.py

# (c) david vajda
# 10/12/25
# python 3/checksum/dataset and co kg ok

def arith_mean_bin_halfing (X, n):
    i = 0
    if n > 1:
        while i < n/2:
            X [i] = X [i] + X [i+int(n/2)-1]
            print (X)
            i = i + 1
        arith_mean_bin_halfing (X, n/2)


# def brith_mean_bin_halfing (X, i, n):
#    if n > 0:
#        X [i] = brith_mean_bin_halfing (X, i, n/2) + brith_mean_bin_halfing (X, i+(n/2)-1, n/2)

# das geht so  nicht, weil, wir haben keine indize daten
# besser, kurze raucherpause, erst indize daten auf schreiben
# achtung! b, c, d version bleibt! ok
# blos, viele moeglichkeiten:
# feld fuer feld, oder y und summe + anderem y oder feld stueck what ever....

# also (1.) moeglichkeit
# die erste moeglichkeit waere die grenze zu halbieren
# n/2, 8, 4, 2, 1
# dann ist die summe
# 0+1, 2+3, 4+5, 6+7, das waeren die teilsummen auf unterster ebene
# 0+3, 4+7, auf der naechsten ebene
# 0

# erstens die laenge der summen
# 2 elemente, 2, 2, 2, 2, ...
# weiter ... 0x0f, n ist die gesamtmenge
# so, auf der untersten ebene gilt, folgendes:
# n/2 elemente, a 2, zum beispiel
# bei 8 elementen, 4x 2 elemenete, 2,2,2,2, vier mal zwei
# oder bei 16 elementen, 2, 2, 2, 2, 2, 2, 2, 2
# in der naechsten ebene, 4, 4, 4, 4
# 2 solutions
# die erste bezieht sich auf grenzen
# das eine sind die grenzen und laengen
# das andere sind die anzahl der elemente
# so, zwei solutions
# erstens kann man versetzt arbeiten
# wenn man es iterativ machen wuerde
# anfang und haelfte, anfang+1, haelfte+1, anfang+2, haelfte+2
# logisch ...
# erster index, erster index+1; erster index+2, erster index+3;
# paarweise auf unterster ebene und zwar von der zahl der haelfte
# paarweise auf der darueber liegenden
# blos die frage: geben wir das als rueckgabewert zurueck und addieren
# die rueckgabewerte

def brith_mean_bin_halfing (X, l, r):
    if l != r:
        return brith_mean_bin_halfing (X, l+1, r-1) + X [l] + X [r]
    else:
        return 0

# also, man muss die laenge des feldes auf die haelfte ansetzen
# und die eine haelfte des feldes behandeln, dann die andere ...
# das feld wird immer kuerzer, und zwar so kuerzer, ...
# bis es zwei elemente sind, das wird auf die obere haelfte jeweils
# angewendet und dann auf die untere...

# def brith_mean_bin_halfing (X, r, l):
#    if (r-l) == 2:
        # y2 = X [r]
        # y1 = X [l]
        # print (y1, " + ", y2, " = ", y2+y1)
#        print (r, " ", l)
#    else:
#        int((r-l)/2)
#        mr = int((r-l)/2)
#        ml = int((r-l)/2)
        # y2 = brith_mean_bin_halfing (X, r, ml)
        # y1 = brith_mean_bin_halfing (X, mr, l)
#        brith_mean_bin_halfing (X, l+m, r)
#        brith_mean_bin_halfing (X, l, r-m)
#        print (l+m, " ", r, " ", l, " ", r-m)
#        print ("")
    # return y2+y1


def brith_mean_bin_halfing (X, i, d):
    # difference, sollte eigentlich laenge sein
    if d == 2:
        y2 = X [i+0]
        y1 = X [i+1]
        print (y1, " + ", y2, " = ", y2+y1)
    else:
        y2 = brith_mean_bin_halfing (X, i, int(d/2))
        y1 = brith_mean_bin_halfing (X, i+int(d/2), int(d/2))
        print (i, " ", i+int(d/2)-1, " ", i+int(d/2), " ", i+d)
        print ("")
    return y2+y1

def crith_mean_bin_halfing (X, l, r):
    # difference, sollte eigentlich laenge sein
    d = int(((r+1)-l)/2)
    if d == 1:
        y2 = X [l]
        y1 = X [r]
        print (y1, " + ", y2, " = ", y2+y1)
    else:
        y2 = crith_mean_bin_halfing (X, r-d+1, r)
        y1 = crith_mean_bin_halfing (X, l, l+d-1)
        print (l, " ", l+d-1, " ", r-d+1, " ", r)
        print ("")
    return y2+y1




print ("(c) david vajda")
print ("10/12/25")
print ("python 3/checksum/dataset and co kg ok")

X=[0xe5, 0x10, 0x4a, 0xe0,  0x9c, 0x0b, 0x20, 0xe7,  0xe9, 0xdd, 0x6e, 0x26,  0xeb, 0x16, 0x90, 0xc8];

i=0
n=len(X)
print ("X = [", end="")
while i < n - 1:
    print (X[i], end=", ")
    i = i + 1
print (X[i], "]")

# ok let's try to make a sum:

print ("ok let's try to make a sum:")

i=0
n=len(X)
y=0
print ("SUM_(i=0)^15 X[i], X = [", end="")
while i < n - 1:
    print (X[i], end=", ")
    y = y + X [i]
    i = i + 1
y = y + X [i]
print (X[i], "]")
print ("SUM_(i=0)^15 X[i] = ", y)

# a total better output means:

print ("a total better output means:")
i=0
n=len(X)
y=0
s=""
print ("SUM_(i=0)^15 X[i], X = [", end="")
while i < n - 1:
    y = y + X [i]
    s = s + " + " + str (X[i])
    print (s, "= " + str (y))
    i = i + 1
y = y + X [i]
print (X[i], "]")
print ("SUM_(i=0)^15 X[i] = ", y)

# to the producer from producer: david vajda, bitte nimm
# screenshots auf!

# ok, eine bessere methode geht ab jetzt so
# anstatt, dass wir beginnen wuerden
# den string zu erweitern ohne zu speichern
# anstatt dass wir beginnen,
# die 'y' zu speichern, speichern wir sie auch...

print ("a more total better output means:")
i=0
n=len(X)
y=[0]
s=""
print ("SUM_(i=0)^15 X[i], X = [", end="")
while i < n - 1:
    y = y + [X [i]]
    print (y)
    s = s + " + " + str (X[i])
    # print (s, "= " + str (y))
    i = i + 1
print (X[i], "]")
print ("SUM_(i=0)^15 X[i] = ", y)

# zum beispiel, ok, das muss  nicht weiter ausgebaut werden.
# nun kommt unser ansatz fuer arithmetische mittel, welcher
# art auch immer
# da unser array/feld/liste ... array/feld/what ever
# ... ich habe das buch python (ohne 3, ich weise darauf hin)
# im netz bei linux immer python3
# ... bitte. literatur kaufen ist wichtig!
# zweitens: einstieg in python - ideal fuer programmiereinsteiger
# thomas theis
# jedenfalls, hier steht listen, so weit ich weiss
# ist der begriff, array/feld ... in python3 nicht ueblich
# python ist so weit ich weiss, wie die sprache, die xmaxima (maxima)
# so wie maxima selber benutzt so wie q und r - die sprachen fuer
# artificial intelligence ...
# sehr  mathematisch, besonders python3
# das heisst schlaegt man das buch auf, wehen einem begriffe wie
# menge, listen, tupel entgegen... ganz einfach...
# ok, wichtig ist jetzt, da wir aber daher kommen, wie C Programmierer
# koennen wir mal wieder keine elemente loeschen, das heisst,
# wir bedienen uns der methode den 2. operanden jeweils auf 0 zu setzen
# da uns aber dann dieser operand trotzdem nicht wiederfahren sollte,
# oder doch? gucken wir mal: nehmen wir die indizes raus, wieder moeglichkeiten
# auch die rekursion kommt jetzt!!!! kommt jetzt alles!!!

i=0
n=len(X)
y=[0]
s=""
print ("SUM_(i=0)^15 X[i], X = [", end="")
j=1
while (j+i) < n:
    X [i] = X [i] + X [i+j]
    X [i+j] = 0
    print (X)
    i = (i + j) % n
    j = j * ((2*((i % n) == 0)) + 1*((i % n) != 0))
    print (i, j)
print (X[i], "]")
print ("SUM_(i=0)^15 X[i] = ", y)

# arith_mean_bin_halfing (X, len(X))

# print (brith_mean_bin_halfing (X, 0, len(X)-1))
print (brith_mean_bin_halfing (X, 0, len(X)))
print (crith_mean_bin_halfing (X, 0, len(X)-1))