-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathnumbers.py
More file actions
114 lines (87 loc) · 2.97 KB
/
numbers.py
File metadata and controls
114 lines (87 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import math
import random
from .stream import Stream
class NumberStream(Stream):
@staticmethod
def integers():
'''
Returns an infinite stream of integer from 0 to infinity
:return: the infinite stream
'''
return NumberStream(Stream.iterate(0, lambda i: i + 1))
@staticmethod
def odds():
'''
Returns an infinite stream of odds number from 0 to infinity
:return: the infinite stream
'''
return NumberStream(Stream.iterate(1, lambda i: i + 2))
@staticmethod
def evens():
'''
Returns an infinite stream of evens number from 0 to infinity
:return: the infinite stream
'''
return NumberStream(Stream.iterate(0, lambda i: i + 2))
@staticmethod
def primes():
'''
Returns an infinite stream of primes number from 2 to infinity
:return: the infinite stream
'''
def prime_generator():
yield 2
primes = [2]
actual = 1
while True:
actual += 2
for prime in primes:
if actual % prime == 0:
break
else:
primes.append(actual)
yield actual
return NumberStream(prime_generator())
@staticmethod
def randint(lower, upper):
'''
Returns an infinite stream of random integer in range [a, b], including both end points.
:param int lower: min value for random numbers
:param int upper: max value for random numbers
:return: the infinite random stream
'''
return NumberStream(Stream.generate(lambda: random.randint(lower, upper)))
@staticmethod
def random():
'''
Returns an infinite stream of random numbers in range [0, 1], including both end points.
:param int lower: min value for random numbers
:param int upper: max value for random numbers
:return: the infinite random stream
'''
return NumberStream(Stream.generate(random.random))
def __init__(self, _stream):
if isinstance(_stream, Stream):
self.iterable = _stream.iterable
else:
self.iterable = _stream
def smallerThan(self, maximum):
return self.filter(lambda x: x < maximum)
def smallerOrEqualThan(self, maximum):
return self.filter(lambda x: x <= maximum)
def greaterThan(self, minimum):
return self.filter(lambda x: x > minimum)
def greaterOrEqualThan(self, minimum):
return self.filter(lambda x: x >= minimum)
def multipleOf(self, number):
return self.filter(lambda x: x % number == 0)
def square(self):
return self.pow(2)
def cube(self):
return self.pow(3)
def pow(self, power):
return self.map(lambda x: x ** power)
def sqrt(self):
return self.map(math.sqrt)
def log(self):
return self.map(math.log)