26 lines
801 B
Elixir
26 lines
801 B
Elixir
### Streams
|
|
|
|
0..1_000_000 |> Enum.map(& &1 * &1) |> Enum.filter(& rem(&1, 8) == 0) |> Enum.sum
|
|
# & &1 * &1 is equivalent to
|
|
# fn x -> x * x end
|
|
|
|
0..1_000_000 |> Steam.map(& &1 * &1) |> Steam.filter(& rem(&1, 8) == 0) |> Enum.sum
|
|
|
|
fibs = Stream.unfold({0, 1}, fn {a, b} -> {a, {b, a+b}} end)
|
|
fibs |> Enum.take(20);
|
|
|
|
# fizzbuzz infstream
|
|
nats = Stream.iterate(1, & &1 + 1)
|
|
# Stream.iterate(1, fn x -> x + 1) is an inf stream because we can take up to n with no limit
|
|
nats |> Enum.take(10)
|
|
|
|
fizz = Stream.cycle(["", "", "fizz"])
|
|
fizz |> Enum.take(10)
|
|
buzz = Stream.cycle(["", "", "", "", "buzz"])
|
|
buzz |> Enum.take(10)
|
|
|
|
fizzbuzz = Stream.zip_with([nats, fizz, buzz], fn [n, f, b] ->
|
|
if f == "" && b == "", do: n,
|
|
else: f <> b # concat f with b
|
|
end)
|