46ab1753a5f3a78092f5a637105e1018a031f399
Тесты к курсу «Парадигмы программирования»
Домашнее задание 9. Линейная алгебра на Clojure 
Модификации
- Базовая ✅
- Код должен находиться в файле
clojure-solutions/linear.clj. - Исходный код тестов
- Запускать с указанием сложности (
easyилиhard) и модификации.
- Запускать с указанием сложности (
- Код должен находиться в файле
Исходный код к лекциям по Clojure
Документация
Запуск Clojure
- Консоль: Windows, *nix
- Интерактивный:
RunClojure - С выражением:
RunClojure --eval "<выражение>" - Скрипт:
RunClojure <файл скрипта> - Справка:
RunClojure --help
- Интерактивный:
- IDE
- IntelliJ Idea: плагин Cursive
- VSCode: плагин Calva
Лекция 1. Функции
Лекция 2. Внешний мир
Тестовое задание на Clojure 
Это задание предназначено для проверки правильности настройки Clojure. Вам надо убедиться, что оно успешно проверяется на вашем компьютере.
Для запуска тестов используются скрипты TestClojure.cmd и TestClojure.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
clojure(их нельзя перемещать, но можно вызывать из других каталогов). - Тестируемое решение должно находиться в текущем каталоге.
- В качестве аргументов командной строки указывается
полное имя класса теста, сложность и модификация,
например,
cljtest.example.ExampleTest hard base.
Модификации
- base ✅
- Код решения
clojure-solutions/example.cljв репозитории решений. Если всё настроено верно, то вам достаточно сделатьgit pull source mainв своём репозитории, чтобы получить решение. - Исходный код тестов
- Запускать с аргументом
hardилиeasy.
- Запускать с аргументом
- Код решения
Домашнее задание 8. Обработка ошибок на JavaScript 
Модификации
- Base ✅
- Код должен находиться в файле
javascript-solutions/objectExpression.js. - Исходный код тестов
- Запускать с указанием модификации и сложности (
easyилиhard).
- Запускать с указанием модификации и сложности (
- Код должен находиться в файле
- Postfix. ✅ Дополнительно реализовать поддержку:
- Выражений в постфиксной записи:
(2 3 +)равно 5- функция
parsePostfix - метод
postfix
- Исходный код тестов
- Запускать с указанием модификации и сложности (
easyилиhard).
- Запускать с указанием модификации и сложности (
- Выражений в постфиксной записи:
- 3637. ✅ Дополнительно реализовать поддержку:
- постфиксной записи;
- разных видов скобок: квадратных (
[]), фигурных ({}), угловых (<>); - операций произвольного числа аргументов:
SumExp(sumExp) – сумма экспонент,(sumExp 2 3 16)примерно равно 8886137;Lse(lse) – LogSumExp,(lse 2 3 16)примерно равно 16.
- 3839. ✅ Дополнительно реализовать поддержку:
- постфиксной записи;
- разных видов скобок: квадратных (
[]), фигурных ({}), угловых (<>). - операций произвольного числа аргументов:
SumExp(sumExp) – сумма экспонент,(sumExp 2 3 16)примерно равно 8886137;Lme(lme) – логарифма среднего экспонент,(lme 2 7 9)примерно равно 8.
- 3435. ✅ Дополнительно реализовать поддержку:
- разных видов скобок: квадратных (
[]), фигурных ({}), угловых (<>), французские кавычки («»). - операций произвольного числа аргументов:
MeanExp(meanExp) – среднее экспонент,(meanExp 2 4 15)примерно равно 1089693.
- разных видов скобок: квадратных (
- 3233. ✅ Дополнительно реализовать поддержку:
- разных видов скобок: квадратных (
[]), фигурных ({}), угловых (<>), французские кавычки («»). - операций одного или двух аргументов:
ArcTan12(atan12) – арктангенс,(atan12 1256)примерно равно 1.57,(atan12 841 540)примерно равно 1.
- разных видов скобок: квадратных (
Домашнее задание 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.
- бинарных функций:
- 3839. ✅ Дополнительно реализовать поддержку:
- функций:
Gauss(gauss) – функция Гаусса; от четырех аргументов:a,b,c,x.
- функций от
Nаргументов дляN=1..5:SumN(sumN) – сумма аргументов,1 2 3 4 5 sum5равно 15.AvgN(avgN) – арифметическое среднее аргументов,1 2 3 4 5 avg5равно 3.
- функций:
- 3435. ✅ Дополнительно реализовать поддержку функций:
Wrap(wrap) – функции wrap(x, min, max),3 5 8 wrapравно 6;SoftWrap(softWrap) – сглаженного аналогаwrap:
softWrap(x, min, max, λ) = arcsin(cos(a) * tanh(λ * -sin(a))) * (max - min) / π + (max + min) / 2,
где a = π * (x - min) / (max - min)3 5 8 0.5 softWrapпримерно равно 6.3.
- 3233. ✅ Дополнительно реализовать поддержку функций:
Wrap(wrap) – функции wrap(x, min, max),3 5 8 wrapравно 6.
Домашнее задание 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
Tests and solutions for "Programming Paradigms" course.
https://codejava.tech/courses/paradigms
Languages
Java
88.6%
JavaScript
7.6%
Clojure
3%
HTML
0.3%
Batchfile
0.3%
Other
0.2%