Files
paradigms/README.md
2026-04-13 20:12:01 +03:00

33 KiB
Raw Blame History

Тесты к курсу «Парадигмы программирования»

Условия домашних заданий

Домашнее задание 9. Линейная алгебра на Clojure Clojure Linear Tests

Модификации

  • Базовая
    • Код должен находиться в файле clojure-solutions/linear.clj.
    • Исходный код тестов
      • Запускать с указанием сложности (easy или hard) и модификации.

Исходный код к лекциям по Clojure

Документация

Запуск Clojure

  • Консоль: Windows, *nix
    • Интерактивный: RunClojure
    • С выражением: RunClojure --eval "<выражение>"
    • Скрипт: RunClojure <файл скрипта>
    • Справка: RunClojure --help
  • IDE

Скрипт со всеми примерами

Лекция 1. Функции

Лекция 2. Внешний мир

Тестовое задание на Clojure Clojure Exmaple Tests

Это задание предназначено для проверки правильности настройки Clojure. Вам надо убедиться, что оно успешно проверяется на вашем компьютере.

Для запуска тестов используются скрипты TestClojure.cmd и TestClojure.sh

  • Репозиторий должен быть скачан целиком.
  • Скрипты должны находиться в каталоге clojure (их нельзя перемещать, но можно вызывать из других каталогов).
  • Тестируемое решение должно находиться в текущем каталоге.
  • В качестве аргументов командной строки указывается полное имя класса теста, сложность и модификация, например, cljtest.example.ExampleTest hard base.

Модификации

  • base
    • Код решения clojure-solutions/example.clj в репозитории решений. Если всё настроено верно, то вам достаточно сделать git pull source main в своём репозитории, чтобы получить решение.
    • Исходный код тестов
      • Запускать с аргументом hard или easy.

Домашнее задание 8. Обработка ошибок на JavaScript JavaScript Prefix Tests

Модификации

  • 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 JavaScript Objective Expressions Tests

Модификации

  • 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. Дополнительно реализовать поддержку:
    • функций:
    • функций от 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. Дополнительно реализовать поддержку функций:

Домашнее задание 6. Функциональные выражения на JavaScript JavaScript Expressions Tests

Модификации

  • Базовая
    • Код должен находиться в файле 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

Скрипт с примерами

Запуск примеров

Лекция 1. Типы и функции

Тестовое задание на JavaScript JavaScript Example Tests

Это задание предназначено для проверки правильности настройки 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-path
    • Error: 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. Вычисления в различных типах Generic Tests

Модификации

  • 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. Очереди Queues Tests

Модификации

  • Базовая
  • 3637
    • Добавить в интерфейс очереди и реализовать методы
      • contains(element) проверяет, содержится ли элемент в очереди
      • removeFirst(element) удаляет первое вхождение элемента в очередь и возвращает было ли такое
    • Дублирования кода быть не должно
  • 3839
    • Добавить в интерфейс очереди и реализовать методы
      • getNth(n) создать очередь, содержащую каждый n-й элемент, считая с 1
      • removeNth(n) создать очередь, содержащую каждый n-й элемент, и удалить их из исходной очереди
      • dropNth(n) удалить каждый n-й элемент из исходной очереди
    • Тип возвращаемой очереди должен соответствовать типу исходной очереди
    • Дублирования кода быть не должно
  • 3435
    • Добавить в интерфейс очереди и реализовать методы
      • removeIf(predicate) удалить элементы, удовлетворяющие предикату
      • retainIf(predicate) удалить элементы, не удовлетворяющие предикату
    • Взаимный порядок элементов должен сохраняться
    • Дублирования кода быть не должно
  • 3233
    • Добавить в интерфейс очереди и реализовать методы
      • removeAll(element) удалить все элементы равные заданному
      • retainAll(predicate) оставить только элементы равные заданному
    • Взаимный порядок элементов должен сохраняться
    • Дублирования кода быть не должно

Домашнее задание 3. Очередь на массиве ArrayQueue Tests

Модификации

  • Базовая
  • 3637. Дополнительно реализовать методы:
    • push добавить элемент в начало очереди;
    • peek вернуть последний элемент в очереди;
    • remove вернуть и удалить последний элемент из очереди;
    • count вернуть число вхождений элемента в очередь.
  • 3839. Дополнительно реализовать методы:
    • push добавить элемент в начало очереди;
    • peek вернуть последний элемент в очереди;
    • remove вернуть и удалить последний элемент из очереди;
    • countIf вернуть число элементов очереди, удовлетворяющих предикату.
  • 3435
    • Дополнительно реализовать методы:
      • indexIf вернуть индекс первого элемента, удовлетворяющего предикату;
      • lastIndexIf вернуть индекс последнего элемента, удовлетворяющего предикату.
    • Индексы отсчитываются с головы очереди.
    • Если искомого элемента нет, методы должны возвращать -1.
  • 3233
    • Дополнительно реализовать методы:
      • indexOf вернуть индекс первого вхождения элемента в очередь;
      • lastIndexOf вернуть индекс последнего вхождения элемента в очередь.
    • Индексы отсчитываются с головы очереди.
    • Если искомого элемента нет, методы должны возвращать -1.

Домашнее задание 2. Бинарный поиск BinarySearch Tests

Модификации

  • Базовая
  • 3637
    • На вход подаётся число x и массив, отсортированный по невозрастанию.
    • Требуется вывести число элементов массива, равных x.
    • Не допускается использование типов long и BigInteger.
    • Класс должен иметь имя BinarySearch3637
  • 3839
    • На вход подаётся число x и массив, отсортированный по невозрастанию.
    • Требуется вывести два числа: начало и длину диапазона элементов, равных x. Если таких элементов нет, то следует вывести пустой диапазон, у которого левая граница совпадает с местом вставки элемента x.
    • Не допускается использование типов long и BigInteger.
    • Класс должен иметь имя BinarySearch3839
  • 3435
    • На вход подается отсортированный (строго) по убыванию массив, циклически сдвинутый на k элементов. Все числа в массиве различны.
    • Требуется найти k.
    • Класс должен иметь имя BinarySearch3435
  • 3233
    • На вход подается отсортированный (строго) по возрастанию массив, циклически сдвинутый на k элементов. Все числа в массиве различны.
    • Требуется найти k.
    • Класс должен иметь имя BinarySearch3233

Домашнее задание 1. Обработка ошибок Exception Tests

Модификации

  • 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.