forked from TheAlgorithms/Python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshuffled_array.py
71 lines (60 loc) · 2.18 KB
/
shuffled_array.py
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
# To create a shuffled array. Generate a pseudo random number
# Swap that number with str_square_seed other element in the list run this
# swapping len(Array) times to get desired shuffled array
# To Understand more of random number generation
# follow https://en.wikipedia.org/wiki/Lagged_Fibonacci_generator
import doctest
import time
class Solution:
# """
# >>> Solution().__init__(array=[1,2,3])
# Traceback (most recent call last):
# ....
# TypeError: __init__() missing 1 required positional argument: 'array'
# """
def __init__(self, array: list) -> None:
self.arr = array
self.seed = int(str(time.time())[-1:-5:-1])
# generating a 4 digit number randomly
# by taking the last four numbers of the system generated time
# pseudo random number generator
def pseudo_random_number_generator(self, num: int) -> int:
"""
>>> Solution([56]).pseudo_random_number_generator(1)
0
"""
if num == 1:
return 0
self.seed *= self.seed
str_square_seed = str(self.seed)
if str_square_seed != "0":
self.seed = int(str_square_seed[-1:-5:-1])
else:
str_square_seed = str_square_seed[:] + str(len(self.arr) // 2)
if int(str_square_seed[-1]) < num:
return int(str_square_seed[-1])
return self.pseudo_random_number_generator(num)
def reset(self) -> list:
# it will return the original given array
"""
>>> Solution([-7, 0, 4, -56.7]).reset()
[-7, 0, 4, -56.7]
"""
return self.arr
def shuffle(self) -> list:
# generated a pseudo number for each traversal
# and swapped the traversing value with that number
"""
>>> Solution([2]).shuffle()
[2]
"""
temp = self.arr.copy()
for i in range(len(self.arr)):
a = self.pseudo_random_number_generator(len(self.arr))
temp[a], temp[i] = temp[i], temp[a]
return temp
if __name__ == "__main__":
solution_class = Solution([18, 2, 3, 4, 5, 7, 8, 10, 21])
shuffled_arr = solution_class.shuffle()
print(shuffled_arr)
doctest.testmod()