Code Golfing Thread

Technipion

Erfahrenes Mitglied
Die Formel x//Y verstehe ich ja noch (hatte ich im verlinkten Thread auch hergeleitet), aber wie kommst du auf (x+1)*Y%X?
Okay ich gebe zu, es fällt mir schwer das zu erklären. Ich habe mir das grafisch hergeleitet. Deshalb habe ich jetzt schnell ein paar Diagramme erstellt und hier angehängt.

Diagramm_ComFreak_1.png
Diagramm_ComFreak_2.png
Diagramm_ComFreak_3.png

Erklärung:
Wir versuchen im Prinzip eine Gleichverteilung über alle Punkte (x,y) mit x,y < X und x != y zu erreichen.
Wenn man eine Liste L mit all diesen Punkten hätte, könnte man einfach L[i] mit i = floor(r * L.len) und r in [0,1) zurückgeben. Ich glaube ziemlich genau das macht random.choice auch.

In den Diagrammen sind die Punkte (x, x) die wir nicht wollen mit einer roten Linie gekennzeichnet. Das erste Diagramm zeigt woher die Formel x // Y kommt. Hier werden im Prinzip einfach Y mal die Zahlen von 0 bis Y wiederholt.
Das zweite Diagramm zeigt den y-Anteil mit (x+1)*Y % X. Die Punkte in jeder Zeile haben jeweils die Eigenschaft, dass sie k * Y mod X erfüllen. Wir laufen dieses k mit (x+1) ab.
Das letzte Diagramm zeigt dann die Überlagerung der x- und y-Werte. Wir fangen ganz oben links (sehr mathematischer Ausdruck) an und machen dann immer wieder Y-1 Schritte runter und dann einen nach rechts unten. Auf diese Weise laufen wir alle Punkte ab, bis auf die auf der roten Linie.

Das ganze hätte man bestimmt auch algebraisch herleiten können :ROFLMAO:
Aber mir kam halt die Idee relativ spontan und ich wollte jetzt auch nicht Stunden nachrechnen sondern lieber codegolfen...

Gruß Technipion
 

ComFreek

Mod | @comfreek
Moderator
Wow, vielen Dank für die super tollen Grafiken und die Erklärungen!

Aber mir kam halt die Idee relativ spontan und ich wollte jetzt auch nicht Stunden nachrechnen sondern lieber codegolfen...

Ich bin da meist genau andersrum und möchte das algebraisch herleiten :D Aber deine Grafiken könnten mich womöglich umstimmen :)


PS: Sorry für die verspätete Antwort :)
 

ikosaeder

Teekannen-Agnostiker
Okay ich gebe zu, es fällt mir schwer das zu erklären. Ich habe mir das grafisch hergeleitet. Deshalb habe ich jetzt schnell ein paar Diagramme erstellt und hier angehängt.

Anhang anzeigen 66623
Anhang anzeigen 66624
Anhang anzeigen 66625

Erklärung:
Wir versuchen im Prinzip eine Gleichverteilung über alle Punkte (x,y) mit x,y < X und x != y zu erreichen.
Wenn man eine Liste L mit all diesen Punkten hätte, könnte man einfach L[i] mit i = floor(r * L.len) und r in [0,1) zurückgeben. Ich glaube ziemlich genau das macht random.choice auch.

In den Diagrammen sind die Punkte (x, x) die wir nicht wollen mit einer roten Linie gekennzeichnet. Das erste Diagramm zeigt woher die Formel x // Y kommt. Hier werden im Prinzip einfach Y mal die Zahlen von 0 bis Y wiederholt.
Das zweite Diagramm zeigt den y-Anteil mit (x+1)*Y % X. Die Punkte in jeder Zeile haben jeweils die Eigenschaft, dass sie k * Y mod X erfüllen. Wir laufen dieses k mit (x+1) ab.
Das letzte Diagramm zeigt dann die Überlagerung der x- und y-Werte. Wir fangen ganz oben links (sehr mathematischer Ausdruck) an und machen dann immer wieder Y-1 Schritte runter und dann einen nach rechts unten. Auf diese Weise laufen wir alle Punkte ab, bis auf die auf der roten Linie.

Das ganze hätte man bestimmt auch algebraisch herleiten können :ROFLMAO:
Aber mir kam halt die Idee relativ spontan und ich wollte jetzt auch nicht Stunden nachrechnen sondern lieber codegolfen...

Gruß Technipion
Ziemlich gut, womit hast du die Graphiken gemacht?
 

ComFreek

Mod | @comfreek
Moderator
Ich rate mal: Die Pfeile sehen mir verdächtig nach Microsoft Office, wahrscheinlich PowerPoint aus :)
 

Technipion

Erfahrenes Mitglied
Wow, vielen Dank für die super tollen Grafiken und die Erklärungen!
Gern geschehen!

PS: Sorry für die verspätete Antwort
Kein Ding, das hier ist ein Forum und kein Chat ;)

Ziemlich gut, womit hast du die Graphiken gemacht?
Ich rate mal: Die Pfeile sehen mir verdächtig nach Microsoft Office, wahrscheinlich PowerPoint aus
Die sehen wirklich genau wie die Office-Pfeile aus, lol :ROFLMAO:
Tatsächlich habe ich die Graphiken aber in Inkscape gezaubert. Es ist wahnsinn was das Teil alles kann.

Extra für ComFreek hatte ich mir nach dem Posten ein paar Stündchen Zeit genommen, und habe mal versucht das ganze halbwegs formal zu beweisen. Bin sogar ziemlich weit gekommen, quasi 95%. Allerdings habe ich den ganzen Blattsalat irgendwie verlegt :rolleyes:
Falls der aber beim Frühjahrsputz demnächst wieder auftauchen sollte, kann ich hier ja mal die Herleitung posten.

Fröhliches Golfen!

Gruß Technipion
 

Neue Beiträge