1
00:00:01,350 --> 00:00:03,100
<v Jonas>So I showed you some ideas</v>

2
00:00:03,100 --> 00:00:05,730
and some tools to solve problems

3
00:00:05,730 --> 00:00:08,560
and to debug your applications.

4
00:00:08,560 --> 00:00:10,330
And so now it's your turn

5
00:00:10,330 --> 00:00:13,563
to put all of that into practice on your own.

6
00:00:15,280 --> 00:00:19,150
And so here is your coding challenge for this section.

7
00:00:19,150 --> 00:00:23,670
So given an array of forecast at maximum temperatures,

8
00:00:23,670 --> 00:00:26,370
to thermometer that we've been working about

9
00:00:26,370 --> 00:00:28,900
throughout this section should display

10
00:00:28,900 --> 00:00:32,240
a string with these forecasted temperatures.

11
00:00:32,240 --> 00:00:35,820
So for example, if we have this array,

12
00:00:35,820 --> 00:00:38,270
which is our first test data here,

13
00:00:38,270 --> 00:00:41,380
then the string that it will print should be this.

14
00:00:41,380 --> 00:00:46,380
So three dots, 10, 17 degrees Celsius in one days.

15
00:00:46,870 --> 00:00:48,620
So that's the 17 here.

16
00:00:48,620 --> 00:00:53,620
Then again, three dots then 21 degrees Celsius in two days.

17
00:00:54,040 --> 00:00:57,690
So this 21, is this 21 and then three dots,

18
00:00:57,690 --> 00:01:00,311
23 degrees in three days.

19
00:01:00,311 --> 00:01:05,022
So in one, two and three days at 10, again, three dots.

20
00:01:05,022 --> 00:01:05,855
Okay.

21
00:01:05,855 --> 00:01:09,070
And here, you don't need to use this exact sign,

22
00:01:09,070 --> 00:01:11,100
if you can find it on your keyboard.

23
00:01:11,100 --> 00:01:13,453
I know it was a bit hard to find for me.

24
00:01:14,360 --> 00:01:17,120
So what you should do is to create a function

25
00:01:17,120 --> 00:01:22,120
called "printForecast," which takes in an array called 'arr'

26
00:01:22,300 --> 00:01:23,940
and then locks the string,

27
00:01:23,940 --> 00:01:27,630
just like this one here to the console.

28
00:01:27,630 --> 00:01:28,780
Okay.

29
00:01:28,780 --> 00:01:33,090
And call this function for these two test values.

30
00:01:33,090 --> 00:01:37,130
And to softwares, you can use the problem solving framework

31
00:01:37,130 --> 00:01:40,780
that we have just been talking about in the section.

32
00:01:40,780 --> 00:01:43,420
So try to understand the problem first

33
00:01:43,420 --> 00:01:45,410
by asking the right questions

34
00:01:45,410 --> 00:01:48,360
and then break it into sub-problems.

35
00:01:48,360 --> 00:01:51,560
And I'm not saying that this is gonna be easy.

36
00:01:51,560 --> 00:01:52,760
And for me the main goal

37
00:01:52,760 --> 00:01:55,830
is not even that you achieve the result,

38
00:01:55,830 --> 00:01:59,140
but really that you start thinking about the problem

39
00:01:59,140 --> 00:02:01,430
and that you try as good as possible

40
00:02:01,430 --> 00:02:04,170
to break it up into sub-problems.

41
00:02:04,170 --> 00:02:05,940
And of course there are many ways

42
00:02:05,940 --> 00:02:08,070
of asking the right questions

43
00:02:08,070 --> 00:02:10,980
and of breaking this up into sub problems.

44
00:02:10,980 --> 00:02:14,170
So there is no hard ways of doing this stuff.

45
00:02:14,170 --> 00:02:17,150
So just try your best to take all the time that you need.

46
00:02:17,150 --> 00:02:19,433
And I will see you here once you are ready.

47
00:02:23,290 --> 00:02:24,730
Okay.

48
00:02:24,730 --> 00:02:28,410
So let me show you how I would have done it.

49
00:02:28,410 --> 00:02:30,523
And let's just close this terminal here.

50
00:02:31,560 --> 00:02:34,150
Because remember that this live connection

51
00:02:34,150 --> 00:02:37,760
actually keeps running without the terminal opened.

52
00:02:37,760 --> 00:02:39,843
So let's just grab from up here,

53
00:02:42,860 --> 00:02:44,223
this here.

54
00:02:45,090 --> 00:02:47,620
So as you see, I'm a little bit lazy.

55
00:02:47,620 --> 00:02:49,743
I don't like to type so much,

56
00:02:50,780 --> 00:02:52,563
so I'd just keep reusing stuff.

57
00:02:53,780 --> 00:02:56,910
So we need to understand the problem first.

58
00:02:56,910 --> 00:03:01,300
So let's look at that example string here.

59
00:03:01,300 --> 00:03:03,060
And so one part of the problem

60
00:03:03,060 --> 00:03:06,030
is definitely that this array here,

61
00:03:06,030 --> 00:03:09,090
was basically broken up in three pieces

62
00:03:09,090 --> 00:03:13,053
and then the separator is these three dots.

63
00:03:13,910 --> 00:03:16,180
Let's write that here.

64
00:03:16,180 --> 00:03:20,467
Array, transformed to string,

65
00:03:23,960 --> 00:03:27,823
separated by three dots.

66
00:03:29,300 --> 00:03:33,310
Then we can also ask what these numbers here are.

67
00:03:33,310 --> 00:03:34,400
So we already know that

68
00:03:34,400 --> 00:03:37,780
these here are of course coming from the array,

69
00:03:37,780 --> 00:03:39,030
but what is this?

70
00:03:39,030 --> 00:03:42,233
So one days, two days and three days.

71
00:03:43,900 --> 00:03:48,073
So what is the X days?

72
00:03:48,980 --> 00:03:51,660
And the answer to that is basically

73
00:03:51,660 --> 00:03:55,700
it is the current index of the array plus one.

74
00:03:55,700 --> 00:03:58,700
So it would be weird to say that 17 degrees

75
00:03:58,700 --> 00:04:01,320
in zero days, because this is the forecast.

76
00:04:01,320 --> 00:04:03,810
And so this is for the next day

77
00:04:03,810 --> 00:04:06,083
and then in two days and in three days.

78
00:04:08,290 --> 00:04:12,243
So answer index plus one.

79
00:04:13,970 --> 00:04:14,803
Okay.

80
00:04:14,803 --> 00:04:17,550
So I think we understood the problem now,

81
00:04:17,550 --> 00:04:21,640
because I think that it's quite simple in this case.

82
00:04:21,640 --> 00:04:25,930
So let's now break this up into sub-problems.

83
00:04:25,930 --> 00:04:28,270
And I would say that the main problem here,

84
00:04:28,270 --> 00:04:31,403
will be to transform this array into a string.

85
00:04:36,000 --> 00:04:39,720
Because that's essentially what we will have to do.

86
00:04:39,720 --> 00:04:43,190
Also, each of these elements here will be transformed

87
00:04:43,190 --> 00:04:46,890
to a string with these degrees Celsius.

88
00:04:46,890 --> 00:04:51,890
So let's just transform each element

89
00:04:52,180 --> 00:04:55,740
to string with Celsius.

90
00:04:55,740 --> 00:04:58,350
And I don't even remember where this is,

91
00:04:58,350 --> 00:04:59,833
so I'm just copying it here.

92
00:05:04,520 --> 00:05:07,950
Then we also need to account for the current day.

93
00:05:07,950 --> 00:05:12,847
So string needs to contain day.

94
00:05:14,750 --> 00:05:19,000
And again, that is the index plus one.

95
00:05:19,000 --> 00:05:22,980
And finally, we also need to add the three dots

96
00:05:22,980 --> 00:05:27,980
between elements and start and end of string.

97
00:05:32,260 --> 00:05:35,490
So that looks like a lot of work,

98
00:05:35,490 --> 00:05:40,330
but actually it is not as hard as it looks from here.

99
00:05:40,330 --> 00:05:44,800
So let's start by creating two arrays here.

100
00:05:44,800 --> 00:05:47,900
So for test data one and two.

101
00:05:47,900 --> 00:05:50,163
Actually grab all of this in one go.

102
00:05:57,430 --> 00:05:58,393
Data two.

103
00:05:59,560 --> 00:06:00,690
All right.

104
00:06:00,690 --> 00:06:03,680
And now let's tackle these problems here.

105
00:06:03,680 --> 00:06:04,870
Okay.

106
00:06:04,870 --> 00:06:08,350
So if the string would always have the same length,

107
00:06:08,350 --> 00:06:11,210
so if it was always just be three days,

108
00:06:11,210 --> 00:06:12,570
then it would be very simple.

109
00:06:12,570 --> 00:06:16,890
We could just basically hard coat the string, right?

110
00:06:16,890 --> 00:06:20,913
We could just do something like data one,

111
00:06:21,800 --> 00:06:26,403
at position zero, and then the degrees Celsius,

112
00:06:29,960 --> 00:06:33,760
then dot, dot, dot, and so on and so forth.

113
00:06:33,760 --> 00:06:35,350
Right?

114
00:06:35,350 --> 00:06:37,443
So here I'm missing this, of course.

115
00:06:42,420 --> 00:06:45,430
So we could do this and there's still some value

116
00:06:45,430 --> 00:06:49,253
in first actually trying to write this.

117
00:06:50,620 --> 00:06:55,620
So this is how it would look like data zero and one and two,

118
00:06:56,750 --> 00:06:59,963
and let's indeed lock this to the console,

119
00:07:03,320 --> 00:07:04,620
give it a safe.

120
00:07:04,620 --> 00:07:07,270
And so actually already the string

121
00:07:07,270 --> 00:07:11,230
looks exactly what we had here, right?

122
00:07:11,230 --> 00:07:13,363
But of course, this is not the way to go.

123
00:07:14,570 --> 00:07:16,610
Because then here in data two,

124
00:07:16,610 --> 00:07:20,830
we have a longer array.

125
00:07:20,830 --> 00:07:22,760
And we want to write one function

126
00:07:22,760 --> 00:07:24,673
that works for all the arrays.

127
00:07:25,530 --> 00:07:27,303
So that print forecast.

128
00:07:28,700 --> 00:07:31,090
And so of course we need a more dynamic way

129
00:07:31,090 --> 00:07:33,000
of creating this string.

130
00:07:33,000 --> 00:07:34,260
But still, as I said,

131
00:07:34,260 --> 00:07:36,820
there is some value in having done that

132
00:07:36,820 --> 00:07:38,520
because it will help us figure out

133
00:07:38,520 --> 00:07:41,200
how we can arrive at a solution.

134
00:07:41,200 --> 00:07:44,470
So print forecast is a function

135
00:07:44,470 --> 00:07:46,460
which takes in an array 'arr'

136
00:07:49,030 --> 00:07:50,933
and now let's see what we have to do.

137
00:07:52,500 --> 00:07:54,730
So if we have an array

138
00:07:54,730 --> 00:07:57,590
and we have to do multiple operations on it,

139
00:07:57,590 --> 00:07:59,760
we will as always use a loop.

140
00:07:59,760 --> 00:08:02,143
So let's start with that baseline.

141
00:08:03,470 --> 00:08:06,730
So let i equals zero.

142
00:08:06,730 --> 00:08:09,480
And this part is not always the same,

143
00:08:09,480 --> 00:08:13,720
so i less than arr dot length

144
00:08:14,670 --> 00:08:16,623
and i plus, plus.

145
00:08:17,960 --> 00:08:20,830
Okay, but now what are we gonna do?

146
00:08:20,830 --> 00:08:25,800
So how will we basically transform the array into a string?

147
00:08:25,800 --> 00:08:27,310
And there are so many ways

148
00:08:27,310 --> 00:08:29,150
in which we could achieve this

149
00:08:29,150 --> 00:08:30,940
and actually in which we could solve

150
00:08:30,940 --> 00:08:32,470
this whole problem here,

151
00:08:32,470 --> 00:08:34,450
especially if you did some research

152
00:08:34,450 --> 00:08:36,410
to arrive at a solution here,

153
00:08:36,410 --> 00:08:39,210
but I will just go with a solution

154
00:08:39,210 --> 00:08:41,830
using the tools that we already used.

155
00:08:41,830 --> 00:08:43,330
So remember what we did,

156
00:08:43,330 --> 00:08:46,320
when we calculated the average of a number.

157
00:08:46,320 --> 00:08:48,190
We started by adding all the values

158
00:08:48,190 --> 00:08:50,850
of the array using a loop, right.

159
00:08:50,850 --> 00:08:52,330
And we kept adding them,

160
00:08:52,330 --> 00:08:56,780
to an accumulator variable that was called sum, right.

161
00:08:56,780 --> 00:09:00,150
So just to illustrate that sum started at zero,

162
00:09:00,150 --> 00:09:04,270
and let's say we had an array of two, three, four.

163
00:09:04,270 --> 00:09:05,600
And so in the first iteration,

164
00:09:05,600 --> 00:09:08,220
that sum was then updated to two.

165
00:09:08,220 --> 00:09:09,480
Then in the second iteration,

166
00:09:09,480 --> 00:09:14,080
it was updated to two plus three equals five.

167
00:09:14,080 --> 00:09:18,100
And then in the last iteration, it was updated to five,

168
00:09:18,100 --> 00:09:23,100
which was the current sum plus four equal nine.

169
00:09:23,170 --> 00:09:25,430
And so that's how we end up with the sum

170
00:09:25,430 --> 00:09:27,290
of all of these values.

171
00:09:27,290 --> 00:09:29,080
And now with the string,

172
00:09:29,080 --> 00:09:32,400
we can actually do the exact same thing.

173
00:09:32,400 --> 00:09:34,940
So here we will also have an accumulator,

174
00:09:34,940 --> 00:09:38,743
a variable essentially, which is gonna be called string.

175
00:09:39,810 --> 00:09:41,400
So let string.

176
00:09:41,400 --> 00:09:43,720
And instead of starting with zero,

177
00:09:43,720 --> 00:09:46,220
we will start with the equivalent of zero,

178
00:09:46,220 --> 00:09:49,900
but for strings, which is the empty string.

179
00:09:49,900 --> 00:09:52,430
So empty string has nothing.

180
00:09:52,430 --> 00:09:54,260
And then in each iteration,

181
00:09:54,260 --> 00:09:57,140
we will simply add to that string,

182
00:09:57,140 --> 00:10:00,020
the current value of the array.

183
00:10:00,020 --> 00:10:01,840
So let's do that.

184
00:10:01,840 --> 00:10:03,693
String equals,

185
00:10:05,660 --> 00:10:07,660
the current value of string,

186
00:10:07,660 --> 00:10:12,660
plus array at the current position.

187
00:10:13,100 --> 00:10:17,430
And also let's already add this symbol here

188
00:10:17,430 --> 00:10:21,310
and for that let's wrap this here into a template literal.

189
00:10:21,310 --> 00:10:22,720
And so I'm selecting this

190
00:10:22,720 --> 00:10:27,060
and then I can just hit the template literal diabetic once

191
00:10:27,060 --> 00:10:28,573
and it will wrap all of that.

192
00:10:30,000 --> 00:10:35,000
So then this and this, and then the degrees Celsius.

193
00:10:37,200 --> 00:10:39,760
And now all we need to do is to log that string

194
00:10:40,830 --> 00:10:41,890
to the console.

195
00:10:41,890 --> 00:10:44,223
So just as was asked.

196
00:10:45,810 --> 00:10:49,760
Which takes in and logs the string to the console.

197
00:10:49,760 --> 00:10:53,720
So we could have added that actually as one sub problem,

198
00:10:53,720 --> 00:10:56,660
even though it's a really small one.

199
00:10:56,660 --> 00:11:00,413
Log string to console.

200
00:11:01,300 --> 00:11:04,580
And so let's give it a try now.

201
00:11:04,580 --> 00:11:09,580
I'm saving and nothing happened.

202
00:11:09,680 --> 00:11:13,763
And that's because we didn't call the function.

203
00:11:14,660 --> 00:11:18,863
So let's print forecast with data one,

204
00:11:20,950 --> 00:11:23,840
and here we go.

205
00:11:23,840 --> 00:11:28,360
So 70 in degrees, 21 degrees, 23 degrees.

206
00:11:28,360 --> 00:11:32,690
And that already starts looking like what we have here.

207
00:11:32,690 --> 00:11:37,000
So essentially we already completed the most difficult part,

208
00:11:37,000 --> 00:11:40,630
so of transforming the array into a string.

209
00:11:40,630 --> 00:11:43,270
And again, this was similar to adding multiple numbers

210
00:11:43,270 --> 00:11:44,820
into one bigger number.

211
00:11:44,820 --> 00:11:47,850
Here what we did was to add multiple strings

212
00:11:47,850 --> 00:11:52,070
to a bigger string that kept growing after each iteration.

213
00:11:52,070 --> 00:11:54,353
And if you want to make sure to really understand this,

214
00:11:54,353 --> 00:11:56,680
then you can always use the debugger

215
00:11:56,680 --> 00:11:58,860
and go through this loop step by step

216
00:11:58,860 --> 00:12:02,360
and see this string variable here are growing

217
00:12:02,360 --> 00:12:04,393
as the loop goes on and on.

218
00:12:05,450 --> 00:12:09,740
So we already did this part also and this part.

219
00:12:09,740 --> 00:12:12,210
Now let's tackle this one.

220
00:12:12,210 --> 00:12:15,590
So it needs to also contain the day.

221
00:12:15,590 --> 00:12:17,823
So what does that look like?

222
00:12:19,130 --> 00:12:22,440
So 23 degrees in three days.

223
00:12:22,440 --> 00:12:25,610
So in one days, two days and three days,

224
00:12:25,610 --> 00:12:27,733
so that's not too hard.

225
00:12:30,670 --> 00:12:33,330
And now we already understood

226
00:12:33,330 --> 00:12:36,163
that this had to be the current index plus one.

227
00:12:37,050 --> 00:12:41,253
So the current index is i plus one.

228
00:12:42,280 --> 00:12:44,710
So in one days.

229
00:12:44,710 --> 00:12:47,740
So in the first iteration is gonna be zero plus one,

230
00:12:47,740 --> 00:12:52,740
then one plus one, and then two plus one, give it a safe.

231
00:12:54,140 --> 00:12:56,790
And that starting to look really close

232
00:12:56,790 --> 00:12:59,010
to what we need in the end.

233
00:12:59,010 --> 00:13:01,960
but now we are missing the separator dots.

234
00:13:01,960 --> 00:13:05,040
So how do you think we can achieve those?

235
00:13:05,040 --> 00:13:09,740
Well, in fact, these dots are simply something that repeat

236
00:13:09,740 --> 00:13:12,943
after each of these strings here, right?

237
00:13:13,860 --> 00:13:17,243
So we have this value and then dot dot dot.

238
00:13:18,630 --> 00:13:21,343
So we have to value dot, dot, dot.

239
00:13:23,130 --> 00:13:25,240
We just need one more space here,

240
00:13:25,240 --> 00:13:29,403
to create this nice separation that we have.

241
00:13:30,690 --> 00:13:34,750
And so now we're almost done, okay.

242
00:13:34,750 --> 00:13:37,410
So actually this is not correct here,

243
00:13:37,410 --> 00:13:40,010
because it's missing the, in one days in two days

244
00:13:40,010 --> 00:13:41,363
and so on and so forth.

245
00:13:42,250 --> 00:13:46,253
But let's just compare it here with the original.

246
00:13:47,820 --> 00:13:49,820
And so all that is left

247
00:13:49,820 --> 00:13:52,253
is these three dots at the beginning.

248
00:13:53,120 --> 00:13:57,930
And so, we can just add them at the end.

249
00:13:57,930 --> 00:14:00,210
So we cannot put them here, right?

250
00:14:00,210 --> 00:14:02,890
Because then we would have too many dots.

251
00:14:02,890 --> 00:14:05,250
So that's a lot of dots

252
00:14:05,250 --> 00:14:08,480
and that's not what we were looking for.

253
00:14:08,480 --> 00:14:10,710
So instead we keep it like this

254
00:14:10,710 --> 00:14:13,410
and then as we log it to the console,

255
00:14:13,410 --> 00:14:16,380
we simply add the dots here at the beginning.

256
00:14:16,380 --> 00:14:17,453
So dot, dot, dot,

257
00:14:18,560 --> 00:14:21,890
plus the string, give it a safe

258
00:14:21,890 --> 00:14:26,260
and yes, that's the solution of our problem.

259
00:14:26,260 --> 00:14:27,470
Great.

260
00:14:27,470 --> 00:14:29,770
Can just improve this here a little bit again,

261
00:14:29,770 --> 00:14:32,420
by using the plus equal operator

262
00:14:32,420 --> 00:14:34,530
and then get rid of this part,

263
00:14:34,530 --> 00:14:38,223
make it a little bit more short and more efficient maybe.

264
00:14:39,160 --> 00:14:43,220
And so, yeah, that's it.

265
00:14:43,220 --> 00:14:46,690
That's the result of this coding challenge.

266
00:14:46,690 --> 00:14:50,070
And again, you could have done it in so many different ways,

267
00:14:50,070 --> 00:14:53,690
but what I really wanted you to achieve was to understand

268
00:14:53,690 --> 00:14:57,630
the problem and to break it up into small sub-problems.

269
00:14:57,630 --> 00:15:00,040
if you did that, well, then my goal

270
00:15:00,040 --> 00:15:04,000
with this whole section I would say is achieved.

271
00:15:04,000 --> 00:15:05,960
So hope you liked this one,

272
00:15:05,960 --> 00:15:08,680
even though it was a little bit more theoretical,

273
00:15:08,680 --> 00:15:11,250
but I think it's important to also have a section

274
00:15:11,250 --> 00:15:14,420
like this in a big web development course

275
00:15:14,420 --> 00:15:15,580
because soft skills,

276
00:15:15,580 --> 00:15:18,590
like the ones that I just showed you

277
00:15:18,590 --> 00:15:21,773
are also very important for your success.

