Auswahl Schwarzes Brett Aktion im Forum Suche Kontakt Für Mitglieder Mathematisch für Anfänger Wer ist Online | |
Autor |
Alternativer Collatzalgorithmus |
|
querin
Aktiv  Dabei seit: 12.01.2018 Mitteilungen: 251
 |     Beitrag No.40, eingetragen 2019-11-14 16:24
|
Hallo blindmessenger,
meine Funktion liefert korrekte Ergebnisse für alle ungeraden Zahlen. Du kannst selbst testen, indem du folgenden Code kopierst und hier im main.py Fenster einfügst und dann auf "run" klickst.
python def collatz(u):
r,p=1,2
while 1:
r=(-r)%6
a=(p*r-1)//3
p*=2
if (u-a)%p==0:
return 6*((u-a)//p)+r
def f(u):
c=str(u)
while u>1:
u=collatz(u)
c+=', '+str(u)
print(c)
with open('collatz_{}.txt'.format(u), 'w') as fp:
fp.write(c)
#collatz(155)
f(155) |
Natürlich ist 155 nur ein Beispiel und kann durch jede andere ungerade Zahl ersetzt werden. Der Funktionsaufruf von collatz(155) ist auskommentiert; bei Bedarf einfach das #-Zeichen entfernen (und vor f(155) setzen).
|
Profil
Quote
Link |
geroyx
Aktiv  Dabei seit: 01.11.2019 Mitteilungen: 66
 |     Beitrag No.41, eingetragen 2019-11-14 17:38
|
Ach, das ist aber nett.
So, diesen Befehl habe ich gesucht print(c.replace("\n",", ")) , das heißt, die newline wird durch ein Komma plus Leerstelle ersetzt.
Da zeilengetrennte Ausgabe m.W. der Default ist, müsste in folgendem Code noch eine Vereinfachung möglich sein.
Jedenfalls wird es jetzt so ausgegeben, wie ich mir das vortselle:
Display: kommagetrennt (zwecks Übersicht).
Ausgabe-Datei: zeilengetrennt.
Die Ausgabe-txt ist nicht zum Lesen.... So: "Ach, wie zauberhaft!"
Das ist zum Weiterverarbeiten! Und in der txt-Ausgabedatei macht eine kommagetrennte Liste überhaupt keinen Sinn! Wie soll ich denn da mit einem anderem Programm etwas einfach rauslesen?!
Das habe ich jetzt aber 5-mal vorgetragen, das ist jetzt höffentlich auch mal bei den Zaubärhaftis angekommen.
Noch ein letzter Punkt: Ich finde es grundsätzlich schön, wenn man die Eingangsparameter ganz am Anfang hinschreibt, und nach denen nicht in irgendwelchen längeren Codes ewig suchen muss.
Das sind halt alles solche Minimalansprüche, die man an sich selbst haben kann oder nicht...
So, jedenfalls danke. Wie gesagt, eine Vereinfachung in der Syntax müsste noch möglich sein.
Sage U = 155 # Den Algorithmus durchlaufende Zahl
def collatz(u):
r,p=1,2
while 1:
r=(-r)%6
a=(p*r-1)//3
p*=2
if (u-a)%p==0:
return 6*((u-a)//p)+r
def f(u):
c=str(u)
while u>1:
u=collatz(u)
c+='\n'+str(u)
# print(c) # alt
print(c.replace("\n",", ")) # neu
with open('collatz_{}.txt'.format(U), 'w') as fp:
fp.write(c)
#collatz(U)
f(U) |
155, 233, 175, 263, 395, 593, 445, 167, 251,
377, 283, 425, 319, 479, 719, 1079, 1619,
2429, 911, 1367, 2051, 3077, 577, 433,
325, 61, 23, 35, 53, 5, 1 Out[Display] |
155
233
175
263
395
593
... Out[collatz155.txt] |
|
Profil
Quote
Link |
blindmessenger
Aktiv  Dabei seit: 02.08.2016 Mitteilungen: 993
Aus: Sachsen
 |     Beitrag No.42, vom Themenstarter, eingetragen 2019-11-14 18:24
|
@Geroyx und @querin
Danke euch für die Mühe...
Und cool querin dass Dein Code wirklich jede Zahl erwischt...
Kannst Du kurz nochmal die Bildungsvorschrift für die "mystischen Zahlen" mathematisch darstellen?
----------------- Gruß blindmessenger
|
Profil
Quote
Link |
querin
Aktiv  Dabei seit: 12.01.2018 Mitteilungen: 251
 |     Beitrag No.43, eingetragen 2019-11-14 18:32
|
2019-11-14 18:24 - blindmessenger in Beitrag No. 42 schreibt:
Kannst Du kurz nochmal die Bildungsvorschrift für die "mystischen Zahlen" mathematisch darstellen?
siehe hier
|
Profil
Quote
Link |
blindmessenger
Aktiv  Dabei seit: 02.08.2016 Mitteilungen: 993
Aus: Sachsen
 |     Beitrag No.44, vom Themenstarter, eingetragen 2019-11-14 19:09
|
)2019-11-14 18:32 - querin in Beitrag No. 43 schreibt:
2019-11-14 18:24 - blindmessenger in Beitrag No. 42 schreibt:
Kannst Du kurz nochmal die Bildungsvorschrift für die "mystischen Zahlen" mathematisch darstellen?
siehe hier
Ja genau...
----------------- Gruß blindmessenger
|
Profil
Quote
Link |
geroyx
Aktiv  Dabei seit: 01.11.2019 Mitteilungen: 66
 |     Beitrag No.45, eingetragen 2019-11-16 18:43
|
Lieber querin,
es wäre nette, wenn Du die vermutete Vereinfachung in #41 ergänzen könntest, für die Sage-Enthusiasten.
Am Rande: Ja und? Ist jetzt die Collatz-Vermutung damit gelöst, oder was? 
|
Profil
Quote
Link |
blindmessenger
Aktiv  Dabei seit: 02.08.2016 Mitteilungen: 993
Aus: Sachsen
 |     Beitrag No.46, vom Themenstarter, eingetragen 2019-11-16 19:20
|
2019-11-16 18:43 - geroyx in Beitrag No. 45 schreibt:
Lieber querin,
es wäre nette, wenn Du die vermutete Vereinfachung in #41 ergänzen könntest, für die Sage-Enthusiasten.
Am Rande: Ja und? Ist jetzt die Collatz-Vermutung damit gelöst, oder was? 
Natürlich nicht...
Aber wir sind dran... 
----------------- Gruß blindmessenger
|
Profil
Quote
Link |
blindmessenger
Aktiv  Dabei seit: 02.08.2016 Mitteilungen: 993
Aus: Sachsen
 |     Beitrag No.47, vom Themenstarter, eingetragen 2019-11-17 16:35
|
Wenn man das mal ein bißchen ausformuliert sieht es so aus:
$6(\frac{x-3}{4})+5=\frac{3x+1}{2}$
$6(\frac{x-1}{8})+1=\frac{3x+1}{4}$
$6(\frac{x-13}{16})+5=\frac{3x+1}{8}$
$6(\frac{x-5}{32})+1=\frac{3x+1}{16}$
...
Ergibt:
$\frac{3}{2}x+\frac{1}{2}=\frac{3}{2}x+\frac{1}{2}$
$\frac{3}{4}x+\frac{1}{4}=\frac{3}{4}x+\frac{1}{4}$
$\frac{3}{8}x+\frac{1}{8}=\frac{3}{8}x+\frac{1}{8}$
$\frac{3}{16}x+\frac{1}{16}=\frac{3}{16}x+\frac{1}{16}$
...

----------------- Gruß blindmessenger
|
Profil
Quote
Link |
|