Skip to content

Commit 1a22db8

Browse files
authored
Merge branch 'main' into Lesson03
2 parents ecd9929 + 904cb45 commit 1a22db8

File tree

8 files changed

+241
-40
lines changed

8 files changed

+241
-40
lines changed

lesson_03/quiz/quiz.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ quiz:
66
anotherone:
77
- $2y$10$8eHSzy3aCu4Ry3LzO9nWCeGpofSxsNVbnF.wCfn3ZADwQ6MEtN/KK
88
- $2y$10$dGB0CGv7.XQC5OqfyY6iXOiJsdVyxU3ve5YE0gt4m2I8P8H13lNXa
9+
ezraquiz:
10+
- $2y$10$fisFjMsmMwzlj3.PELyBNeupdruYROU00dwq296pg0VfHo05SSkta
11+
- $2y$10$.Z44VoTaxQSdPEx7RatO6OVCw1ff6ohS0kZnCrHEcFnElIgkfjP0u
12+
- $2y$10$nCm/E52FKO7DRo4XbpR2vu.HTyAzsDNNZr2dDfYJyblY1oLuGpnPO
913
meikostephens:
1014
- $2y$10$AD1YHmrZZivus7DoM91UMuErNnpi63ueluFs7DcSQSrZbXwDycAOi
1115
- $2y$10$KvnxAYKh3A151RyOOFtOv.wfImRzZMgbBgKy3gyLd1uUSSjHaN.4u
@@ -35,3 +39,7 @@ quiz:
3539
- $2y$10$AEUmg5pH8c2VLZ871//G4eKjwx5cnKH5c2HGTNXdnAPF.3/ZmNap2
3640
- $2y$10$bcTYSI0R/3x0pPHcGPAjautopYx2MD8mJPqf2nXKMJeteoIwJQrQm
3741
- $2y$10$V8pMtwgtZe725nPssrr8kejs4Evh/Vi3ia8RulylOQ8x2YV4tJ4LO
42+
jasonwatson:
43+
- $2y$10$AZtPKyQ.6Bzb.jreO/u.2O3C7XfvYAVpjHzLkuhLVdsX74wc4vXwS
44+
- $2y$10$QbKtEXqpeItigRLAHsn8Qe/06ZpXhKEP1bGPJSFXymsoFw9.04NHy
45+
- $2y$10$tJLScW1OZpOLpVllM65EI.W1QjkSIIBtz.KG8z/s.07RNb7ZWC0um

lesson_03/quiz/src/lesson3.test.ts

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -80,52 +80,57 @@ describe('Lesson3Test', () => {
8080
maybeIt(
8181
'checks multiple choice answers are configured correctly',
8282
async () => {
83-
for (const [providerName, questions] of quizQuestionsByProvider) {
84-
for (const question of questions) {
85-
if (!(question instanceof MultipleChoiceQuizQuestion)) {
86-
continue;
87-
}
88-
89-
// Assert that multiple choice questions have at least one correct answer.
90-
const choices = question.getAnswerChoices();
91-
const areAnswersValid = await Promise.all(
92-
[...choices].map(async (choice) => {
93-
return quizConfig.checkAnswer(
94-
providerName,
95-
question.getQuestionNumber(),
96-
choice,
97-
);
98-
}),
99-
);
100-
101-
expect(areAnswersValid.some((isCorrect) => isCorrect)).toBe(true);
83+
const { providerName, questions } = getQuestionsFromCurrentProvider();
84+
for (const question of questions) {
85+
if (!(question instanceof MultipleChoiceQuizQuestion)) {
86+
continue;
10287
}
88+
89+
// Assert that multiple choice questions have at least one correct answer.
90+
const choices = question.getAnswerChoices();
91+
const areAnswersValid = await Promise.all(
92+
[...choices].map(async (choice) => {
93+
return quizConfig.checkAnswer(
94+
providerName,
95+
question.getQuestionNumber(),
96+
choice,
97+
);
98+
}),
99+
);
100+
101+
expect(areAnswersValid.some((isCorrect) => isCorrect)).toBe(true);
103102
}
104103
},
105104
);
106105

107106
maybeIt('checks for correct answers', async () => {
107+
const { providerName, questions } = getQuestionsFromCurrentProvider();
108+
for (const question of questions) {
109+
const actualAnswer = question.getAnswer();
110+
softExpect(actualAnswer).not.toBe(AnswerChoice.UNANSWERED);
111+
softExpect(
112+
await quizConfig.checkAnswer(
113+
providerName,
114+
question.getQuestionNumber(),
115+
actualAnswer,
116+
),
117+
).toBe(true);
118+
}
119+
});
120+
121+
function getQuestionsFromCurrentProvider(): {
122+
providerName: string;
123+
questions: QuizQuestion[];
124+
} {
108125
const targetProviderName = process.env.PROVIDER_NAME?.trim() || '';
109126

110127
if (!quizQuestionsByProvider.has(targetProviderName)) {
111128
throw new Error(`Unknown provider name: ${targetProviderName}`);
112129
}
113130

114-
for (const [providerName, questions] of quizQuestionsByProvider) {
115-
if (providerName !== process.env.PROVIDER_NAME?.trim()) {
116-
continue;
117-
}
118-
for (const question of questions) {
119-
const actualAnswer = question.getAnswer();
120-
softExpect(actualAnswer).not.toBe(AnswerChoice.UNANSWERED);
121-
softExpect(
122-
await quizConfig.checkAnswer(
123-
providerName,
124-
question.getQuestionNumber(),
125-
actualAnswer,
126-
),
127-
).toBe(true);
128-
}
129-
}
130-
});
131+
return {
132+
providerName: targetProviderName,
133+
questions: quizQuestionsByProvider.get(targetProviderName) || [],
134+
};
135+
}
131136
});
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import {
2+
AnswerChoice,
3+
MultipleChoiceQuizQuestion,
4+
} from 'codedifferently-instructional';
5+
6+
export class EzraQuiz {
7+
getProviderName() {
8+
return 'ezraquiz';
9+
}
10+
11+
makeQuizQuestions() {
12+
return [
13+
EzraQuiz.makeQuestion0(),
14+
EzraQuiz.makeQuestion1(),
15+
EzraQuiz.makeQuestion2(),
16+
];
17+
}
18+
19+
static makeQuestion0() {
20+
return new MultipleChoiceQuizQuestion(
21+
0,
22+
'What is the most played video game in the world?',
23+
new Map([
24+
[AnswerChoice.A, 'GTA V'],
25+
[AnswerChoice.B, 'Call of Duty'],
26+
[AnswerChoice.C, 'World of Warcraft'],
27+
[AnswerChoice.D, 'MineCraft'],
28+
]),
29+
AnswerChoice.UNANSWERED,
30+
); // Replace `UNANSWERED` with the correct answer.
31+
}
32+
33+
static makeQuestion1() {
34+
return new MultipleChoiceQuizQuestion(
35+
1,
36+
'What is the top tourist destination in the world?',
37+
new Map([
38+
[AnswerChoice.A, 'China'],
39+
[AnswerChoice.B, 'France'],
40+
[AnswerChoice.C, 'Italy'],
41+
[AnswerChoice.D, 'Brazil'],
42+
]),
43+
AnswerChoice.UNANSWERED,
44+
); // Replace `UNANSWERED` with the correct answer.
45+
}
46+
47+
static makeQuestion2() {
48+
return new MultipleChoiceQuizQuestion(
49+
2,
50+
'What country has the largest number of ocean borders?',
51+
new Map([
52+
[AnswerChoice.A, 'Canada'],
53+
[AnswerChoice.B, 'India'],
54+
[AnswerChoice.C, 'Australia'],
55+
[AnswerChoice.D, 'United Kingdom'],
56+
]),
57+
AnswerChoice.UNANSWERED,
58+
); // Replace `UNANSWERED` with the correct answer.
59+
}
60+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import {
2+
AnswerChoice,
3+
MultipleChoiceQuizQuestion,
4+
QuizQuestion,
5+
QuizQuestionProvider,
6+
} from 'codedifferently-instructional';
7+
8+
export class JasonWatsonQuiz implements QuizQuestionProvider {
9+
getProviderName(): string {
10+
return 'jasonwatson';
11+
}
12+
13+
makeQuizQuestions(): QuizQuestion[] {
14+
return [
15+
JasonWatsonQuiz.makeQuestion0(),
16+
JasonWatsonQuiz.makeQuestion1(),
17+
JasonWatsonQuiz.makeQuestion2(),
18+
];
19+
}
20+
21+
private static makeQuestion0(): QuizQuestion {
22+
return new MultipleChoiceQuizQuestion(
23+
0,
24+
'How much MB of memory is equal to 1GB of RAM',
25+
new Map<AnswerChoice, string>([
26+
[AnswerChoice.A, '500MB'],
27+
[AnswerChoice.B, '1024MB'],
28+
[AnswerChoice.C, '2048MB'],
29+
[AnswerChoice.D, '1000MB'],
30+
]),
31+
AnswerChoice.UNANSWERED,
32+
); // Replace `UNANSWERED` with the correct answer.
33+
}
34+
35+
private static makeQuestion1(): QuizQuestion {
36+
return new MultipleChoiceQuizQuestion(
37+
1,
38+
'What is Visual Studio Code primarily used for',
39+
new Map<AnswerChoice, string>([
40+
[AnswerChoice.A, 'Graphic Design'],
41+
[AnswerChoice.B, 'Word Processing'],
42+
[AnswerChoice.C, 'Code Editing'],
43+
[AnswerChoice.D, 'Video Prodection'],
44+
]),
45+
AnswerChoice.UNANSWERED,
46+
); // Replace `UNANSWERED` with the correct answer.
47+
}
48+
49+
private static makeQuestion2(): QuizQuestion {
50+
return new MultipleChoiceQuizQuestion(
51+
2,
52+
'What file is commonly used to provide instructions or documenttation in a GitHub repository',
53+
new Map<AnswerChoice, string>([
54+
[AnswerChoice.A, 'README.md'],
55+
[AnswerChoice.B, 'INSTRUCTIONS.txt'],
56+
[AnswerChoice.C, 'GUIDE.pdf'],
57+
[AnswerChoice.D, 'DOCS.docx'],
58+
]),
59+
AnswerChoice.UNANSWERED,
60+
); // Replace `UNANSWERED` with the correct answer.
61+
}
62+
}

lesson_03/quiz/src/quizzes/quizzes.module.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,32 @@
11
import { Module } from '@nestjs/common';
22
import { AnotherQuiz } from './another_quiz.js';
33
import { AnthonyMaysQuiz } from './anthony_mays_quiz.js';
4+
import { JasonWatsonQuiz } from './jason_watson_quiz.js';
5+
import { MeikoStephensQuiz } from './meiko_stephens_quiz.js';
46
import { DavidAdenaikeQuiz } from './david_adenaike_quiz.js';
7+
import { EzraQuiz } from './ezra_quiz.js';
58
import { Jbeyquiz } from './jbeyquiz.js';
69
import { KhaylaSaundersQuiz } from './khayla_quiz.js';
7-
import { MeikoStephensQuiz } from './meiko_stephens_quiz.js';
810
import { MercedesMathewsQuiz } from './mercedes_mathews_quiz.js';
911
import { RasheedMillerQuiz } from './rasheed_miller_quiz.js';
1012
import { JeremiahWingQuiz } from './jeremiah_wing_quiz.js';
1113

1214
export const Quizzes = Symbol.for('Quizzes');
1315

1416
// Add your quiz provider here.
17+
1518
const QUIZ_PROVIDERS = [
1619
AnthonyMaysQuiz,
17-
AnotherQuiz,
18-
MeikoStephensQuiz ,
20+
AnotherQuiz,
21+
MeikoStephensQuiz,
1922
MercedesMathewsQuiz,
2023
Jbeyquiz,
24+
EzraQuiz,
2125
DavidAdenaikeQuiz,
2226
KhaylaSaundersQuiz,
2327
RasheedMillerQuiz,
2428
JeremiahWingQuiz
29+
JasonWatsonQuiz,
2530
];
2631

2732
@Module({

lesson_04/README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,9 @@ Please review the following resources before lecture:
99

1010
## Homework
1111

12-
- TODO(anthonydmays): Provide details
12+
- [ ] Do [coding exercise](#writing-some-code).
13+
- [ ] Do pre-work for [lesson 05](/lesson_05/).
14+
15+
### Writing some code
16+
17+
For this assignment, you will need to write code that determines whether a number is a prime number. You will produce code in two different languages, then provide a 100+ word write up about the similarities and differences between the two implementations you made. An example is provided in the [anthonydmays/](./anthonydmays/) folder.

lesson_04/anthonydmays/README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
## Python implementation
2+
3+
```python
4+
def is_even(number):
5+
return number % 2 == 0
6+
7+
# Example usage:
8+
print(is_even(4)) # Output: True
9+
print(is_even(7)) # Output: False
10+
```
11+
12+
## JavaScript implementation
13+
14+
```javascript
15+
function isEven(number) {
16+
return number % 2 === 0;
17+
}
18+
19+
// Example usage:
20+
console.log(isEven(4)); // Output: true
21+
console.log(isEven(7)); // Output: false
22+
```
23+
24+
## Explanation
25+
26+
The Python implementation uses a function named `is_even` that takes a single argument `number`. It returns `True` if the number is even (i.e., when the remainder of the division of the number by 2 is zero), otherwise, it returns `False`.
27+
28+
The JavaScript implementation uses a function named `isEven` that also takes a single argument `number`. It returns `true` if the number is even (using the same logic as the Python function) and `false` otherwise.
29+
30+
### Differences
31+
32+
1. **Syntax**:
33+
- In Python, functions are defined using the `def` keyword, whereas in JavaScript, the `function` keyword is used.
34+
- Python uses `True` and `False` for boolean values, while JavaScript uses `true` and `false`.
35+
36+
2. **Type Coercion**:
37+
- JavaScript has type coercion, which can sometimes lead to unexpected results if the input is not properly handled. In contrast, Python is more strict with types.
38+
39+
3. **Function Calls**:
40+
- The syntax for calling functions and printing to the console/output is slightly different. Python uses `print()`, while JavaScript uses `console.log()`.

lesson_05/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Lesson 05: Software Development Life Cycle ([Slides](https://code-differently.github.io/code-differently-24-q4/slides/#/lesson_05))
2+
3+
## Pre-work
4+
5+
Please review the following resources before lecture:
6+
7+
### Required
8+
* [Software Development Life Cycle: Explained (Video)](https://www.youtube.com/watch?v=SaCYkPD4_K0)
9+
* [What is the "best way" to develop software applications? (Video)](https://www.youtube.com/watch?v=oNmcX6Gozg0)
10+
11+
### Recommended
12+
* [User stories with examples and a template](https://www.atlassian.com/agile/project-management/user-stories)
13+
14+
## Homework
15+
16+
- TODO(anthonydmays): Write details here.

0 commit comments

Comments
 (0)