initial commit
This commit is contained in:
1 file changed
+38
Executable
+38
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3.11
|
||||
import random
|
||||
|
||||
# Here is an example of an orderd playlist with the artists of the songs.
|
||||
# Some artists have more songs in the playlist than others, and currently
|
||||
# they're all grouped together
|
||||
examplePlaylist: list[str] = [
|
||||
"Artist A", "Artist B", "Artist B", "Artist C", "Artist D", "Artist E", "Artist E", "Artist E", "Artist E",
|
||||
"Artist F", "Artist F", "Artist F", "Artist G", "Artist H", "Artist H", "Artist I", "Artist J", "Artist J",
|
||||
]
|
||||
|
||||
# This method to shuffle selects one item randomly and then appends it to a new list
|
||||
# This method is not effective, when one item in an array appears more frequently, it
|
||||
# is more likely to be picked in a row and will appear in a sequence with itself in the
|
||||
# 'shuffled' list.
|
||||
def shuffle_one(pl: list[str]) -> list[str]:
|
||||
s: list = []
|
||||
for _ in range(len(pl)):
|
||||
i = pl[random.randint(0, len(pl)) - 1]
|
||||
pl.remove(i)
|
||||
s.append(i)
|
||||
return s
|
||||
|
||||
# This algorithm is much better, it applies randomness to every element, selecting a random
|
||||
# spot to shuffle with every time, this enables items previously shuffled to once again be
|
||||
# shuffles to make a seemingly more 'random' shuffle.
|
||||
def shuffle_two(pl: list[str]) -> list[str]:
|
||||
for i in range(len(pl)):
|
||||
swap_idx = random.randrange(i, len(pl))
|
||||
pl[i], pl[swap_idx] = pl[swap_idx], pl[i]
|
||||
return pl
|
||||
|
||||
def main() -> None:
|
||||
print(shuffle_one(list(examplePlaylist)))
|
||||
print(shuffle_two(list(examplePlaylist)))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in new issue
Block a user