[Squeak-ev] Re: Eulerprobleme mit Squeak

Enrico Schwass ennoausberlin at mac.com
Son Nov 7 14:07:33 UTC 2010


Bert Freudenberg <bert at freudenbergs.de> writes:

Hallo Bert,

>> Ich erwarte deine Einsendung zu Lösung B :)
> Du meinst, weil Lösung B auf unserer Website falsch ist? Demonstriert
> sehr schön die Gefahr, unnötigerweise mit Indizes rumzuhantieren.

Oops. Ist korrigiert. Danke für den Hinweis

> Von diesem Fehler abgesehen kann man das auch kompakter schreiben:
>
> (1 to: 999) inject: 0 into: [:sum :i |
> 	(i \\ 3 = 0) | (i \\ 5 = 0)
> 		ifTrue: [sum + i]
> 		ifFalse: [sum]]
> Das vermeidet trotzdem den exorbitanten Speicherverbrauch von Lösung A.

Das hatte ich tatsächlich zuerst auch so formuliert, fand es dann aber
nicht so schön. Der hohe Speicherverbrauch von A ist mir erst
später aufgefallen.

> Noch knapper:
> (1 to: 999) detectSum: [:i | (i \\ 3 = 0) | (i \\ 5 = 0) ifTrue: [i]
> ifFalse: [0]]

Auch daran hatte ich gedacht, nur den false-Zweig vergessen, oder nicht
hinbekommen. Genau weiss ich das nicht mehr. Ist schon zu lange her.
Schön, das jetzt richtig formuliert zu sehen

> Und wenn man Kontrollstrukturen vermeiden mag:
> (1 to: 999) detectSum: [:i | i * (#(0 0 1 0 1 1 0 0 1 1 0 1 0 0 1) atWrap: i)]

Ich nehme die Variante mit auf. Aber ganz ehrlich, das ist mir zu
kompliziert. Das hat was von Obfuscation.

Man kommt über den goldenen Schnitt noch auf die Lösung. Vielleicht hat
da mal jemand Lust.

Und ja, es macht Spaß :)

Enno