Skip to content

Commit b125963

Browse files
committed
Lesson 01
1 parent 3cfe0f2 commit b125963

8 files changed

Lines changed: 524 additions & 1 deletion

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Parcel Sandbox</title>
5+
<meta charset="UTF-8" />
6+
</head>
7+
8+
<body>
9+
<pre>
10+
Напишите программу, которая выводит на экран числа от 1 до 100.
11+
12+
При этом вместо чисел,
13+
- кратных 3, программа должна выводить слово Fizz,
14+
- а вместо чисел, кратных 5 — слово Buzz,
15+
- a число кратно 15, то программа должна выводить слово FizzBuzz
16+
17+
Для вывода данных использовать `console.log` (Например `console.log('FizzBuzz');`)
18+
</pre
19+
>
20+
Начало вывода:
21+
<ol>
22+
<li>1</li>
23+
<li>2</li>
24+
<li>Fizz</li>
25+
<li>4</li>
26+
<li>Buzz</li>
27+
<li>Fizz</li>
28+
<li>7</li>
29+
<li>8</li>
30+
<li>Fizz</li>
31+
<li>Buzz</li>
32+
<li>11</li>
33+
<li>Fizz</li>
34+
<li>13</li>
35+
<li>14</li>
36+
<li>FizzBuzz</li>
37+
<li>...</li>
38+
</ol>
39+
40+
<a href="https://javascript.ru/basic/syntax-switch-for" target="_blank"
41+
>Краткая справка по конструкциям языка</a
42+
>
43+
44+
<hr />
45+
46+
<a
47+
href="https://gist.github.com/vvscode/5b5eec5bb5270de3ac27a3e0298430d9"
48+
target="_blank"
49+
>
50+
Краткие заметки в помощь
51+
</a>
52+
53+
<script src="src/index.js"></script>
54+
</body>
55+
</html>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "otus-fizzbuzz",
3+
"version": "1.0.0",
4+
"description": "Basic fizzBuzz practice sandbox",
5+
"main": "index.html",
6+
"scripts": {
7+
"start": "parcel index.html --open",
8+
"build": "parcel build index.html"
9+
},
10+
"dependencies": {},
11+
"devDependencies": {
12+
"@babel/core": "7.2.0",
13+
"parcel-bundler": "^1.6.1"
14+
},
15+
"keywords": [
16+
"otus"
17+
]
18+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"infiniteLoopProtection": false,
3+
"hardReloadOnChange": true,
4+
"view": "browser"
5+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
export function getCorrectCallsArgs() {
2+
return [
3+
[1],
4+
[2],
5+
["Fizz"],
6+
[4],
7+
["Buzz"],
8+
["Fizz"],
9+
[7],
10+
[8],
11+
["Fizz"],
12+
["Buzz"],
13+
[11],
14+
["Fizz"],
15+
[13],
16+
[14],
17+
["FizzBuzz"],
18+
[16],
19+
[17],
20+
["Fizz"],
21+
[19],
22+
["Buzz"],
23+
["Fizz"],
24+
[22],
25+
[23],
26+
["Fizz"],
27+
["Buzz"],
28+
[26],
29+
["Fizz"],
30+
[28],
31+
[29],
32+
["FizzBuzz"],
33+
[31],
34+
[32],
35+
["Fizz"],
36+
[34],
37+
["Buzz"],
38+
["Fizz"],
39+
[37],
40+
[38],
41+
["Fizz"],
42+
["Buzz"],
43+
[41],
44+
["Fizz"],
45+
[43],
46+
[44],
47+
["FizzBuzz"],
48+
[46],
49+
[47],
50+
["Fizz"],
51+
[49],
52+
["Buzz"],
53+
["Fizz"],
54+
[52],
55+
[53],
56+
["Fizz"],
57+
["Buzz"],
58+
[56],
59+
["Fizz"],
60+
[58],
61+
[59],
62+
["FizzBuzz"],
63+
[61],
64+
[62],
65+
["Fizz"],
66+
[64],
67+
["Buzz"],
68+
["Fizz"],
69+
[67],
70+
[68],
71+
["Fizz"],
72+
["Buzz"],
73+
[71],
74+
["Fizz"],
75+
[73],
76+
[74],
77+
["FizzBuzz"],
78+
[76],
79+
[77],
80+
["Fizz"],
81+
[79],
82+
["Buzz"],
83+
["Fizz"],
84+
[82],
85+
[83],
86+
["Fizz"],
87+
["Buzz"],
88+
[86],
89+
["Fizz"],
90+
[88],
91+
[89],
92+
["FizzBuzz"],
93+
[91],
94+
[92],
95+
["Fizz"],
96+
[94],
97+
["Buzz"],
98+
["Fizz"],
99+
[97],
100+
[98],
101+
["Fizz"],
102+
["Buzz"],
103+
];
104+
}
105+
106+
export function getNormalizedSource(fn) {
107+
return Function.prototype.toString
108+
.apply(fn)
109+
.replace(/\s+/g, " ")
110+
.replace(/(\w)\s+\(/g, "$1(")
111+
.replace(/(\w)\s+{/g, "$1{")
112+
.replace(/}\s+(\w)/g, "}$1");
113+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Напишите программу, которая выводит на экран числа от 1 до 100.
3+
* При этом вместо чисел,
4+
* - кратных 3, программа должна выводить слово Fizz,
5+
* - а вместо чисел, кратных 5 — слово Buzz,
6+
* - a число кратно 15, то программа должна выводить слово FizzBuzz
7+
* Для вывода данных использовать `console.log` (Например `console.log('FizzBuzz');`)
8+
*
9+
* Краткая справка по конструкциям языка:
10+
* https://javascript.ru/basic/syntax-switch-for
11+
* https://gist.github.com/vvscode/5b5eec5bb5270de3ac27a3e0298430d9
12+
*/
13+
export function fizzBuzz() {
14+
// ваш код пишите здесь
15+
console.log("FizzBuzz");
16+
}
17+
18+
fizzBuzz();
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { fizzBuzz } from "./index.js";
2+
import { getCorrectCallsArgs, getNormalizedSource } from "./..js";
3+
4+
// Решить задачу без использования конструкций if/else
5+
const SHOULD_NOT_USE_IF = false;
6+
// Решить задачу без использования тернарного оператора
7+
const SHOULD_NOT_USE_THERNARY = false;
8+
// Решить задачу без использования логических && и ||
9+
const SHOULD_NOT_USE_AND_OR = false;
10+
11+
describe("fizzBuzz", () => {
12+
jest.spyOn(console, "log");
13+
14+
beforeEach(() => {
15+
jest.resetAllMocks();
16+
});
17+
18+
it("is a function", () => expect(typeof fizzBuzz).toBe("function"));
19+
20+
it("prints values using console.log", () => {
21+
fizzBuzz();
22+
expect(console.log).toHaveBeenCalled();
23+
});
24+
25+
it("prints exactly 100 items", () => {
26+
fizzBuzz();
27+
expect(console.log).toHaveBeenCalledTimes(100);
28+
});
29+
30+
describe("proper results", () => {
31+
getCorrectCallsArgs().forEach((args, index) =>
32+
it(`is expected to see ${args} at position #${index + 1}`, () => {
33+
fizzBuzz();
34+
expect(console.log.mock.calls[index]).toEqual(args);
35+
})
36+
);
37+
});
38+
39+
SHOULD_NOT_USE_IF &&
40+
describe("Should not use if/else constructions", () => {
41+
["if", "else"].forEach((stopWord) =>
42+
it(`should not use ${stopWord}`, () => {
43+
expect(getNormalizedSource(fizzBuzz).includes(stopWord)).toBe(false);
44+
})
45+
);
46+
});
47+
48+
SHOULD_NOT_USE_THERNARY &&
49+
describe("Should not use thernary operator (? :)", () => {
50+
["?", ":"].forEach((stopWord) =>
51+
it(`should not use ${stopWord}`, () => {
52+
expect(getNormalizedSource(fizzBuzz).includes(stopWord)).toBe(false);
53+
})
54+
);
55+
});
56+
57+
SHOULD_NOT_USE_AND_OR &&
58+
describe("Should not use logical operators &&/||", () => {
59+
["&&", "||"].forEach((stopWord) =>
60+
it(`should not use ${stopWord}`, () => {
61+
expect(getNormalizedSource(fizzBuzz).includes(stopWord)).toBe(false);
62+
})
63+
);
64+
});
65+
});

lessons/lesson01/ht.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
Зачем: Сформулировать свои ожидания и цели (в идеале по SMART), сразу получить обрантную связь относительно того, на сколько ожидания могут быть закрыты курсом. Познакомиться с продуктивным подходом к задаванию вопросов, чтобы общение по учебе было эффективным (это же применимо к рабочим контекстам).
3+
---
4+
5+
## Знакомство
6+
7+
> Сформулирует цели и задачи поступления на курс, опишет свои ожидания от обучения. Познакомится с правилами "Хорошего тона" для продуктивного общения на технические темы
8+
9+
1. Развернуто (от 1000 символов) написать о следующих вещах
10+
11+
- цель поступления на курс
12+
- ожидания от курса
13+
- как вы поймете, что курс был полезен (по каким конкретным критериям)
14+
15+
2. Написать конспект/чеклист/план к действию по мотивам статьи https://www.opennet.ru/docs/RUS/smart_question/
16+
17+
И то и другое отправить в "Чат с преподавателем"
18+
19+
**Важно!**
20+
Если у вас нет опыта в JS, приступите к самостоятельному изучению видеокурса ["Javascript-для начинающих разработчиков"](https://otus.ru/online/online-js/). Если у вас нет к нему доступа, пожалуйста, напишите запрос на help@otus.ru. Вам нужно освоить его до начала модуля "Базовый JavaScript. Работа с GIT и настройка окружения".
21+
22+
### Критерии приемки
23+
24+
- Описаны цели - 1 балл
25+
- Описаны ожидания - 1 балл
26+
- Описаны критерии оценки пользы курса - 1 балл
27+
- Описания даны в четком формате ("сенсорно очевидные"), чтобы другой человек глядя на описание мог сказать, достигнуто/выполнено или нет - по 1 баллу за цели / ожидания / критерии
28+
- Описание развернутое (больше 1000 символов) - 1 балл
29+
30+
- Написан конспект к статье - 1 балл
31+
- Конспект содержит от 5 пунктов - 1 балл
32+
-Задание сдано в срок - 1 балл
33+
34+
**Задание принято** от 9 баллов

0 commit comments

Comments
 (0)