Collatz-Vermutung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 6959
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@EyDu:
Die Grundregeln der Mathematik sind mir durchaus bekannt. Tut mir leid, dass dich mein Enthusiasmus, dies einmal an größeren Zahlen zu sehen, derart gelangweilt hat...
Benutzeravatar
__blackjack__
User
Beiträge: 14362
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Beim Video gefiel mir der Kommentar von @peterboy209: „Vorhin ist mir der Beweis gelungen. Leider hat meine Frau mich was gefragt was mich abgelenkt hat und danach ist mir die Lösung entfallen. Sorry“ :-D
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
Benutzeravatar
__blackjack__
User
Beiträge: 14362
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@narpfel: Der Funktionsname ist viel zu lang, und warum die beiden Lambda-Funktionen? Wenn man das kurz haben möchte, komme ich auf 49 Bytes runter:

Code: Alles auswählen

f=lambda n:[n]+(n-1 and f((n//2,3*n+1)[n%2])or[])
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
narpfel
User
Beiträge: 711
Registriert: Freitag 20. Oktober 2017, 16:10

@__blackjack__: Da ist noch ein relativ offensichtliches einzelnes Byte, das man sparen kann. :mrgreen:
Benutzeravatar
__blackjack__
User
Beiträge: 14362
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das hier, oder habe ich noch ein anderes übersehen?

Code: Alles auswählen

f=lambda n:[n]+(n-1and f((n//2,3*n+1)[n%2])or[])
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
narpfel
User
Beiträge: 711
Registriert: Freitag 20. Oktober 2017, 16:10

Das meinte ich.

Mit ein bisschen rumprobieren bin ich jetzt bei 46 Bytes.
narpfel
User
Beiträge: 711
Registriert: Freitag 20. Oktober 2017, 16:10

Code: Alles auswählen

f=lambda n:n-1and[n]+f((n//2,3*n+1)[n%2])or[1]
Benutzeravatar
__blackjack__
User
Beiträge: 14362
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dieses eine Byte sollte man geniessen solange es noch geht, denn das wird in absehbarer Zeit abgeschafft, wie die Dokumentation von Python 3.14 verspricht:
Currently Python accepts numeric literals immediately followed by keywords, for example ``0in x, 1or x, 0if 1else 2``. It allows confusing and ambiguous expressions like ``[0x1for x in y]`` (which can be interpreted as ``[0x1 for x in y]`` or ``[0x1f or x in y]``). A syntax warning is raised if the numeric literal is immediately followed by one of keywords ``and``, ``else``, ``for``, ``if``, ``in``, ``is`` and ``or``. In a future release it will be changed to a syntax error.
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
Antworten