[Squeak-ev] Re: Eulerprobleme mit Squeak
Bert Freudenberg
bert at freudenbergs.de
Son Nov 7 12:59:56 UTC 2010
On 06.11.2010, at 12:04, Enrico Schwass wrote:
> 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.
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.
Noch knapper:
(1 to: 999) detectSum: [:i | (i \\ 3 = 0) | (i \\ 5 = 0) ifTrue: [i] ifFalse: [0]]
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)]
Macht Spaß :)
- Bert -