Замечание от автора. Автор был уже хорош, но недостаточно. В сем репозитории вы сможете найти условия, тесты и мои решения домашних заданий. Все задания, кроме 12 и 15, были приняты. Не стоит списывать код, ведь это неспортивно, но кто запрещал посмотреть идею.
UPD: выполнялись модификации 39 группы, но обычно она включала в себя остальные.
UUPD: Если вы нашли какие-то опечатки или идейные баги в решении, можете открыть PR, и если там что-то действительно важное, то я запушу изменения или перепишу код сам.
Модификации
- Base
- Код должен находиться в файле
prolog-solutions/expression.pl
. - Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
илиhard
).
- Запускать c указанием модификации и сложности (
- Код должен находиться в файле
- Variables. Дополнительно реализовать поддержку:
- Переменных, состоящих из произвольного количества букв
XYZ
в любом регистре- Настоящее имя переменной определяется первой буквой ее имени
- Переменных, состоящих из произвольного количества букв
Модификации
- Базовая
- Код должен находиться в файле
prolog-solutions/tree-map.pl
. - Исходный код тестов
- Запускать c указанием сложности (
easy
илиhard
) и модификации
- Запускать c указанием сложности (
- Код должен находиться в файле
- Floor (36, 37)
- Добавьте правило
map_floorKey(Map, Key, FloorKey)
, возвращающее максимальный ключ, меньший либо равный заданному.
- Добавьте правило
- SubMap (38, 39)
- Добавьте правило
map_subMapSize(Map, FromKey, ToKey, Size)
, возвращающее число пар в диапазоне[FromKey, ToKey)
.
- Добавьте правило
- MinMax (31, 34, 35)
- Добавьте правила:
map_minKey(Map, Key)
, возвращающее минимальный ключ в дереве;map_maxKey(Map, Key)
, возвращающее максимальный ключ в дереве.
- Добавьте правила:
- Replace (32, 33)
- Добавьте правило
map_replace(Map, Key, Value, Result)
, заменяющее значения ключа на указанное, если ключ присутствует.
- Добавьте правило
Модификации
- Базовая
- Код должен находиться в файле
prolog-solutions/primes.pl
. - Исходный код тестов
- Запускать c указанием сложности (
easy
,hard
илиbonus
) и модификации.
- Запускать c указанием сложности (
- Код должен находиться в файле
- Palindrome (36, 37)
- Добавьте правило
prime_palindrome(N, K)
, определяющее, является лиN
простым палиндромом вK
-ичной системе счисления:prime_palindrome(101, 10)
.
- Добавьте правило
- Lcm (38, 39)
- Добавьте правило
lcm(A, B, LCM)
, подсчитывающее НОК(A
,B
) через разложение на простые множители:lcm(4, 6, 12)
.
- Добавьте правило
- Unique (31, 34, 35)
- Добавьте правило
unique_prime_divisors(N, Divisors)
, возвращающее простые делители без повторов:unique_prime_divisors(99, [3, 11])
.
- Добавьте правило
- Nth (32, 33)
- Добавьте правило
nth_prime(N, P)
, подсчитывающееN
-ое простое число:nth_prime(1, 2)
,nth_prime(26, 101)
.
- Добавьте правило
Запуск Prolog
Лекция 1. Факты, правила и вычисления
Лекция 2. Задачи, унификация и объекты
Лекция 3. Преобразование в строку и разбор
Модификации
- Base
- Код должен находиться в файле
clojure-solutions/expression.clj
. - Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
илиhard
).
- Запускать c указанием модификации и сложности (
- Код должен находиться в файле
- Variables (31-33). Дополнительно реализовать поддержку:
- Переменных, состоящих из произвольного количества букв
XYZ
в любом регистре- Настоящее имя переменной определяется первой буквой ее имени
- Переменных, состоящих из произвольного количества букв
- Bitwise (34-35). Сделать модификацию Variables и дополнительно реализовать поддержку:
- Побитовых операций
BitAnd
(&
) – и:5 & 6
равно 4BitOr
(|
) - или:5 | 6
равно 7BitXor
(^
) - исключающее или:5 ^ 6
примерно равно 1.66881E-308- для реализации операций используйте doubleToLongBits и longBitsToDouble
- операции по увеличению приоритета:
^
,|
,&
, операции базовой модификации
- Побитовых операций
- PowLog (36-37). Сделать модификацию Variables и дополнительно реализовать поддержку:
- Бинарных правоассоциативных операций максимального приоритета:
IPow
(**
) – возведения в степень:4 ** 3 ** 2
равно4 ** (3 ** 2)
равно 262144ILog
(//
) – взятия логарифма (абсолютной величины по основанию абсолютной величины):8 // 9 // 3
равно8 // (9 // 3)
равно 3
- Бинарных правоассоциативных операций максимального приоритета:
- BitImplIff. Сделать модификацию Bitwise и дополнительно реализовать поддержку:
- Побитовых операций
BitImpl
(=>
) – импликация (правоассоциативна):4 => 1
примерно равно -2BitIff
(<=>
) - тогда и только тогда:2 <=> 6
примерно равно -1.34827E308- операции по увеличению приоритета:
<=>
,=>
, операции модификации Bitwise
- Побитовых операций
Модификации
- Базовая
- Код должен находиться в файле
clojure-solutions/expression.clj
. - Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
илиhard
).
- Запускать c указанием модификации и сложности (
- Код должен находиться в файле
- MeanVarn (36, 37). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Mean
(mean
) – математическое ожидание аргументов,(mean 1 2 6)
равно 3;Varn
(varn
) – дисперсия аргументов,(varn 2 5 11)
равно 14;
- операций произвольного числа аргументов:
- SumexpSoftmax. Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Sumexp
(sumexp
) – сумма экспонент,(sumexp 8 8 9)
примерно равно 14065;Softmax
(Softmax
) – softmax первого аргумента,(softmax 1 2 3)
примерно равно 0.09;
- операций произвольного числа аргументов:
- PowLog (31, 34, 35). Дополнительно реализовать поддержку:
- бинарных операций:
Pow
(myBase.pow
) – возведение в степень,(myBase.pow 2 3)
равно 8;Log
(log
) – логарифм абсолютной величины по основанию абсолютной величины,(log -2 -8)
равно 3.
- бинарных операций:
- ExpLn (32, 33). Дополнительно реализовать поддержку:
- унарных операций:
Exp
(exp
) – экспонента,(exp 8)
примерно равно 2981;Ln
(Ln
) – натуральный логарифм абсолютной величины,(ln 2981)
примерно равно 8.
- унарных операций:
Модификации
- Base
- Код должен находиться в файле
clojure-solutions/expression.clj
. - Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
илиhard
).
- Запускать c указанием модификации и сложности (
- Код должен находиться в файле
- MeanVarn (36, 37). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
mean
– математическое ожидание аргументов,(mean 1 2 6)
равно 3;varn
– дисперсия аргументов,(varn 2 5 11)
равно 14;
- операций произвольного числа аргументов:
- SumexpSoftmax (38, 39). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
sumexp
– сумма экспонент,(sumexp 8 8 9)
примерно равно 14065;softmax
– softmax первого аргумента,(softmax 1 2 3)
примерно равно 0.09;
- операций произвольного числа аргументов:
- PowLog (31, 34, 35). Дополнительно реализовать поддержку:
- бинарных операций:
myBase.pow
– возведение в степень,(myBase.pow 2 3)
равно 8;log
– логарифм абсолютной величины по основанию абсолютной величины,(log -2 -8)
равно 3.
- бинарных операций:
- ExpLn (32, 33). Дополнительно реализовать поддержку:
- унарных операций:
exp
– экспонента,(exp 8)
примерно равно 2981;ln
– натуральный логарифм абсолютной величины,(ln -2981)
примерно равно 8.
- унарных операций:
Модификации
- Базовая
- Код должен находиться в файле
clojure-solutions/linear.clj
. - Исходный код тестов
- Запускать c указанием сложности (
easy
илиhard
) и модификации.
- Запускать c указанием сложности (
- Код должен находиться в файле
- Cuboid (31, 32, 33)
- Назовем кубоидом трехмерную прямоугольную таблицу чисел.
- Добавьте операции поэлементного
сложения (
c+
), вычитания (c-
), умножения (c*
) и деления (cd
) кубоидов. Например,(с+ [[[1] [2]] [[3] [4]]] [[[5] [6]] [[7] [8]]])
должно быть равно[[[6] [8]] [[10] [12]]]
.
- Shapeless (34, 35)
- Добавьте операции поэлементного
сложения (
s+
), вычитания (s-
), умножения (s*
) и деления (sd
) чисел и векторов любой (в том числе, переменной) формы. Например,(s+ [[1 2] 3] [[4 5] 6])
должно быть равно[[5 7] 9]
.
- Добавьте операции поэлементного
сложения (
- Simplex (36, 37)
- Назовем симплексом многомерную таблицу чисел,
такую что для некоторого
n
в ней существуют все значения с суммой индексов не превышающейn
и только эти значения. - Добавьте операции поэлементного
сложения (
x+
), вычитания (x-
), умножения (x*
) и деления (xd
) симплексов. Например,(x+ [[1 2] [3]] [[5 6] [7]])
должно быть равно[[6 8] [10]]
. - Исходный код тестов
- Назовем симплексом многомерную таблицу чисел,
такую что для некоторого
- Broadcast (38, 39)
- Назовем тензором многомерную прямоугольную таблицу чисел.
- Форма тензора – последовательность чисел
(s1..n)=(s1, s2, …, sn), где
n – размерность тензора, а si – число элементов
по i-ой оси.
Например, форма тензора
[[[2 3 4] [5 6 7]]]
равна (1, 2, 3), а форма1
равна (). - Тензор формы (s1..n) может быть распространен (broadcast)
до тензора формы (u1..m), если (si..n) является
суффиксом (u1..m).
Для этого, исходный тензор копируется по недостающим осям.
Например, распространив тензор
[ [2] [3] ]
формы (2, 1) до формы (3, 2, 1) получим[ [ [2] [3] ] [ [2] [3] ] [ [2] [3] ] ]
, а распространив1
до формы (2, 3) получим[ [1 1 1] [1 1 1] ]
. - Тензоры называются совместимыми, если один из них может быть распространен до формы другого. Например, тензоры формы (3, 2, 1) и (2, 1) совместимы, а (3, 2, 1) и (1, 2) – нет. Числа совместимы с тензорами любой формы.
- Добавьте операции поэлементного
сложения (
hb+
), вычитания (hb-
), умножения (hb*
) и деления (hbd
) совместимых тензоров. Если формы тензоров не совпадают, то тензоры меньшей размерности должны быть предварительно распространены до тензоров большей размерности. Например,(hb+ 1 [ [10 20 30] [40 50 60] ] [100 200 300] )
должно быть равно[ [111 221 331] [141 251 361] ]
. - Исходный код тестов
Документация
Запуск Clojure
- Консоль: Windows, *nix
- Интерактивный:
RunClojure
- С выражением:
RunClojure --eval "<выражение>"
- Скрипт:
RunClojure <файл скрипта>
- Справка:
RunClojure --help
- Интерактивный:
- IDE
- IntelliJ Idea: плагин Cursive
- Eclipse: плагин Counterclockwise
Лекция 1. Функции
Лекция 2. Внешний мир
Лекция 3. Объекты
- Прототипное наследование
- Библиотека для ДЗ: proto.clj
- Java-классы
Лекция 4. Разное
Лекция 5. Комбинаторные парсеры
- Базовые функции
- Комбинаторы
- Библиотека для ДЗ parser.clj
- JSON
- Макросы
Модификации
- Base
- Код должен находиться в файле
javascript-solutions/objectExpression.js
. - Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
илиhard
).
- Запускать c указанием модификации и сложности (
- Код должен находиться в файле
- Prefix: SinhCosh (31, 32, 33). Дополнительно реализовать поддержку:
- унарных операций:
Sinh
(sinh
) – гиперболический синус,(sinh 3)
немного больше 10;Cosh
(cosh
) – гиперболический косинус,(cosh 3)
немного меньше 10.
- Исходный код тестов
- унарных операций:
- Prefix: MeanVar (34, 35). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Mean
(mean
) – математическое ожидание аргументов,(mean 1 2 6)
равно 3;Var
(var
) – дисперсия аргументов,(var 2 5 11)
равно 14.
- Исходный код тестов
- операций произвольного числа аргументов:
- PostfixMeanVar (36, 37). Дополнительно реализовать поддержку:
- выражений в постфиксной записи:
(2 3 +)
равно 5 - операций произвольного числа аргументов:
Mean
(mean
) – математическое ожидание аргументов,(1 2 6 mean)
равно 3;Var
(var
) – дисперсия аргументов,(2 5 11 var)
равно 14.
- Исходный код тестов
- выражений в постфиксной записи:
- PostfixSumexpSoftmax (38, 39). Дополнительно реализовать поддержку:
- выражений в постфиксной записи:
(2 3 +)
равно 5 - унарных операций:
Sumexp
(sumexp
) – сумма экспонент,(8 8 9 sumexp)
примерно равно 14065;Softmax
(softmax
) – softmax первого аргумента,(1 2 3 softmax)
примерно 0.09.
- Исходный код тестов
- выражений в постфиксной записи:
Модификации
- Base
- Код должен находиться в файле
javascript-solutions/objectExpression.js
. - Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
,hard
илиbonus
).
- Запускать c указанием модификации и сложности (
- Код должен находиться в файле
- SinhCosh (31, 34, 45). Дополнительно реализовать поддержку:
- унарных функций:
Sinh
(sinh
) – гиперболический синус,3 sinh
немного больше 10;Cosh
(cosh
) – гиперболический косинус,3 cosh
немного меньше 10.
- унарных функций:
- MinMax. Дополнительно реализовать поддержку:
- функций:
Min3
(min3
) – минимум из трех аргументов,1 2 3 min
равно 1;Max5
(max5
) – максимум из пяти аргументов,1 2 3 4 5 max
равно 5.
- функций:
- PowLog (36, 37). Дополнительно реализовать поддержку:
- бинарных операций:
Power
(myBase.pow
) – возведение в степень,2 3 myBase.pow
равно 8;Log
(log
) – логарифм абсолютного значения аргумента по абсолютному значению основания-2 -8 log
равно 3.
- бинарных операций:
- Gauss (38, 39). Дополнительно реализовать поддержку:
- функций:
Gauss
(gauss
) – функция Гаусса; от четырех аргументов:a
,b
,c
,x
.
- функций:
Модификации
- Базовая
- Код должен находиться в файле
javascript-solutions/functionalExpression.js
. - Исходный код тестов
- Запускать c аргументом
hard
илиeasy
;
- Запускать c аргументом
- Код должен находиться в файле
- Mini (для тестирования)
- Не поддерживаются бинарные операции
- Код находится в файле functionalMiniExpression.js.
- Запускать c аргументом
hard
илиeasy
, напримерtestjs jstest.functional.MiniTest hard
- Запускать c аргументом
- Pie (31-33). Дополнительно реализовать поддержку:
- констант:
pi
– π;e
– основание натурального логарифма;
- констант:
- PieSinhCosh (34, 35). Дополнительно реализовать поддержку:
- модификации Pie
- операций:
sinh
– гиперболический синус,(sinh 3)
немного больше 10;cosh
– гиперболический косинус,(cosh 3)
немного меньше 10.
- PieIffAbs (36, 37). Дополнительно реализовать поддержку:
- модификации Pie
- операций:
abs
– абсолютное значение,-2 abs
равно 2;iff
– условный выбор: если первый аргумент неотрицательный, вернуть второй аргумент, иначе вернуть первый третий аргумент.one two 3 iff
равно 2-1 -2 -3 iff
равно -30 one two iff
равно 1;
- PieAvgMed (38, 39). Дополнительно реализовать поддержку:
- модификации Pie
- операций:
avg3
– арифметическое среднее трёх аргументов,1 2 3 avg3
равно 2;med5
– медиана пяти аргументов,1 2 -10 100 -100 med5
равно 1.
Запуск тестов
- Для запуска тестов используется GraalJS (часть проекта GraalVM, вам не требуется их скачивать отдельно)
- Для запуска тестов можно использовать скрипты TestJS.cmd и TestJS.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
javascript
(их нельзя перемещать, но можно вызывать из других каталогов). - В качестве аргументов командной строки указывается полное имя класса теста и модификация,
например
jstest.functional.FunctionalTest hard base
.
- Для самостоятельно запускаго из консоли необходимо использовать командную строку вида:
java -ea --module-path=<js>/graal --class-path <js> jstest.functional.FunctionalTest {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 myBase.main class jstest.functional.FunctionalTest
– неверно указан--class-path
;Exception in thread "myBase.main" java.lang.AssertionError: You should enable assertions by running 'java -ea jstest.functional.FunctionalExpressionTest'
– не указана опция-ea
;Exception in thread "myBase.main" jstest.EngineException: Script 'functionalExpression.js' not found
– в текущем каталоге отсутствует решение (functionalExpression.js
)
Запуск примеров
- В браузере
- Из консоли
- на Java: RunJS.cmd, RunJS.sh
- на node.js:
node RunJS.node.js
Лекция 1. Типы и функции
- Типы
- Функции
- Функции высшего порядка.
Обратите внимание, что функции
array.map
иarray.reduce
(аналогleftFold
входят в стандартную библиотеку). Обратите внимание на реализацию функцииmCurry
. - Пример: вектора и матрицы.
Лекция 2. Объекты и замыкания
Лекция 3. Другие возможности
- Обработка ошибок
- Чего нет в JS
- Стандартная библиотека
- Работа со свойствами
- Методы и классы
- JS 6+
- Модули: объявление использование
- Простейший ввод-вывод
Модификации
- Base
- Класс
expression.generic.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
.
- Класс
- Cmm (31-39)
- Дополнительно реализуйте унарные операции:
count
– число установленных битов,count 5
равно 2.
- Дополнительно реализуйте бинарную операцию (минимальный приоритет):
min
– минимум,2 min 3
равно 2;max
– максимум,2 max 3
равно 3.
- Дополнительно реализуйте унарные операции:
- CmmUls (34, 35)
- Реализуйте операции из модификации Cmm.
- Дополнительно реализуйте поддержку режимов:
u
– вычисления вint
без проверки на переполнение;l
– вычисления вlong
без проверки на переполнение;s
– вычисления вshort
без проверки на переполнение.
- CmmUlf (36, 37)
- Реализуйте операции из модификации Cmm.
- Дополнительно реализуйте поддержку режимов:
u
– вычисления вint
без проверки на переполнение;l
– вычисления вlong
без проверки на переполнение;f
– вычисления вfloat
без проверки на переполнение.
- CmmUlt (38, 39)
- Реализуйте операции из модификации Cmm.
- Дополнительно реализуйте поддержку режимов:
u
– вычисления вint
без проверки на переполнение;l
– вычисления вlong
без проверки на переполнение;t
– вычисления с усечением до кратных 10.
Модификации
- Базовая
- CountIf (31-33)
- Реализовать метод
countIf
, возвращающий число элеменов очереди, удовлетворяющих предикату.
- Реализовать метод
- IndexIf (34, 35)
- Functions (36, 37)
- Добавить в интерфейс очереди и реализовать методы
- Исходная очередь должна остаться неизменной
- Тип возвращаемой очереди должен соответствовать типу исходной очереди
- Взаимный порядок элементов должен сохраняться
- Дублирования кода быть не должно
- IfWhile (38, 39)
- Добавить в интерфейс очереди и реализовать методы
- Взаимный порядок элементов должен сохраняться
- Дублирования кода быть не должно
Модификации
- Базовая
- Классы должны находиться в пакете
queue
- Исходный код тестов
- Откомпилированные тесты
- Классы должны находиться в пакете
- Count (31-33)
- Реализовать метод
count
, возвращающий число вхождений элемента в очередь.
- Реализовать метод
- Index (34-35)
- Реализовать метод
indexOf
, возвращающий индекс первого вхождения элемента в очередь;lastIndexOf
, возвращающий индекс последнего вхождения элемента в очередь.
- Индексы отсчитываются с головы очереди.
- Если искомого элемента нет, методы должны возвращать
-1
.
- Реализовать метод
- Deque (36-39)
- Дополнительно реализовать методы
push
– добавить элемент в начало очереди;peek
– вернуть последний элемент в очереди;remove
– вернуть и удалить последний элемент из очереди.
- Дополнительно реализовать методы
- DequeCount (36, 37)
- Реализовать модификацию Deque;
- Реализовать метод
count
, возвращающий число вхождений элемента в очередь.
- DequeIndex (38, 39)
- Реализовать модификацию Deque;
- Реализовать метод
indexOf
, возвращающий индекс первого вхождения элемента в очередь;lastIndexOf
, возвращающий индекс последнего вхождения элемента в очередь.
- Индексы отсчитываются с головы очереди.
- Если искомого элемента нет, методы должны возвращать
-1
.
Если при тестировании вы получаете ошибку
... module java.base does not "opens java.util" to unnamed module ...
(характерно для Java 17+), то при запуске тестов добавьте опции
--add-opens
и java.base/java.util=ALL-UNNAMED
.
Модификации
- Базовая
- Класс
BinarySearch
должен находиться в пакетеsearch
- Исходный код тестов
- Откомпилированные тесты
- Класс
- Missing (31-33)
- На вход подаётся число
x
и массив, отсортированный по неубыванию. - Если в массиве отсутствует элемент, равный
x
, то требуется вывести индекс вставки в формате, определенном вArrays.binarySearch
. - Класс должен иметь имя
BinarySearchMissing
- На вход подаётся число
- Shift (34-35)
- На вход подается отсортированный (строго) по возрастанию массив,
циклически сдвинутый на
k
элементов. Требуется найтиk
. Все числа в массиве различны. - Класс должен иметь имя
BinarySearchShift
- На вход подается отсортированный (строго) по возрастанию массив,
циклически сдвинутый на
- Min (36, 37)
- На вход подается массив полученный приписыванием отсортированного (строго) по возрастанию массива в конец массива отсортированного (строго) по убыванию. Требуется найти в нём минимальное значение.
- Класс должен иметь имя
BinarySearchMin
- Uni (38, 39)
- На вход подается массив полученный приписыванием в конец массива отсортированного (строго) по убыванию, массива отсортированного (строго) по возрастанию. Требуется найти минимальную возможную длину первого массива.
- Класс должен иметь имя
BinarySearchUni
Для того, чтобы протестировать базовую модификацию домашнего задания:
-
Скачайте тесты (BinarySearchTest.jar)
-
Откомпилируйте
BinarySearch.java
-
Проверьте, что создался
BinarySearch.class
-
В каталоге, в котором находится
search/BinarySearch.class
выполните командуjava -jar <путь к BinarySearchTest.jar> Base
Например, если
BinarySearchTest.jar
находится в текущем каталоге, аBinarySearch.class
в каталогеsearch
, выполните командуjava -jar BinarySearchTest.jar Base
Модификации
- Base
- Класс
ExpressionParser
должен реализовывать интерфейс TripleParser - Классы
CheckedAdd
,CheckedSubtract
,CheckedMultiply
,CheckedDivide
иCheckedNegate
должны реализовывать интерфейс TripleExpression - Нельзя использовать типы
long
иdouble
- Нельзя использовать методы классов
Math
иStrictMath
- Исходный код тестов
- Первый аргумент:
easy
илиhard
- Последующие аргументы: модификации
- Первый аргумент:
- Класс
- PowLog (36-39)
- Дополнительно реализуйте бинарные операции (максимальный приоритет):
**
– возведение в степень,2 ** 3
равно 8;//
– логарифм,10 // 2
равно 3.
- Дополнительно реализуйте бинарные операции (максимальный приоритет):
- Shifts (38, 39)
- Дополнительно реализуйте бинарные операции с минимальным приоритетом:
<<
– сдвиг влево (1 << 5 + 3
равно1 << (5 + 3)
равно 256);>>
– сдвиг вправо (1024 >> 5 + 3
равно1024 >> (5 + 3)
равно 4);>>>
– арифметический сдвиг вправо (-1024 >>> 5 + 3
равно1024 >>> (5 + 3)
равно -4);
- Дополнительно реализуйте бинарные операции с минимальным приоритетом:
- MinMax (31-37)
- Дополнительно реализуйте бинарные операции (минимальный приоритет):
min
– минимум,2 min 3
равно 2;max
– максимум,2 max 3
равно 3.
- Дополнительно реализуйте бинарные операции (минимальный приоритет):
- Abs (36-39)
- Дополнительно реализуйте унарную операцию
abs
– модуль числа,abs -5
равно 5.
- Дополнительно реализуйте унарную операцию
- Zeroes (31-35)
- Дополнительно реализуйте унарные операции
l0
– число старших нулевых бит,l0 123456
равно 15;t0
– число младших нулевых бит,t0 123456
равно 6.
- Дополнительно реализуйте унарные операции