Bert Freudenberg schrieb:
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
Hat was! ;-) Wie messe ich denn am elegantesten den Speicherverbrauch deiner Lösungen?
Apropos: Muss dich nachträglich doch sehr loben für die Portierung von EToys auf iPad ... klasse Arbeit, hat mich begeistert! Ist das schon im Appstore oder hat Apple damit auch Probleme?
Have fun, Guido Stepken