Skip to content

Commit b908d02

Browse files
authored
Merge pull request #27 from hamidb80/newVersion
New version
2 parents 31867c7 + 571491c commit b908d02

File tree

9 files changed

+449
-454
lines changed

9 files changed

+449
-454
lines changed

benchmarks/b2power_filter.nim

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import std/[sugar]
2+
import benchy
3+
import iterutils, iterrr, zero_functional
4+
5+
timeIt "closure iterator":
6+
var acc = 0
7+
8+
for i in (1..100_000).
9+
toIter.
10+
filter(x => x mod 2 == 0).
11+
filter(x => x mod 4 == 0).
12+
filter(x => x mod 8 == 0).
13+
filter(x => x mod 16 == 0).
14+
filter(x => x mod 32 == 0).
15+
filter(x => x mod 64 == 0).
16+
filter(x => x mod 128 == 0).
17+
filter(x => x mod 256 == 0).
18+
filter(x => x mod 512 == 0):
19+
20+
acc.inc i
21+
22+
timeIt "manual":
23+
var acc = 0
24+
25+
for i in 1..100_000:
26+
if i mod 2 == 0:
27+
if i mod 4 == 0:
28+
if i mod 8 == 0:
29+
if i mod 16 == 0:
30+
if i mod 32 == 0:
31+
if i mod 64 == 0:
32+
if i mod 128 == 0:
33+
if i mod 256 == 0:
34+
if i mod 512 == 0:
35+
acc.inc i
36+
37+
timeIt "iterrr":
38+
var acc = 0
39+
40+
(1..100_000) |>
41+
filter(x => x mod 2 == 0).
42+
filter(x => x mod 4 == 0).
43+
filter(x => x mod 8 == 0).
44+
filter(x => x mod 16 == 0).
45+
filter(x => x mod 32 == 0).
46+
filter(x => x mod 64 == 0).
47+
filter(x => x mod 128 == 0).
48+
filter(x => x mod 256 == 0).
49+
filter(x => x mod 512 == 0).
50+
each(i):
51+
52+
acc.inc i
53+
54+
timeIt "zero_functional":
55+
var acc = 0
56+
57+
(1..100_000) -->
58+
filter(it mod 2 == 0).
59+
filter(it mod 4 == 0).
60+
filter(it mod 8 == 0).
61+
filter(it mod 16 == 0).
62+
filter(it mod 32 == 0).
63+
filter(it mod 64 == 0).
64+
filter(it mod 128 == 0).
65+
filter(it mod 256 == 0).
66+
filter(it mod 512 == 0).
67+
foreach(acc.inc it)

examples/ulam_seq.nim

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# https://ericnormand.me/issues/purelyfunctional-tv-newsletter-451-signature-driven-development
2+
3+
import std/[tables, unittest]
4+
import ../src/iterrr
5+
6+
# --- helpers
7+
iterator combinations(s: seq[int]): (int, int) =
8+
for i in 0 .. s.high - 1:
9+
for j in i+1 .. s.high:
10+
yield (s[i], s[j])
11+
12+
13+
# --- main
14+
func ulam(n: Natural): seq[int] =
15+
case n:
16+
of 0: @[]
17+
of 1: @[1]
18+
of 2: @[1, 2]
19+
else:
20+
var sequence = ulam 2
21+
22+
for _ in 3 .. n:
23+
let possibleSums =
24+
combinations(sequence) |>
25+
map((a,b) => a+b)
26+
.filter(it > sequence[^1])
27+
.toCountTable()
28+
29+
sequence.add:
30+
possibleSums.pairs |>
31+
filter((n, r) => r == 1)
32+
.map((n, _) => n)
33+
.min()
34+
35+
36+
sequence
37+
38+
# --- tests
39+
suite "Tests":
40+
test "2":
41+
check ulam(2) == @[1, 2]
42+
43+
test "5":
44+
check ulam(5) == @[1, 2, 3, 4, 6]
45+
46+
test "17":
47+
check ulam(17) == @[1, 2, 3, 4, 6, 8, 11, 13, 16, 18, 26, 28, 36, 38, 47,
48+
48, 53]
49+
50+
51+
when isMainModule:
52+
echo ulam(100)

iterrr.nimble

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
# Package
22

3-
version = "0.5.0"
3+
version = "1.0.0"
44
author = "hamidb80"
55
description = "iterate faster. functional style, extensible iterator library"
66
license = "MIT"
77
srcDir = "src"
88

9+
bin = @["iterrr"]
910

1011
# Dependencies
1112

0 commit comments

Comments
 (0)