-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_slideshow.py
More file actions
74 lines (59 loc) · 2.01 KB
/
create_slideshow.py
File metadata and controls
74 lines (59 loc) · 2.01 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
from score import pair_score
from tqdm import tqdm
class CreateSlideshowNaive:
def __init__(self, slides):
self.slides = slides
self.slideshow = []
self.algoscore = 0
def check_edges(self, slide):
# Score front edge add
frontscore = pair_score(self.slideshow[0], slide)
# Score back edge add
backscore = pair_score(self.slideshow[-1], slide)
# Add slide to slideshow where most score
if frontscore > backscore:
return "f", frontscore
else:
return "b", backscore
def add_to_edges(self):
best_score = 0
best_slide = None
best_slide_loc = ""
for slide in self.slides:
loc, score = self.check_edges(slide)
if score > best_score:
best_score = score
best_slide_loc = loc
best_slide = slide
# Quit early if no slide was found to add to score
if not best_slide:
return False
# Add best score to total
self.algoscore += best_score
# Add slide to slideshow
if best_slide_loc == "f":
self.slideshow.insert(0, best_slide)
else:
self.slideshow.append(best_slide)
# Remove slide from slides
self.slides.remove(best_slide)
# Keep on going
return True
def create(self):
# Take initial random slide
# Loop through all remaining slides and find best first pair
slide = self.slides.pop()
self.slideshow.append(slide)
best_score = 0
for other_slide in self.slides:
score = pair_score(slide, other_slide)
if score > best_score:
next_slide = other_slide
self.slideshow.append(next_slide)
self.slides.remove(next_slide)
go = True
for i in tqdm(range(len(self.slides))):
if go:
go = self.add_to_edges()
else:
return self.slideshow, self.algoscore