СИКП на JS

Эти курсы перевернут ваше представление о том что такое код, данные и функции. Они базируются на легендарном курсе "Структура и Интерпретация Компьютерных Программ (СИКП). В этих курсах создаются свои собственные типы данных, из которых строятся другие типы, изучаются функции высшего порядка, каррирование, частичное применение и многое другое. Вы познакомитесь с отложенными вычислениями, мемоизацией и лямбда-исчислением.

Курс

JS: Функциональное программирование

PRO

Тема функций — одна из центральных в JavaScript. Их мощь позволяет порой творить настоящие чудеса. Начиная с этого курса, функции начинают использоваться как данные, порождают другие функции и получают функции как аргументы.

Курс

JS: Составные данные

PRO

Следующий шаг после освоения основ программирования это изучение идеи составных данных. Этот курс посвящён изучению концепций, позволяющих из простых типов данных составлять более сложные данные, необходимые для решения конкретной задачи и для реализации конкретной программы. На примере разработки простой графической библиотеки мы изучим как «подняться» от уровня простых чисел до уровня двумерных объектов и рисунков.

Курс

JS: Последовательности

PRO

Продолжение изучения составных данных на более продвинутом уровне. Рассматриваем тип данных «список». В течение курса работаем над проектом «Генератор HTML», и на практике учимся понимать и использовать функции высшего порядка filter, map и reduce. Знакомимся с иерархическими структурами и уровневым проектированием.

Курс

JS: Программирование, управляемое данными

PRO

В течение этого курса мы будем писать собственную карточную игру и знакомиться с такими важными концепциями программирования, как пользовательские типы, динамическая диспетчеризация по типу, позволяющая писать ёмкий, универсальный код, полиморфизм, передача сообщений между сущностями и, конечно, основы важнейшей темы — объектно-ориентированного программирования. Также мы перейдем к разработке через тесты (test driven development).

Курс

JS: Коллекции

PRO

Этот курс посвящен конкретным приемам в работе с коллекциями, которые используются в языке JavaScript, а также изучению основных типов данных: массивов, ассоциативных массивов и множеств. В течение курса изучаются темы техники мемоизации, ленивых вычислений, использования функций высшего порядка, так называемых spread- и rest-операций и техник разрушающих присваиваний.

Испытания

JS: Составные данные
Пары без функций
Пары неотрицательных целых чисел можно представить числ...
JS: Составные данные
Тройка
Кроме пар можно создавать абстрактные типы данных, кото...
JS: Составные данные
Пары на строках
Пару можно создать на основе строки. Для хранения двух ...
JS: Последовательности
Выбор по селектору
Частой задачей при работе с деревьями (особенно html), ...
JS: Последовательности
Первые n элементов
take.js Реализуйте и экспортируйте по умолчанию функци...
JS: Последовательности
Выбор по селектору
Частой задачей при работе с деревьями (особенно html), ...
JS: Последовательности
Задача про ферзей
Задача о восьми ферзях — широко известная задача по рас...
JS: Последовательности
Выравнивание
flatten.js Реализуйте и экспортируйте по умолчанию фун...
JS: Последовательности
Быстрая сортировка
sort.js Реализуйте и экспортируйте по умолчанию функци...
JS: Последовательности
Списки на базе строк
Осторожно! Эта задача требует умения работать с массива...
JS: Последовательности
Одинаковая четность
sameParityFilter.js Реализуйте и экспортируйте по умолч...
JS: Последовательности
Молния
zip.js Напишите и экспортируйте по умолчанию функцию z...
JS: Последовательности
Периметр многоугольника
calculatePolygonPerimeter.js Реализуйте и экспортируйт...
JS: Коллекции
Пересечение массивов
intersection.js Реализуйте и экспортируйте функцию по ...
JS: Коллекции
Сборщик строки запроса
Query String (строка запроса) - часть адреса страницы в...
JS: Коллекции
Поиск ближайшего соседа
findIndexOfNearest.js Реализуйте и экспортируйте по умо...
JS: Коллекции
NRZI кодирование
NRZI код (Non Return to Zero Invertive) — один из спосо...
JS: Коллекции
Увеличение двумерного массива
enlargeArrayImage.js Реализуйте и экспортируйте по умо...
JS: Коллекции
Нечетное количество
findOdd.js Дан массив чисел. Каждое число в массиве вс...
JS: Коллекции
Найди отличия
difference.js Реализуйте и экспортируйте функцию по ум...
JS: Коллекции
Нормализация данных
normalizeData.js Реализуйте и экспортируйте по умолчан...
JS: Коллекции
Представление массива в виде объекта
fromPairs.js Реализуйте и экспортируйте функцию по умо...
JS: Коллекции
Исключаем лишних
without.js Реализуйте и экспортируйте функцию по умолч...
JS: Коллекции
Чанкование
chunk.js Реализуйте и экспортируйте функцию по умолчан...
JS: Функциональное программирование
Каррирование
concat.js Реализуйте и экспортируйте по умолчанию карр...
JS: Функциональное программирование
Композиция функций
С точки зрения математики, композиция функций f и g — н...
JS: Функциональное программирование
Числа Черча
В 30-х годах прошлого века перед математиками встала та...

Впечатления

После этого задания я окончательно осознал, что такое абстракции и сущности.

Спасибо, было интересно!

Хорошее задание, с подковыркой. Чисто математически, насколько я помню, если точка лежит на границе какой-то замкнутой фигуры она считается принадлежащей этой фигуре. А здесь сразу не обратил внимание, что написано (не лежит на границе прямоугольника, а находится внутри) и обложил console.log-ами весь код, пока не допер, что надо добавить на все точки прямоугольника проверку типа quadrant(getPointA(rect)) !== undefined. Всем внимания :)

Даже не сомневался, что у учителя функция containsTheOrigin будет решена в несколько строк, респект учителям, которые учат, смотря на сложные вещи, видеть простые решения!😜

Отличный курс, очень понравился. Мне всегда нравились конструкторы) Последнее задание получилось решить почти в точности, как у учителя. Первый раз) Спасибо!

Спасибо за курс, было очень познавательно. Особенно трудно далась тема Функции как объекты первого класса. Сейчас после полного прохождения курса вроде стало приходить понимание темы, но на 100% не уверен, надеюсь в будущих курсах смогу точно узнать понял ли я тему или нет.