Ich versuche das Projekt Euler Problem # 12 zu lösen:
Die Reihenfolge der Dreieckszahlen wird durch Addition der natürlichen Zahlen erzeugt Zahlen. Also die 7. Dreieckszahl wäre 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Die ersten zehn Begriffe wären:
%Vor%Lassen Sie uns die Faktoren der ersten sieben Dreieckszahlen auflisten:
%Vor%Wir können sehen, dass 28 die erste Dreieckszahl über fünf ist Teiler. Welchen Wert hat die erste Dreieckszahl über fünf? hundert Teiler?
Hier ist die Lösung, die ich mit Ruby entwickelt habe:
%Vor%Ich sollte keine beliebig große Zahl wie 9_999_999_999_999_999 verwenden. Es wäre besser, wenn wir wie einige funktionale Sprachen eine Math.INFINITY-Sequenz hätten. Wie kann ich in Ruby eine faule unendliche Sequenz erzeugen?
In Ruby & gt; = 1.9 können Sie ein Enumerator-Objekt erstellen, das die gewünschte Sequenz liefert. Hier ist eine, die eine unendliche Folge von ganzen Zahlen ergibt:
%Vor%Oder:
%Vor%Programming Ruby 1.9 (aka "The Pickaxe Book"), 3. Platz. ed., p. 83, hat ein Beispiel eines Enumerators für Dreieckszahlen. Es sollte einfach sein, den obigen Enumerator zu modifizieren, um Dreieckszahlen zu erzeugen. Ich würde es hier tun, aber das würde das Beispiel wörtlich reproduzieren, wahrscheinlich mehr als "faire Verwendung" erlaubt.
Mehrere Antworten sind nahe, aber ich sehe niemanden, der unendliche Bereiche benutzt. Ruby unterstützt sie gut.
%Vor%In Ihrem Fall
%Vor%Ihre Brute-Force-Methode ist grob und kann möglicherweise sehr lange dauern.
Wie Amadan erwähnt hat, können Sie Closures verwenden:
%Vor%Ich glaube nicht, dass es viel langsamer ist als eine Schleife. Sie können den Status auch im Klassenobjekt speichern, aber Sie müssen mehr eingeben:
%Vor%Hinzugefügt:
Für diejenigen, die longjmps mögen:
%Vor%Aufbauend auf Waynes ausgezeichneter Antwort und in dem Ruby-Geist, Dinge mit der geringsten Anzahl an Charakteren hier zu tun, ist eine leicht aktualisierte Version:
%Vor%Offensichtlich löst das ursprüngliche Euler-Problem nicht, ist aber gut zum Erzeugen einer unendlichen Folge von ganzen Zahlen. Funktioniert definitiv für Ruby & gt; 2.0. Viel Spaß!
Tags und Links ruby range infinite-sequence