-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathsource-code.js
More file actions
144 lines (120 loc) · 3.89 KB
/
source-code.js
File metadata and controls
144 lines (120 loc) · 3.89 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
// Code for testing challenge solutions
let testSummation = () => {
return sum(5, 2) == 7
}
let testCounter = () => {
return JSON.stringify(counter()) == JSON.stringify([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
}
let testOddCounter = () => {
return JSON.stringify(oddCounter()) == JSON.stringify([1, 3, 5, 7, 9])
}
let testCalculateSum = () => {
return calculateSum() == 55
}
let testAverage = () => {
return JSON.stringify(average([1, 2, 3])) == 2
}
let testFindMax = () => {
return findMax([1, 3, 5, 6, 4, 3, 2]) == 6
}
let testReverseArr = () => {
return JSON.stringify(reverseArr([2, 5, 7, 3])) == JSON.stringify([3, 7, 5, 2])
}
// Code for defining Challenges
// Note: The way its currently set up is that the student needs to solve
// each problem in order before moving forward.
challenges = [
{
render: true,
correct: testSummation(),
description: "Coding Challenge #1: Summation"
},
{
render: testSummation(),
correct: testCounter(),
description: "Coding challenge #2: Print numbers from 1 to 10"
},
{
render: testCounter(),
correct: testOddCounter(),
description: "Coding challenge #3: Print the odd numbers less than 10"
},
{
render: testOddCounter(),
correct: testCalculateSum(),
description: "Coding challenge #4: Calculate the sum of numbers from 1 to 10"
},
{
render: testCalculateSum(),
correct: testAverage(),
description: "Coding challenge #5: Calculate the average of the numbers in an array of numbers"
},
{
render: testAverage(),
correct: testFindMax(),
description: "Coding challenge #6: Find the maximum number in an array of numbers"
},
{
render: testFindMax(),
correct: testReverseArr(),
description: "Coding challenge #7: Find the maximum number in an array of numbers"
}
]
// Code For rendering Answers on the page and checking solutions
let correctReply = "Nice Job!"
let incorrectReply = "Not quite, try again!"
let responseFor = (answer) => {
return answer.correct ? correctReply : incorrectReply
}
let finishAssesment = () => {
let challenge = document.getElementsByClassName("challenge-container")[0]
challenge.innerHTML = `
<div>Great Job! You've completed all JS challenges!</div>
`
}
let isChallengeComplete = () => {
let challenge = document.getElementsByClassName("check-solution-btn")[0]
let challengeId = parseInt(challenge.dataset.id)
return challengeId == challenges.length - 1 && challenges[challenges.length - 1].correct == true
}
let renderChallengeDescription = () => {
let challengeId = getCompletedChallengeNumber();
let challengeDescriptionContainer = document.getElementById("challenge-description")
challengeDescriptionContainer.innerHTML = challenges[challengeId].description
}
let renderChallengeAnswer = (challengeId) => {
let challengeAnswerContainer = document.getElementById("challenge-answer")
challengeAnswerContainer.innerHTML = responseFor(challenges[challengeId])
}
let checkSolution = () => {
let done = isChallengeComplete();
if (done) {
return finishAssesment();
} else {
let challenge = document.getElementsByClassName("check-solution-btn")[0]
let challengeId = parseInt(challenge.dataset.id)
let studentAnswer = challenges[challengeId]
if (studentAnswer.correct) {
challengeId += 1
challenge.dataset.id = challengeId
}
renderChallengeDescription()
renderChallengeAnswer(challengeId)
}
}
let setSubmittionId = () => {
let challengeSection = document.getElementsByClassName("check-solution-btn")[0]
challengeSection.dataset.id = getCompletedChallengeNumber()
}
let getCompletedChallengeNumber = () => {
for (let i = 0; i < challenges.length; i++) {
if (challenges[i].correct == false && challenges[i].render == true) {
return i
}
}
return challenges.length - 1
}
window.addEventListener('DOMContentLoaded', () => {
setSubmittionId();
renderChallengeDescription();
});