3681b8eccda863b7f3c602af28811090996a9fcb
Тесты к курсу «Парадигмы программирования»
Домашнее задание 7. Объектные выражения на JavaScript 
Модификации
- Base ✅
- Код должен находиться в файле
javascript-solutions/objectExpression.js. - Исходный код тестов
- Запускать с указанием модификации и сложности (
easy,hardилиbonus).
- Запускать с указанием модификации и сложности (
- Код должен находиться в файле
- Simplify. ✅ С проверкой упрощений.
- 3637. Дополнительно реализовать поддержку:
- бинарных функций:
Power(pow) – возведение в степень,2 3 powравно 8;Log(log) – логарифм абсолютного значения аргумента по абсолютному значению основания-2 -8 logравно 3.
- функций от
Nаргументов дляN=1..5:SumN(sumN) – сумма аргументов,1 2 3 4 5 sum5равно 15.
- бинарных функций:
Домашнее задание 6. Функциональные выражения на JavaScript 
Модификации
- Базовая ✅
- Код должен находиться в файле
javascript-solutions/functionalExpression.js. - Исходный код тестов
- Запускать с аргументом
hardилиeasy.
- Запускать с аргументом
- Код должен находиться в файле
- 3637. ✅ Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
one– 1,two– 2,three– 3; - операций:
clamp– функции clamp(x, min, max),3 5 8 clampравно 5;wrap– функции wrap(x, min, max),3 5 8 wrapравно 6.argMin3– индекс минимального из трёх аргументов,3 4 1 argMin3равно 2;argMax3– индекс максимального из трёх аргументов,3 4 1 argMax3равно 1;argMin5– индекс минимального из пяти аргументов,3 4 1 5 6 argMin5равно 2;argMax5– индекс максимального из пяти аргументов,3 4 10 5 6 argMax5равно 2.
- переменных:
- 3839. ✅ Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
one– 1,two– 2,three– 3; - операций:
clamp– функции clamp(x, min, max),3 5 8 clampравно 5;softClamp– сглаженного аналогаclamp:
softClamp(x, min, max, λ) = min + (max - min) / (1 + exp(λ((max + min) / 2 - x))),
3 5 8 0.2 softClampпримерно равно 6.argMin3– индекс минимального из трёх аргументов,3 4 1 argMin3равно 2;argMax3– индекс максимального из трёх аргументов,3 4 1 argMax3равно 1;argMin5– индекс минимального из пяти аргументов,3 4 1 5 6 argMin5равно 2;argMax5– индекс максимального из пяти аргументов,3 4 10 5 6 argMax5равно 2.
- переменных:
- 3435. ✅ Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
one– 1,two– 2,three– 3; - операций:
arcTan(atan) – унарный арктангенс,1256 atanпримерно равно 1.57;arcTan2(atan2) – бинарный арктангенс,841 540 atan2примерно равно 1.
- переменных:
- 3233. ✅ Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
one– 1,two– 2,three– 3; - операций:
sin– синус,3.14159265 sinпримерно равно 0;cos– косинус,3.14159265 cosпримерно равно -1.
- переменных:
Исходный код к лекциям по JavaScript
Запуск примеров
- В браузере
- Из консоли
- на Java: RunJS.cmd, RunJS.sh
- на node.js:
node RunJS.node.js
Лекция 1. Типы и функции
- Типы
- Массивы. Обратите внимание, у массивов есть много других методов.
- Функции
- Функции высшего порядка.
Обратите внимание на реализацию функции
mCurry. Обратите внимание, что функцииarray.mapиarray.reduce(аналогleftFold) входят в стандартную библиотеку. - Пример: вектора и матрицы.
Тестовое задание на JavaScript 
Это задание предназначено для проверки правильности настройки JavaScript. Вам надо проверить, что оно успешно проверяется на вашем компьютере.
Модификации
- base ✅
- Код решения
javascript-solutions/example.jsв репозитории решений. Если всё настроено верно, то вам достаточно сделатьgit pull --rebaseв своём репозитории, чтобы получить решение. - Исходный код тестов
- Запускать с аргументом
hardилиeasy.
- Запускать с аргументом
- Код решения
Запуск тестов
- Для запуска тестов используется GraalJS (часть проекта GraalVM), но вам не требуется их скачивать.
- Для запуска тестов рекомендуется использовать скрипты
TestJS.cmd и TestJS.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
javascript(их нельзя перемещать, но можно вызывать из других каталогов). - В качестве аргументов командной строки указывается полное имя класса теста и модификация,
например
jstest.example.ExampleTest hard base.
- Для самостоятельного запуска из консоли необходимо использовать командную строку вида:
java -ea --module-path=<js>/graal --class-path <js> jstest.example.ExampleTest {hard|easy} <variant>, где-ea– включение проверок времени исполнения;--module-path=<js>/graalпуть к модулям Graal (здесь и далее<js>путь к каталогуjavascriptэтого репозитория);--class-path <js>путь к откомпилированным тестам;{hard|easy}указание тестируемой сложности;<variant>указание тестируемой модификации.
- При запуске из IDE, обычно не требуется указывать
--class-path, так как он формируется автоматически. Остальные опции всё равно необходимо указать. - Troubleshooting
Error occurred during initialization of boot layer java.lang.module.FindException: Module org.graalvm.truffle not found, required by jdk.internal.vm.compiler– неверно указан--module-path;Graal.js not found– неверно указаны--module-pathError: Could not find or load main class jstest.example.ExampleTest– неверно указан--class-path;Exception in thread "main" java.lang.AssertionError: You should enable assertions by running 'java -ea jstest.functional.FunctionalExpressionTest'– не указана опция-ea;Exception in thread "main" jstest.EngineException: Script 'example.js' not found– в текущем каталоге отсутствует решение (example.js)
Домашнее задание 5. Вычисления в различных типах 
Модификации
- Base ✅
- Класс
GenericTabulatorдолжен реализовывать интерфейс Tabulator и строить трёхмерную таблицу значений заданного выражения.mode– режим вычислений:i– вычисления вintс проверкой на переполнение;d– вычисления вdoubleбез проверки на переполнение;bi– вычисления вBigInteger.
expression– выражение, для которого надо построить таблицу;x1,x2– минимальное и максимальное значения переменнойx(включительно)y1,y2,z1,z2– аналогично дляyиz.- Результат: элемент
result[i][j][k]должен содержать значение выражения дляx = x1 + i,y = y1 + j,z = z1 + k. Если значение не определено (например, по причине переполнения), то соответствующий элемент должен быть равенnull.
- Исходный код тестов
- Первый аргумент:
easyилиhard - Последующие аргументы: модификации
- Первый аргумент:
- Класс
- 3637 ✅ Дополнительно реализуйте:
- Унарные операции:
count– число установленных битов,count 5равно 2.
- Бираные операции (минимальный приоритет):
min– минимум,2 min 3равно 2;max– максимум,2 max 3равно 3.
- Поддержку режимов:
u– вычисления вintбез проверки на переполнение;s– вычисления вshortбез проверки на переполнение;f– вычисления вfloatбез проверки на переполнение.
- Унарные операции:
- 3839 ✅ Дополнительно реализуйте:
- Унарные операции:
count– число установленных битов,count 5равно 2.
- Бинарные операции (минимальный приоритет):
min– минимум,2 min 3равно 2;max– максимум,2 max 3равно 3.
- Поддержку режимов:
u– вычисления вintбез проверки на переполнение;s– вычисления вshortбез проверки на переполнение;t– вычисления вintбез проверки на переполнение с отбрасыванием остатка от деления на 10.
- Унарные операции:
- 3435 ✅ Дополнительно реализуйте:
- Унарные операции:
count– число установленных битов,count 5равно 2.
- Бинарные операции (минимальный приоритет):
min– минимум,2 min 3равно 2;max– максимум,2 max 3равно 3.
- Поддержку режимов:
u– вычисления вintбез проверки на переполнение;
- Унарные операции:
- 3233 ✅ Дополнительно реализуйте поддержку режимов:
u– вычисления вintбез проверки на переполнение;s– вычисления вshortбез проверки на переполнение;f– вычисления вfloatбез проверки на переполнение.
Домашнее задание 4. Очереди 
Модификации
- Базовая ✅
- Исходный код тестов
- Откомпилированные тесты
- Для работы тестов необходимо добавить опцию JVM
--add-opens java.base/java.util=ALL-UNNAMED
- 3637 ✅
- Добавить в интерфейс очереди и реализовать методы
contains(element)– проверяет, содержится ли элемент в очередиremoveFirst(element)– удаляет первое вхождение элемента в очередь и возвращает было ли такое
- Дублирования кода быть не должно
- Добавить в интерфейс очереди и реализовать методы
- 3839 ✅
- Добавить в интерфейс очереди и реализовать методы
getNth(n)– создать очередь, содержащую каждый n-й элемент, считая с 1removeNth(n)– создать очередь, содержащую каждый n-й элемент, и удалить их из исходной очередиdropNth(n)– удалить каждый n-й элемент из исходной очереди
- Тип возвращаемой очереди должен соответствовать типу исходной очереди
- Дублирования кода быть не должно
- Добавить в интерфейс очереди и реализовать методы
- 3435 ✅
- 3233 ✅
- Добавить в интерфейс очереди и реализовать методы
removeAll(element)– удалить все элементы равные заданномуretainAll(predicate)– оставить только элементы равные заданному
- Взаимный порядок элементов должен сохраняться
- Дублирования кода быть не должно
- Добавить в интерфейс очереди и реализовать методы
Домашнее задание 3. Очередь на массиве 
Модификации
- Базовая ✅
- Классы должны находиться в пакете
queue - Исходный код тестов
- Откомпилированные тесты
- Для работы тестов необходимо добавить опцию JVM
--add-opens java.base/java.util=ALL-UNNAMED
- Классы должны находиться в пакете
- 3637. Дополнительно реализовать методы: ✅
push– добавить элемент в начало очереди;peek– вернуть последний элемент в очереди;remove– вернуть и удалить последний элемент из очереди;count– вернуть число вхождений элемента в очередь.
- 3839. Дополнительно реализовать методы: ✅
push– добавить элемент в начало очереди;peek– вернуть последний элемент в очереди;remove– вернуть и удалить последний элемент из очереди;countIf– вернуть число элементов очереди, удовлетворяющих предикату.
- 3435 ✅
- 3233 ✅
- Дополнительно реализовать методы:
indexOf– вернуть индекс первого вхождения элемента в очередь;lastIndexOf– вернуть индекс последнего вхождения элемента в очередь.
- Индексы отсчитываются с головы очереди.
- Если искомого элемента нет, методы должны возвращать
-1.
- Дополнительно реализовать методы:
Домашнее задание 2. Бинарный поиск 
Модификации
- Базовая ✅
- Класс
BinarySearchдолжен находиться в пакетеsearch - Исходный код тестов
- Откомпилированные тесты
- Класс
- 3637 ✅
- На вход подаётся число
xи массив, отсортированный по невозрастанию. - Требуется вывести число элементов массива, равных
x. - Не допускается использование типов
longиBigInteger. - Класс должен иметь имя
BinarySearch3637
- На вход подаётся число
- 3839 ✅
- На вход подаётся число
xи массив, отсортированный по невозрастанию. - Требуется вывести два числа: начало и длину диапазона элементов, равных
x. Если таких элементов нет, то следует вывести пустой диапазон, у которого левая граница совпадает с местом вставки элементаx. - Не допускается использование типов
longиBigInteger. - Класс должен иметь имя
BinarySearch3839
- На вход подаётся число
- 3435 ✅
- На вход подается отсортированный (строго) по убыванию массив,
циклически сдвинутый на
kэлементов. Все числа в массиве различны. - Требуется найти
k. - Класс должен иметь имя
BinarySearch3435
- На вход подается отсортированный (строго) по убыванию массив,
циклически сдвинутый на
- 3233 ✅
- На вход подается отсортированный (строго) по возрастанию массив,
циклически сдвинутый на
kэлементов. Все числа в массиве различны. - Требуется найти
k. - Класс должен иметь имя
BinarySearch3233
- На вход подается отсортированный (строго) по возрастанию массив,
циклически сдвинутый на
Домашнее задание 1. Обработка ошибок 
Модификации
- Base ✅
- Класс
ExpressionParserдолжен реализовывать интерфейс ListParser. - Результат разбора должен реализовывать интерфейс ListExpression.
- Нельзя использовать типы
longиdouble - Нельзя использовать методы классов
MathиStrictMath - Исходный код тестов
- Первый аргумент:
easyилиhard - Последующие аргументы: модификации
- Первый аргумент:
- Класс
- 3637 ✅
- Дополнительно реализуйте унарные операции
‖x‖– модуль,‖-5‖равно 5;³– возведение в куб,-5³равно −125;∛– кубический корень,∛-123равно -4.
- Дополнительно реализуйте унарные операции
- 3839 ✅
- Дополнительно реализуйте унарные операции:
‖x‖– модуль,‖-5‖равно 5;²– возведение в квадрат,-5²равно 25;√– квадратный корень,√24равно 4;³– возведение в куб,-5³равно −125;∛– кубический корень,∛-123равно -4.
- Дополнительно реализуйте унарные операции:
- 3435 ✅
- Дополнительно реализуйте унарные операции:
‖x‖– модуль,‖-5‖равно 5;√– квадратный корень,√24равно 4.
- Дополнительно реализуйте унарные операции:
- 3233 ✅
- Дополнительно реализуйте унарные операции:
‖x‖– модуль числа,‖-5‖равно 5;∛– кубический корень,∛-123равно -4.
- Дополнительно реализуйте унарные операции:
Description
Languages
Java
91.7%
JavaScript
7.6%
HTML
0.3%
Batchfile
0.2%
Shell
0.2%