Обучение языку c#

Формула программиста

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса  999  499 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 16 рублей.

Первый взнос - 499 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 499 (вместо 999) рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 499 руб./30 дней + 500 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE В начале было поле 00:09:49
1 тест
33 чел. ★ 4.9 Free
  Мы начинаем «МикроШахматы на JavaScript».
В начале было поле.
И было на поле 64 клетки.

Цель курса - запрограммировать все правила игры в шахматы.
На выходе мы получим скрипт для игры в шахматы для двух игроков, с соблюдением всех правил.

На этом уроке мы выведем на экран доску, используя JavaScript и HTML.

В каждом уроке кроме видео есть фото-инструкция по изменению кода.
 
7696. Vladimir Falejev
4814. Дмитрий
6203. Николай Миролюбов
6203. Николай Миролюбов
2 Координатное поле 00:08:53
28 чел. ★ 5 $
  На этом уроке мы увеличим клетки нашей доски,
чтобы они были одинаковыми в любой ситуации.
Уберём зазор между клетками.
Так же мы раскрасим доску по правилам игры,
чтобы правая-нижняя клетка была светлой.
Добавим координаты слева и снизу доски,
а для полноты картины добавил заголовок.
 
791. Валерий Жданов
4004. Елена
10670. Сергей Соколов
11323. Vladimir Fedotov
3 Шахматные буквы 00:09:05
1 тест
28 чел. ★ 5 $
  На этом уроке мы отобразим «шахматные» буквы на доске.
Для этого мы создадим массив, заполним его буквами,
которые кодируют фигуры по нотации FEN
и сделаем их отображение в таблице.
 
10558. Иван Воронин
7119. Новопашин Владимир
7119. Новопашин Владимир
11323. Vladimir Fedotov
4 Фигуры на доске 00:07:13
1 тест
28 чел. ★ 5 $
  На этом уроке наши фигуры обретут свой облик,
для этого нам потребуется вспомогательная функция figure_to_html(),
которая будет возвращать облик нужной нам фигуры в формате HTML-Unicode.
Поиграемся с размером и цветом фигур.
 
5649. Максим Лапшинов
30514. Tom
4210. Дмитрий
7696. Vladimir Falejev
5 Светофор для фигур 00:08:35
27 чел. ★ 5 $
  На этом уроке мы будем отмечать,
какими фигурами можно ходить и куда можно ходить.
Пока реализуем простое правило:
можно ходить на пустую клетку или клетку врага.
Для этого мы добавим ещё один массив inf,
для хранения возможных ходов выбранной фигуры.
Так же мы доработаем функцию show_map (),
чтобы она отображала подсказки из массива inf.
 
7119. Новопашин Владимир
21921. Грачья
21921. Грачья
25450. MaxB
6 Фигурная перекличка 00:07:49
2 теста
26 чел. ★ 5 $
  На прошлом уроке мы статично отобразили
выбранную фигуру и поля, куда эта фигура может пойти.
Теперь наша задача реализовать это программно.
Для этого нам понадобится переменная для хранения цвета хода и
реализуем функции: mark_moves_from(), can_move_from() и get_color().
Протестируем результат изменив цвет хода.
 
10157. Кирилл Лебедев
10494. Алексей В.
24765. Anatoli
21921. Грачья
7 Шахматные выборы 00:11:58
26 чел. ★ 5 $
  На этом уроке мы реализуем выбор фигуры для хода
через клик левой кнопкой мышки по нужной клетке.
Для этого мы сформируем вызов функции click_box()
с координатами клетки, по которой было нажато.
 
6925. Артём
23687. Игорь Бойко
4210. Дмитрий
791. Валерий Жданов
8 Завершение хода 00:07:30
1 тест
24 чел. ★ 5 $
  На этом уроке мы напишем функцию click_box_to(),
для движения фигуры в указанную клетку -
нужно будет поменять место фигуры в матрице map.
Ещё напишем функцию turn_move() для передачи права хода.
 
11589. Yefim
7238. Константин
8275. Tekashnik
6925. Артём
9 ЧЕТВЕРТЬФИНАЛЬНЫЙ УРОК без видео
24 чел. ★ 5 $
  Поздравляю, четверть курса позади.
Предлагаю немножко передохнуть и развлечься.
Напиши, чему ты научился за первую часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.
Разыграй любую партию и запиши на видео.
Можно без голоса.
 
4210. Дмитрий
8275. Tekashnik
791. Валерий Жданов
10157. Кирилл Лебедев
10 Шахматная бюрократия 00:10:07
1 тест
24 чел. ★ 5 $
  На этом уроке мы создадим функцию, которая будет проверять,
может ли фигура сходить так, как её попросят - то есть
реализовать алгоритмы передвижения для каждой фигуры
 
10494. Алексей В.
10670. Сергей Соколов
9752. chokayes
8275. Tekashnik
11 Кто есть кто? 00:10:59
1 тест
22 чел. ★ 5 $
  На этом уроке мы реализуем функцию is_correct_move() и
добавим в неё проверку всех возможных фигур.
Так же добавим заглушки корректности хода для каждой фигуры.
Протестируем функции, найдём ошибку в коде и исправим её.
 
25450. MaxB
23687. Игорь Бойко
10365. Rita
7238. Константин
12 Лошадью ходи! 00:07:32
1 тест
22 чел. ★ 5 $
  На этом уроке мы реализуем самую простую функцию:
is_correct_knight_move() - конь ходит буквой Г :)
 
17947. Dmitry Sinitsin
17947. Dmitry Sinitsin
36285. Александр Шлома
6925. Артём
13 Королевские шаги 00:06:00
21 чел. ★ 5 $
  На этом уроке мы реализуем функцию is_correct_king_move()
Потом немного повеселимся.
Увидим самый быстрый мат и отрывок из к/ф "Джентльмены удачи".
 
8275. Tekashnik
23687. Игорь Бойко
10670. Сергей Соколов
7238. Константин
14 Горизонтальная вертикаль 00:08:04
1 тест
21 чел. ★ 5 $
  На этом уроке мы реализуем функцию:
is_correct_rook_move()
Ладья ходит по вертикали или горизонтали.
 
10670. Сергей Соколов
10157. Кирилл Лебедев
23687. Игорь Бойко
25450. MaxB
15 Не стой на пути! 00:09:09
21 чел. ★ 5 $
  На этом уроке мы доработаем функцию is_correct_rook_move().
Добавим проверку, находится ли кто-то на пути фигуры.
Так же мы добавим функцию on_map() для
проверки нахождения координат в пределах доски.
 
23687. Игорь Бойко
4210. Дмитрий
36285. Александр Шлома
11589. Yefim
16 Слоновья тропа 00:08:23
21 чел. ★ 5 $
  На этом уроке мы реализуем функцию:
is_correct_bishop_move(), она будет похожа на
is_correct_rook_move(), но с небольшими изменениями.
Также оптимизируем циклы, добавим проверку границ доски.
Добавим функцию is_empty(), которая будет
проверять доступность хода на эту клетку.
 
4004. Елена
10494. Алексей В.
7238. Константин
6925. Артём
17 Дорогу Королеве! 00:04:03
1 тест
21 чел. ★ 5 $
  На этом уроке мы ещё раз скопируем алгоритм проверки хода в функцию is_correct_queen_move().
С третьей попытки мы догадаемся вообще убрать проверку на корректность значений delta_x/delta_y.
Ваше задание - предложить свой вариант выделения общего алгоритма из эти трёх функций - is_correct_move_queen/bishop/rook().
 
30514. Tom
4210. Дмитрий
791. Валерий Жданов
11589. Yefim
18 Мелочь пузатая 00:13:23
1 тест
21 чел. ★ 5 $
  На этом уроке мы порефакторим наш код,
выделив общий алгоритм из трёх функций:
is_correct_move_queen/bishop/rook().
 
7238. Константин
9752. chokayes
11589. Yefim
10494. Алексей В.
19 ПОЛУФИНАЛЬНЫЙ УРОК без видео
21 чел. ★ 5 $
  Поздравляю, половина курса позади.
Предлагаю немножко передохнуть и развлечься.
Напиши, чему ты научился за вторую часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.
Разыграй любую партию и запиши на видео.
Можно без голоса.
 
7119. Новопашин Владимир
25450. MaxB
10157. Кирилл Лебедев
10494. Алексей В.
20 Пешкины законы 00:09:37
19 чел. ★ 5 $
  На этом уроке мы поговорим о пешках:
+ чем она отличается от других фигур?
+ какие у неё правила?
+ какие у неё исключения?

Мы реализуем функцию is_correct_pawn_move()
и заглушки для вспомогательных функций:
is_correct_white_pawn_move() и is_correct_black_pawn_move().

Лирическое задание - найти/нарисовать интересную картинку о пешках.
 
4814. Дмитрий
7238. Константин
4004. Елена
11589. Yefim
21 Судьба пешки 00:13:42
1 тест
19 чел. ★ 5 $
  На этом уроке мы воспользуемся сайтом draw.io
для рисования схемы алгоритма пешки.

На схеме отобразим следующие правила для пешек:
1. направление зависит от цвета;
2. положение может быть на горизонталях 1-6;
3. могут ходить только прямо и только на одну клетку;
4. с 1/6 горизонтали могут ходить на две клетки через пустую;
5. рубят наискосок на одно поле вперёд-влево/вправо;
6. могут рубить на битое поле (взятие на проходе);
7. на последней линии превращается в слона/коня/ладью/ферзя своего цвета.
Превращение пешки будет реализовано в функции завершения хода box_click_to().
 
4004. Елена
23687. Игорь Бойко
30514. Tom
36285. Александр Шлома
22 Пешка на охоте 00:08:54
1 тест
19 чел. ★ 5 $
  На этом уроке мы реализуем часть алгоритма
для функции is_correct_white_pawn_move()
на основе схемы, созданной на прошлом уроке.
Добавим заглушку для функции is_pawn_passant().
 
36285. Александр Шлома
17947. Dmitry Sinitsin
17947. Dmitry Sinitsin
7119. Новопашин Владимир
23 Пешка в сапогах 00:09:56
19 чел. ★ 5 $
  На этом уроке мы доработаем алгоритм для функции
is_correct_white_pawn_move() на основе блок-схемы.
Так же подкорректируем нашу схему.
 
8275. Tekashnik
23687. Игорь Бойко
6925. Артём
30514. Tom
24 Взятие на проходе шустрых пешек 00:08:50
1 тест
19 чел. ★ 5 $
  На этом уроке мы реализуем алгоритм взятия на проходе.
Для этого мы доработаем ранее созданную заглушку is_pawn_passant().
Добавим вспомогательные переменные для хранения координат
возможного взятия на проходе, они нам пригодится на следующем уроке.
 
4814. Дмитрий
4004. Елена
36285. Александр Шлома
9752. chokayes
25 Радар для быстрых пешек 00:11:48
1 тест
18 чел. ★ 5 $
  -- Куда торопимся?
-- Почему превышаем?
-- Покажите ваши координатики...
-- Пройдёмте, пешечка, в отделение...


На этом уроке мы доработаем функцию click_box_to(),
добавив проверку прыгнула ли пешка через клетку.прыгнула, то мы сохраняем координаты,
по которым её можно поймать.
Вынесем написанный алгоритм в отдельную функцию check_pawn_attack()
После чего мы уберём пешку противника в отделение для сбитых фигур.
 
8275. Tekashnik
9752. chokayes
25450. MaxB
4814. Дмитрий
26 Афроамериканская пешка 00:10:32
18 чел. ★ 5 $
  На этом уроке мы реализуем правила движения
чёрных пешек по аналогии с белыми.

Для начала мы перенесём общую проверку
из функций is_correct_*_pawn_move()
в функцию is_correct_pawn_move().

Доработаем функцию is_pawn_passant().
Объединим функции is_correct_*_pawn_move()
в общую функцию is_correct_sign_pawn_move().
 
8275. Tekashnik
11589. Yefim
36285. Александр Шлома
24765. Anatoli
27 Пешкина мечта 00:07:44
1 тест
18 чел. ★ 5 $
  На этом уроке мы исправим ошибку в функции click_box_to(),
чтобы чёрные пешки тоже могли съедать после взятия на проходе.
После чего мы перенесём рабочий код в функцию check_pawn_attack().
 
6925. Артём
17947. Dmitry Sinitsin
17947. Dmitry Sinitsin
36285. Александр Шлома
28 Волшебное превращение пешки 00:14:53
18 чел. ★ 5 $
  На этом уроке мы реализуем алгоритм превращения пешки.
Для этого нам понадобится новая функция promote_pawn().
Выбор фигуры реализуем через функцию prompt().
Добавим проверку, чтобы можно было выбирать только разрешённые фигуры.
Доработаем функцию click_box_to() - добавим вызов
превращения пешки если это необходимо.
 
11589. Yefim
4814. Дмитрий
10558. Иван Воронин
10670. Сергей Соколов
29 ТРЕТИЙ ЧЕТВЕРТЬФИНАЛЬНЫЙ УРОК без видео
1 тест
18 чел. ★ 5 $
  Поздравляю, три четверти курса позади.
Предлагаю немножко передохнуть.

Напиши, чему ты научился за третью часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.

Приложи к отчёту любую шахматную карикатуру.
 
11589. Yefim
11589. Yefim
36285. Александр Шлома
8275. Tekashnik
30 Случайный шах 00:08:07
17 чел. ★ 5 $
  На этом уроке мы реализуем функцию is_check(),
чтобы король не ходил на клетку, которая под боем.

На время теста вы уберём все пешки и добавим функцию is_check()
с генерируемой случайностью шаха для всех фигур на поле.
 
11589. Yefim
7119. Новопашин Владимир
18783. Andrew
25450. MaxB
31 Возврат хода 00:12:52
1 тест
17 чел. ★ 5 $
  На этом уроке мы опишем псевдокод для функции is_check().
Добавим две глобальных переменных: move_figure и to_figure.
Так же добавим функции: move_figure() и back_figure().
Модернизируем функции click_box_to() и promote_pawn()
для поддержки новой системы передвижения фигур по доске.
 
36285. Александр Шлома
10494. Алексей В.
8275. Tekashnik
7238. Константин
32 Король в розыске 00:10:18
1 тест
17 чел. ★ 5 $
  На этом уроке мы добавим в функцию is_check() вызов move_figure() и back_figure().
Реализуем вспомогательную функцию find_figure() и поэкспериментируем.
 
4210. Дмитрий
36285. Александр Шлома
4004. Елена
10558. Иван Воронин
33 Служба безопасности короля 00:12:58
1 тест
17 чел. ★ 5 $
  На этом уроке мы продолжим дорабатывать функцию is_check().
Переберём все ходы противника, чтобы исключить
из возможных ходов короля клетки, которые под боем.
 
10670. Сергей Соколов
7119. Новопашин Владимир
8275. Tekashnik
8275. Tekashnik
34 Шах вперёд - шаг назад 00:14:09
1 тест
16 чел. ★ 5 $
  На этом уроке мы выделим часть кода из функции is_check()
в новую функцию: is_check_after_move(), которая
будет вызываться для проверки возможности хода.
Сама же функция is_check() останется независимой
и может вызываться тогда, когда нам будет нужно.
 
4004. Елена
11589. Yefim
4210. Дмитрий
36285. Александр Шлома
35 Информационная панель 00:13:07
1 тест
16 чел. ★ 5 $
  На этом уроке мы выведем информацию о текущем состоянии игры.
Для этого мы реализуем функцию show_info(),
которая будет вызываться при каждой генерации доски.

Так же нам надо будет реализовать вспомогательные
функции: is_checkmate() и is_stalemate().

Доработаем функцию mark_moves_from() для подсчёта
количества возможных ходов текущего игрока.

Оптимизируем определение очерёдности хода.
 
30514. Tom
7238. Константин
10494. Алексей В.
6925. Артём
36 Подвиг безымянной пешки 00:15:36
1 тест
16 чел. ★ 5 $
  На этом уроке мы добавим проверку на
пешечный подвиг по спасению короля:
может ли она взять на проходе вражескую
пешку, которая угрожает королю шахом.

Для этого вынесем проверку взятия на проходе
в отдельную функцию move_pawn_attack().

Для корректной работы кода нам понадобится
ещё одна функция back_pawn_attack().
 
18783. Andrew
17947. Dmitry Sinitsin
7238. Константин
8275. Tekashnik
37 ФИНИШНАЯ ПРЯМАЯ без видео
1 тест
16 чел. ★ 5 $
  Быстро сказка сказывается, не быстро дело делается.
Наша программа практически завершена,
осталось самую малость - научить короля прятаться за ладьёй,
это таинство называется "рокировка".

Ваше задание.
1. Найти/нарисовать хорошую картинку на тему "Рокировки" и приложить её к отчёту.
2. Выписать все правила, при которых возможна рокировка.


 
6925. Артём
11589. Yefim
25450. MaxB
10494. Алексей В.
38 Правила рокировки 00:09:54
1 тест
16 чел. ★ 5 $
  На этом уроке мы обсудим правила рокировки короля.
Так же обсудим необходимы действия для её совершения.
Найти интересную картинку на тему рокировки.
 
10494. Алексей В.
18783. Andrew
18783. Andrew
10558. Иван Воронин
39 Флаг над замком 00:14:39
1 тест
16 чел. ★ 5 $
  На этом уроке мы создадим 4 глобальных флага:
can_white_castle_left, can_white_castle_right,
can_black_castle_left, can_black_castle_right.

Реализуем вспомогательную функцию update_castle_flags().
 
6925. Артём
10494. Алексей В.
7119. Новопашин Владимир
7238. Константин
40 Король всемогущий 00:12:13
1 тест
16 чел. ★ 5 $
  На этом уроке мы добавим проверку для короля,
может ли он сделать рокировку - can_castle().

Добавим заглушки для вспомогательных функций:
can_white_castle() и can_black_castle().
 
7119. Новопашин Владимир
18783. Andrew
7238. Константин
8275. Tekashnik
41 Рокировка под шахом 00:11:13
1 тест
16 чел. ★ 5 $
  На этом уроке мы доработаем функцию can_castle(),
добавив проверку на шах и оптимизируем is_check().
 
11589. Yefim
6925. Артём
4210. Дмитрий
4004. Елена
42 Белолевая рокировка 00:14:23
1 тест
16 чел. ★ 5 $
  На этом уроке мы отрефакторим функцию can_castle(),
добавив заглушки вспомогательных функций can_white/black_cl/cr().
 
8275. Tekashnik
25450. MaxB
7119. Новопашин Владимир
4210. Дмитрий
43 Рокировка на все времена 00:08:36
1 тест
16 чел. ★ 5 $
  На этом уроке мы реализуем функции can_white/black_cl/cr().
 
10494. Алексей В.
8275. Tekashnik
7119. Новопашин Владимир
7238. Константин
44 Ладейный паркур 00:10:07
1 тест
16 чел. ★ 5 $
  На этом уроке мы реализуем функцию move_castling_rook(),
чтобы при рокировке наши ладьи тоже перемещались.
 
4814. Дмитрий
11589. Yefim
6925. Артём
4210. Дмитрий
45 ФИНАЛЬНЫЙ УРОК без видео
14 чел. ★ 5 $
  Поздравляю с завершением курса!

Оставь, пожалуйста, отзыв об этом курсе.

Запиши видеообзор созданной программы.

Напиши, что ещё можно добавить в эту программу.
 
36285. Александр Шлома
4814. Дмитрий
4004. Елена
25450. MaxB
46 VIP урок - Минное поле 00:11:37
14 чел. ★ 5 $
  На этом уроке мы реализуем функцию mark_attack(),
чтобы отображать все битые поля на шахматной доске,
куда может атаковать противник сразу после вашего хода.
Доработаем функцию show_map() для отображения полей.
 
7238. Константин
10670. Сергей Соколов
4004. Елена
11589. Yefim
47 VIP урок - Бестолковый интеллект 00:10:38
13 чел. ★ 5 $
  На этом уроке мы реализуем функцию doRandMove(),
для случайного выбор какой фигурой пойти,
Так же столкнём два "рандомайзера" на шахматной доске.

 
10558. Иван Воронин
10670. Сергей Соколов
30514. Tom
25450. MaxB
  Итого:   47 видеоуроков 7 час. 14 мин.
32 теста
13 чел. ★ 5  
  Финалисты:   Иван Воронин,   Алексей В.,   Tekashnik,   Артём,   Сергей Соколов,   Yefim,   Константин,   Елена,   Дмитрий,   Andrew,   Tom,   Александр Шлома,   MaxB .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Записывать партию
Трудности: Запрограммировать запись партии
Курс Микрошахматы на Javascript получился не просто хорошим, а сказочно шикарным! До курса мне казалось, что программирование шахмат это заоблачные высоты. И хотя Я понимаю, то, что сделано - это еще не игра в полном смысле этого слова, но фундамент заложен основательный. Почти из каждого урока я узнавал о каком-то новом программистском приеме и почти каждый раз не переставал восторгаться красотой и простой кода. Причем все было настолько понятно, что можно было самому вносить свои изменения, не опасаясь, что-то испортить. Попутно много интересного узнавал о самих шахматах. Конечно, осталось место для совершенствования программы и добавления дополнительных опций. Сейчас, при клике на фигуру, программа показывает возможные ходы этой фигуры. На стадии отладки программы - это очень полезный инструмент. Для новичков шахматной игры - это также прекрасная возможность быстрее освоить правила игры. Однако, опытных игроков такой подход может даже раздражать, т.к. эта своеобразная подсказка сопернику. Компромисс - сделать это в виде опции. Что ещё можно добавить в прoгpаммy ? 0. Навести косметический ремонт (Отразить реальные шахматные координаты) 1. Контроль времени. 2. Запись партии. 3. Установка начальной позиции для шахматных задач. 4. Возврата хода(как опция). 5. Симуляция партии 6. Введение анимации при движении фигур. Хочу еще раз поблагодарить Евгения Витольдовича за прекрасный курс. Предлагаю Евгению Витольдовичу подумать над продолжением курса в плане научить программу самостоятельно делать ходы. Для начала - решать шахматные задачи. Я думаю найдется немало желающих пройти этот курс. Для видео отчета я доработал программу и теперь можно записать партию заранее, а затем программа демонстрирует игру на полуавтомате.


Научился: Курс просто супер. Не ожидал, что мне он так легко дастся. Есть желание его оптимизировать, добавить нотацию и запись партии, дописать оставшиеся правила (троекратное повторение, правило 50 ходов, 75 ходов). И вообще надо правила почитать, а то они меняются каждый год :)
Трудности: Записать видео, придумать тему обзора. В итоге сплагиатил идею