forked from Ada-C14/ride-share
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworksheet.rb
More file actions
150 lines (137 loc) · 4.29 KB
/
worksheet.rb
File metadata and controls
150 lines (137 loc) · 4.29 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
driver_trips = [
{DR0001: [{"3rd Feb 2016": [{cost: 10, rider_id: "RD0003", rating: 3},
{cost: 30, rider_id: "RD0015", rating: 4}]},
{"5th Feb 2016": [{cost: 45, rider_id: "RD0003", rating: 2}]}]},
{DR0002: [{"3rd Feb 2016": [{cost: 25, rider_id: "RD0073", rating: 5}]},
{"4th Feb 2016": [{cost: 15, rider_id: "RD0013", rating: 1}]},
{"5th Feb 2016": [{cost: 35, rider_id: "RD0066", rating: 3}]}]},
{DR0003: [{"4th Feb 2016": [{cost: 5, rider_id: "RD0066", rating: 5}]},
{"5th Feb 2016": [{cost: 50, rider_id: "RD0003", rating: 2}]}]},
{DR0004: [{"3rd Feb 2016": [{cost: 5, rider_id: "RD0022", rating: 5}]},
{"4th Feb 2016": [{cost: 10, rider_id: "RD0022", rating: 4}]},
{"5th Feb 2016": [{cost: 20, rider_id: "RD0073", rating: 5}]}]}
]
def average_rating(array)
rating_hash = {}
array.each do |driver_hash|
rating_array = []
driver_hash.each do |driver, date_array|
date_array.each do |date_hash|
date_hash.each do |_date, ride_array|
ride_array.each do |ride_data|
rating_array.push(ride_data[:rating])
end
end
end
rating_hash[driver] = (rating_array.sum / rating_array.length.to_f).round(1)
end
end
return rating_hash
end
def nice_average(hash)
string = ""
hash.each do |key, value|
string += "\nDriver #{key}: #{value} rating"
end
return "Average ratings:" + string + "\n\n"
end
def total_rides(array)
ride_hash = {}
array.each do |driver_array|
rides = 0
driver_array.each do |driver, ride_array|
ride_array.each do |date_hash|
date_hash.each do |_date, ride_array|
rides += ride_array.count
end
end
ride_hash[driver] = rides
end
end
return ride_hash
end
def nice_rides(hash)
string = ""
hash.each do |key, value|
string += "\nDriver #{key}: #{value} rides"
end
return "Total Rides:" + string + "\n\n"
end
def total_earnings(array)
driver_earnings = {}
array.each do |driver_hash|
earnings = 0
driver_hash.each do |driver, date_array|
date_array.each do |date_hash|
date_hash.each do |date, ride_array|
ride_array.each do |ride_data|
earnings += ride_data[:cost]
end
end
end
driver_earnings[driver] = earnings
end
end
return driver_earnings
end
def nice_earnings(hash)
string = ""
hash.each do |key, value|
string += "\nDriver #{key}: $#{sprintf("%.2f", value)}"
end
return "Total earnings:" + string + "\n\n"
end
def max_driver(hash)
return hash.max_by { |_driver, value| value }
end
def superlative_earner(array)
return "Driver #{array[0]} earned the most with $#{sprintf("%.2f", array[1])} in earnings.\n\n"
end
def superlative_driver(array)
return "Driver #{array[0]} has the highest average rating of #{sprintf("%.1f", array[1])}.\n"
end
def days_by_driver(array)
earn_by_day = []
array.each do |driver_hash|
another_temp_hash = {}
driver_hash.each do |driver, date_array|
temp_hash = {}
date_array.each do |date_hash|
earnings = 0
date_hash.each do |date, ride_array|
ride_array.each do |ride_data|
earnings += ride_data[:cost]
end
temp_hash[date] = earnings
end
end
another_temp_hash[driver] = temp_hash
earn_by_day.push(another_temp_hash)
end
end
return earn_by_day
end
def best_day(array)
best_day = {}
array.each do |driver_hash|
driver_hash.each do |driver, date_array|
best_day[driver] = date_array.max_by { |key, value| value }
end
end
return best_day
end
def nice_best_day(hash)
string = ""
hash.each do |key, value|
string += "\nDriver #{key}'s best day was #{value[0]}, when they earned $#{value[1]}"
end
return "\nEach Driver's Best Day:" + string + "\n"
end
puts "\nBelow is ride information for drivers DR0001 - DR0004"
puts "for trips performed from Feb 3, 2016 through Feb 5, 2016\n\n"
puts nice_rides(total_rides(driver_trips))
puts nice_earnings(total_earnings(driver_trips))
puts nice_average(average_rating(driver_trips))
puts superlative_earner(max_driver(total_earnings(driver_trips)))
puts superlative_driver(max_driver(average_rating(driver_trips)))
puts nice_best_day(best_day(days_by_driver(driver_trips)))