Grabbing a subset of a range if a particular value is found?

Ali Çehreli acehreli at yahoo.com
Tue Sep 24 14:20:29 PDT 2013

```On 09/24/2013 02:10 PM, Gary Willoughby wrote:

> import std.algorithm;
> import std.range;
> import std.stdio;
>
> /**
>   * Each new term in the Fibonacci sequence is generated by adding the
> previous
>   * two terms. By starting with 1 and 2, the first 10 terms will be: 1,
> 2, 3, 5,
>   * 8, 13, 21, 34, 55, 89, ... By considering the terms in the Fibonacci
>   * sequence whose values do not exceed four million, find the sum of the
>   * even-valued terms.
>   */
> void main()
> {
>      recurrence!("a[n-1] + a[n-2]")(1, 2)
>          .until!("a > 4_000_000")
>          .filter!(a => a % 2 == 0)
>          .reduce!("a + b")
>          .writeln;
> }
>
> I love chaining stuff up like this, it makes the solution easy to
> understand and read. As Walter said in one of his talks, the code looks
> like the problem being solved. I'm loving it! :)

Awesome! :) And if you want to stick with non-string functions:

recurrence!((a, n) => a[n-1] + a[n-2])(1, 2)
.until!(a => a > 4_000_000)
.filter!(a => a % 2 == 0)
.reduce!((sum, a) => sum + a)
.writeln;

Ali

```