1
00:00:01,290 --> 00:00:05,633
<v ->And now, it's time for coding challenge number three.</v>

2
00:00:07,380 --> 00:00:08,970
And we are still working

3
00:00:08,970 --> 00:00:11,700
on our football betting application.

4
00:00:11,700 --> 00:00:15,850
Now this time, we have this map down here.

5
00:00:15,850 --> 00:00:19,590
So this one, which contains all the events that happened

6
00:00:19,590 --> 00:00:21,360
during the game.

7
00:00:21,360 --> 00:00:24,370
So the values here are the events themselves,

8
00:00:24,370 --> 00:00:27,680
for example, a goal or a substitution,

9
00:00:27,680 --> 00:00:31,833
and the keys are the minutes, in which the event occurs.

10
00:00:32,790 --> 00:00:37,270
And just notice, that a football game has 90 minutes,

11
00:00:37,270 --> 00:00:39,180
plus some extra time.

12
00:00:39,180 --> 00:00:41,650
So this might be a little bit over 90,

13
00:00:41,650 --> 00:00:43,980
but usually it's always 90 minutes,

14
00:00:43,980 --> 00:00:47,563
in case you're not familiar with this beautiful game.

15
00:00:48,630 --> 00:00:53,020
Anyway, your tasks are to create an array called events,

16
00:00:53,020 --> 00:00:55,410
which will contain all the different game events

17
00:00:55,410 --> 00:00:57,830
that happened during this game.

18
00:00:57,830 --> 00:01:00,983
And that means no duplicates in that array.

19
00:01:01,960 --> 00:01:03,970
Now, after the game has finished,

20
00:01:03,970 --> 00:01:08,970
it was found that the yellow card from minute 64 was unfair.

21
00:01:09,050 --> 00:01:12,810
So please just remove this event from the log.

22
00:01:12,810 --> 00:01:16,260
Next up print dis string to the console.

23
00:01:16,260 --> 00:01:19,000
An event happened on average every nine minutes.

24
00:01:19,000 --> 00:01:23,890
And of course, your task is to calculate this nine minutes,

25
00:01:23,890 --> 00:01:27,473
keeping in mind, that a game has 90 minutes.

26
00:01:28,440 --> 00:01:31,380
Finally, loop over the events,

27
00:01:31,380 --> 00:01:33,320
and then log into the console.

28
00:01:33,320 --> 00:01:36,180
And what's tricky about this, is that you should mark

29
00:01:36,180 --> 00:01:39,010
whether they happened in the first half of the game,

30
00:01:39,010 --> 00:01:40,740
or the second half.

31
00:01:40,740 --> 00:01:43,130
And the second half means,

32
00:01:43,130 --> 00:01:46,003
that it happened after 45 minutes.

33
00:01:46,990 --> 00:01:49,123
So it should look something like this.

34
00:01:50,380 --> 00:01:53,380
So I believe that this challenge is a little bit easier

35
00:01:53,380 --> 00:01:54,760
than the previous one,

36
00:01:54,760 --> 00:01:57,570
and so hopefully you can manage to complete

37
00:01:57,570 --> 00:01:59,320
all of these four tasks.

38
00:01:59,320 --> 00:02:01,463
So I'll see you once you're done.

39
00:02:05,670 --> 00:02:09,160
So, I hope that was fun.

40
00:02:09,160 --> 00:02:12,540
So let's get started immediately with the solution here.

41
00:02:12,540 --> 00:02:16,380
So we should create an array called events,

42
00:02:16,380 --> 00:02:18,720
with the unique events.

43
00:02:18,720 --> 00:02:23,720
So basically, that's the unique values of all of these here.

44
00:02:24,460 --> 00:02:27,100
Now, what are these values here?

45
00:02:27,100 --> 00:02:31,270
They are essentially the values of this map, right?

46
00:02:31,270 --> 00:02:34,660
So, what I'm saying, is that they are

47
00:02:34,660 --> 00:02:39,660
in gameEvents.values.

48
00:02:40,020 --> 00:02:42,010
And we learned about this one

49
00:02:42,010 --> 00:02:44,893
kind of by the end of the last video.

50
00:02:46,870 --> 00:02:49,070
So let's comment out this one here.

51
00:02:49,070 --> 00:02:52,820
And so indeed, we see that this is what contains

52
00:02:52,820 --> 00:02:55,733
the values that we are interested in.

53
00:02:57,260 --> 00:02:58,093
Alright.

54
00:02:59,130 --> 00:03:02,713
So, let's say gameEvents.values,

55
00:03:05,280 --> 00:03:07,510
and this is our starting point,

56
00:03:07,510 --> 00:03:09,870
and now to get the unique values here,

57
00:03:09,870 --> 00:03:14,690
we basically need to create a set, out of this, right?

58
00:03:14,690 --> 00:03:17,183
That's the main use case of sets.

59
00:03:18,580 --> 00:03:23,480
So, new set, but this alone is not going to be enough,

60
00:03:23,480 --> 00:03:24,963
but let's still take a look,

61
00:03:27,860 --> 00:03:28,923
at this for now,

62
00:03:30,760 --> 00:03:32,370
and beautiful.

63
00:03:32,370 --> 00:03:34,770
So, indeed we have a set with the only

64
00:03:34,770 --> 00:03:37,450
four events that happened.

65
00:03:37,450 --> 00:03:40,890
So, there were only goals, substitutions yellow cards

66
00:03:40,890 --> 00:03:42,083
and red cards.

67
00:03:43,030 --> 00:03:47,330
And now to convert us to an array, we do adjust like before.

68
00:03:47,330 --> 00:03:49,090
Create a new array,

69
00:03:49,090 --> 00:03:53,270
and a spread operator to unpack this set,

70
00:03:53,270 --> 00:03:54,863
and then we are done.

71
00:03:56,960 --> 00:04:01,310
Next up, this one is the easiest one,

72
00:04:01,310 --> 00:04:05,963
so it tells us to delete the event from minute 64.

73
00:04:06,900 --> 00:04:09,090
So that's very easy.

74
00:04:09,090 --> 00:04:13,460
So gameEvents.delete,

75
00:04:13,460 --> 00:04:17,530
and now all we have to do is to use that exact key,

76
00:04:17,530 --> 00:04:20,350
and then that event will be gone.

77
00:04:20,350 --> 00:04:24,343
Great. The next one is just as easy I believe.

78
00:04:26,550 --> 00:04:28,903
So let's just grab this from here.

79
00:04:33,757 --> 00:04:38,257
And now we just need to calculate this actual average.

80
00:04:39,150 --> 00:04:40,463
And how do we do that?

81
00:04:41,640 --> 00:04:46,640
So basically, to say that an event happened every X minutes,

82
00:04:47,160 --> 00:04:51,320
we simply need to divide the number of events by 90 minutes.

83
00:04:51,320 --> 00:04:52,923
So the duration of the game.

84
00:04:54,050 --> 00:04:54,910
So, we see here

85
00:04:54,910 --> 00:04:59,910
that we have three, six, nine, eleven events.

86
00:05:00,110 --> 00:05:02,993
So, how can we count that programmatically?

87
00:05:04,120 --> 00:05:07,840
Well, for that we have gameEvents.size, remember?

88
00:05:11,510 --> 00:05:15,150
And now we just divide that by 90,

89
00:05:15,150 --> 00:05:18,730
and with that, we get this weird number

90
00:05:18,730 --> 00:05:22,480
and that's because in fact we need the opposite.

91
00:05:22,480 --> 00:05:23,660
So we need to say

92
00:05:23,660 --> 00:05:28,660
90 minutes divided by how many events there happened,

93
00:05:29,620 --> 00:05:31,640
to say that on average,

94
00:05:31,640 --> 00:05:33,663
something happened every nine minutes.

95
00:05:35,040 --> 00:05:38,050
Now, if we want it to be really specific,

96
00:05:38,050 --> 00:05:41,630
then this game actually lasted 92 minutes.

97
00:05:41,630 --> 00:05:44,183
So, how do we get that value?

98
00:05:46,560 --> 00:05:48,770
So this is just a bonus, Okay?

99
00:05:48,770 --> 00:05:52,310
I didn't expect you to do this one.

100
00:05:52,310 --> 00:05:55,150
So this 92, is essentially the last

101
00:05:55,150 --> 00:05:57,193
of the keys of the map.

102
00:05:58,450 --> 00:06:00,560
I'm sold. Let's get the keys.

103
00:06:00,560 --> 00:06:05,490
So, that's gameEvents.keys.

104
00:06:05,490 --> 00:06:09,033
And as always, we need to convert this to an array.

105
00:06:11,500 --> 00:06:13,943
So, using all the tools that we already learned.

106
00:06:16,040 --> 00:06:17,393
So just to make sure,

107
00:06:19,580 --> 00:06:21,270
indeed it is.

108
00:06:21,270 --> 00:06:23,880
And now we want the last value.

109
00:06:23,880 --> 00:06:26,270
And how can we get the last value?

110
00:06:26,270 --> 00:06:28,210
Do you remember that?

111
00:06:28,210 --> 00:06:31,180
Well, we can use the pop method.

112
00:06:31,180 --> 00:06:34,440
And in the past, we mainly used the pop method,

113
00:06:34,440 --> 00:06:37,540
to simply delete the last element of the array.

114
00:06:37,540 --> 00:06:39,690
But also, back then I told you,

115
00:06:39,690 --> 00:06:42,743
that it also returns, that deleted array.

116
00:06:43,880 --> 00:06:46,280
Or actually that deleted element.

117
00:06:46,280 --> 00:06:49,860
And so, here we can take the advantage of that.

118
00:06:49,860 --> 00:06:52,500
So, this here is an array now,

119
00:06:52,500 --> 00:06:54,883
and so on that, we can call pop.

120
00:06:56,340 --> 00:06:59,640
And so that will take, the last element out of the array

121
00:06:59,640 --> 00:07:00,693
and give it to us.

122
00:07:01,640 --> 00:07:03,100
So that's 92.

123
00:07:03,100 --> 00:07:05,253
And so to make this really accurate,

124
00:07:07,180 --> 00:07:10,293
here we can now say, time.

125
00:07:12,890 --> 00:07:16,710
Okay. And so this, is even better right now,

126
00:07:16,710 --> 00:07:19,850
but again, this is just kind of a bonus

127
00:07:19,850 --> 00:07:23,090
just to show you some more nice little tricks.

128
00:07:23,090 --> 00:07:27,013
Anyway. Now our goal is to loop through the object,

129
00:07:28,510 --> 00:07:30,073
or actually through the map.

130
00:07:34,130 --> 00:07:37,683
And so this is pretty standard now at this point.

131
00:07:40,740 --> 00:07:42,573
Here we are missing the off.

132
00:07:43,500 --> 00:07:46,810
So just like we did in the last video,

133
00:07:46,810 --> 00:07:50,880
and now all we need to do, is to figure out the half.

134
00:07:50,880 --> 00:07:53,823
So if it's the first half, or the second half.

135
00:07:56,050 --> 00:07:59,490
So, what we want to lock to the console is this.

136
00:07:59,490 --> 00:08:02,163
And then so, either a first or second half,

137
00:08:06,230 --> 00:08:07,523
and then the minute,

138
00:08:08,370 --> 00:08:09,593
I believe, let's see.

139
00:08:10,580 --> 00:08:14,423
Yeah. So, the minute and then colon, and then the event.

140
00:08:15,800 --> 00:08:18,860
So let's actually make these here more specific,

141
00:08:18,860 --> 00:08:21,710
so a minute and event.

142
00:08:21,710 --> 00:08:23,760
So that makes it easier to read the code.

143
00:08:25,910 --> 00:08:29,313
So minute and event.

144
00:08:30,280 --> 00:08:33,803
And now here, let's just again, create an external variable,

145
00:08:34,730 --> 00:08:36,380
which I'm going to call the Half.

146
00:08:41,170 --> 00:08:44,210
And let's use the turnery operator here again,

147
00:08:44,210 --> 00:08:48,683
so if the minute is below or equal 45,

148
00:08:50,520 --> 00:08:54,300
then it is the first,

149
00:08:54,300 --> 00:08:57,393
otherwise it's the second,

150
00:08:59,030 --> 00:09:00,680
and that's it.

151
00:09:00,680 --> 00:09:04,753
And, that worked just fine once again. Okay.

152
00:09:07,130 --> 00:09:09,620
So, I hope that made sense,

153
00:09:09,620 --> 00:09:13,010
in case it didn't, then it's always just analyze the code,

154
00:09:13,010 --> 00:09:17,970
or you can also just ask some questions in the Q and A area.

155
00:09:17,970 --> 00:09:21,630
Anyway, we're now almost done with this section.

156
00:09:21,630 --> 00:09:25,550
Next up, all we have left to do is to work with strengths,

157
00:09:25,550 --> 00:09:28,990
which is also a really nice and really interesting topic

158
00:09:28,990 --> 00:09:31,930
that we need in JavaScript all the time.

159
00:09:31,930 --> 00:09:34,783
So make sure to follow me there, right away.

