ITMO CT 2023-y1-spring
Course by kgeorgiy
Модификации
- Base
- Код должен находиться в файле
prolog-solutions/expression.pl
.
- Код должен находиться в файле
- SinCos (32, 34). Дополнительно реализовать поддержку:
- унарных операций:
op_sin
(sin
) – синус,sin(4846147)
примерно равно 1;op_cos
(cos
) – косинус,cos(5419351)
примерно равно 1.
- унарных операций:
- SinhCosh (33, 35). Дополнительно реализовать поддержку:
- унарных операций:
op_sinh
(sinh
) – гиперболический синус,sinh(3)
немного больше 10;op_cosh
(cosh
) – гиперболический косинус,cosh(3)
немного меньше 10.
- унарных операций:
- Variables. Дополнительно реализовать поддержку:
- Переменных, состоящих из произвольного количества букв
XYZ
в любом регистре- Настоящее имя переменной определяется первой буквой ее имени
- Переменных, состоящих из произвольного количества букв
- VarBoolean (36, 37). Сделать модификацию Variables и дополнительно реализовать поддержку:
- Булевских операций
- Аргументы: число больше 0 →
true
, иначе →false
- Результат:
true
→ 1,false
→ 0 op_not
(!
) - отрицание:!5
равно 0op_and
(&&
) – и:5 & -6
равно 0op_or
(||
) - или:5 & -6
равно 1op_xor
(^^
) - исключающее или:5 ^ -6
равно 1
- Аргументы: число больше 0 →
- Булевских операций
- VarImplIff (38, 39). Сделать модификацию Boolean и дополнительно реализовать поддержку:
- Булевских операций
op_impl
(->
) – импликация (правоассоциативна):-4 -> 1
равно 1op_iff
(<->
) - тогда и только тогда:2 <-> 6
равно 1
- Булевских операций
Модификации
- Базовая
- Код должен находиться в файле
prolog-solutions/tree-map.pl
.
- Код должен находиться в файле
- Keys (32, 34)
- Добавьте правило:
map_keys(Map, Keys)
, возвращающее ключи в порядке возрастания.
- Добавьте правило:
- Value (33, 35)
- Добавьте правило:
map_values(Map, Values)
, возвращающее значения в порядке возрастания ключей.
- Добавьте правило:
- PutIfAbsent (36, 37)
- Добавьте правило
map_putIfAbsent(Map, Key, Value, Result)
, добавляющее новый ключ и значение.
- Добавьте правило
- PutCeiling (38, 39)
- Добавьте правила:
map_getCeiling(Map, Key, Value)
, возвращающее значение, соответствующее минимальному ключу, большему либо равному заданному;map_putCeiling(Map, Key, Value, Result)
, заменяющее значение, соответствующее минимальному ключу, большему либо равному заданному (если такой существует).
- Добавьте правила:
Модификации
- Базовая
- Код должен находиться в файле
prolog-solutions/primes.pl
.
- Код должен находиться в файле
- Square (32, 34)
- Добавьте правило
square_divisors(N, D)
, возвращающее делители N²:square_divisors(6, [2, 2, 3, 3])
.
- Добавьте правило
- Cube (33, 35)
- Добавьте правило
cube_divisors(N, D)
, возвращающее делители N³:cube_divisors(6, [2, 2, 2, 3, 3, 3])
.
- Добавьте правило
- Compact (36, 37)
- Добавьте правило
compact_prime_divisors(N, CDs)
, гдеCDs
— список пар (простое, степень):compact_prime_divisors(120, [(2, 3), (3, 1), (5, 1)])
.
- Добавьте правило
- Divisors (38, 39)
- Добавьте правило
divisors_divisors(N, Divisors)
, гдеDivisors
— список разложений на простые делители делителей числаN
:divisors_divisors(12, [[], [2], [3], [2,2], [2,3], [2,2,3]])
.
- Добавьте правило
Для запуска тестов можно использовать скрипты TestProlog.cmd и TestProlog.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
prolog
(их нельзя перемещать, но можно вызывать из других каталогов). - Полное имя класса теста указывается в качестве первого аргумента командной строки,
например,
prtest.primes.PrimesTest
. - Тестируемое решение должно находиться в текущем каталоге.
Лекция 1. Факты, правила и вычисления
Лекция 2. Задачи, унификация и объекты
Лекция 3. Преобразование в строку и разбор
Модификации
- Base
- Код должен находиться в файле
clojure-solutions/expression.clj
.
- Код должен находиться в файле
- Variables. Дополнительно реализовать поддержку:
- Переменных, состоящих из произвольного количества букв
XYZ
в любом регистре- Настоящее имя переменной определяется первой буквой ее имени
- Переменных, состоящих из произвольного количества букв
- IncDec (32, 34). Сделать модификацию Variables и дополнительно реализовать поддержку:
- Унарных операций:
Inc
(++
) – инкремент,(33 ++)
равно 34;Dec
(--
) – декремент,(33 --)
равно 32.
- Унарных операций:
- UPowLog (33, 35). Сделать модификацию Variables и дополнительно реализовать поддержку:
- Унарных операций:
UPow
(**
) – возведение в степень,(8 **)
примерно равно 2981;ULog
(//
) – натуральный логарифм абсолютной величины,(2981 //)
примерно равно 8.
- Унарных операций:
- Boolean (36, 37). Сделать модификацию Variables и дополнительно реализовать поддержку:
- Булевских операций
- Аргументы: число больше 0 →
true
, иначе →false
- Результат:
true
→ 1,false
→ 0 Not
(!
) - отрицание:!5
равно 0And
(&&
) – и:5 & -6
равно 0Or
(||
) - или:5 & -6
равно 1Xor
(^^
) - исключающее или:5 ^ -6
равно 1- операции по увеличению приоритета:
^^
,||
,&&
, операции базовой модификации
- Аргументы: число больше 0 →
- Булевских операций
- ImplIff (38, 39). Сделать модификацию Boolean и дополнительно реализовать поддержку:
- Булевских операций
Impl
(->
) – импликация (правоассоциативна):-4 -> 1
равно 1Iff
(<->
) - тогда и только тогда:2 <-> 6
равно 1- операции по увеличению приоритета:
<->
,->
, операции модификации Boolean
- Булевских операций
Модификации
- Базовая
- Код должен находиться в файле
clojure-solutions/expression.clj
.
- Код должен находиться в файле
- SinCos (32, 34). Дополнительно реализовать поддержку:
- унарных операций:
Sin
(sin
) – синус,(sin 4846147)
примерно равно 1;Cos
(cos
) – косинус,(cos 5419351)
примерно равно 1.
- унарных операций:
- SinhCosh (33, 35). Дополнительно реализовать поддержку:
- унарных операций:
Sinh
(sinh
) – гиперболический синус,(sinh 3)
немного больше 10;Cosh
(cosh
) – гиперболический косинус,(cosh 3)
немного меньше 10.
- унарных операций:
- MeansqRMS (36, 37). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Meansq
(meansq
) – среднее квадратов,(meansq 2 10 22)
равно 196;RMS
(rms
) – Root mean square,(rms 2 10 22)
равно 14;
- операций произвольного числа аргументов:
- SumexpLSE (38, 39). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Sumexp
(sumexp
) – сумма экспонент,(sumexp 2 3 16)
примерно равно 8886137;LSE
(lse
) – LogSumExp,(lse 2 3 16)
примерно равно 16;
- операций произвольного числа аргументов:
Модификации
- Base
- Код должен находиться в файле
clojure-solutions/expression.clj
.
- Код должен находиться в файле
- ExpLn (32, 34). Дополнительно реализовать поддержку:
- унарных операций:
exp
– экспонента,(exp 8)
примерно равно 2981;ln
– натуральный логарифм абсолютной величины,(ln -2981)
примерно равно 8.
- унарных операций:
- ArcTan (33, 35). Дополнительно реализовать поддержку:
- операций:
atan
– арктангенс,(atan 1256)
примерно равно 1.57;atan2
– арктангенс,(atan2 841 540)
примерно равно 1.
- операций:
- SumexpLSE (36, 37). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
sumexp
– сумма экспонент,(sumexp 2 3 16)
примерно равно 8886137;lse
– LogSumExp,(lse 2 3 16)
примерно равно 16;
- операций произвольного числа аргументов:
- MeansqRMS (38, 39). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
meansq
– среднее квадратов,(meansq 2 10 22)
равно 196;rms
– Root mean square,(rms 2 10 22)
равно 14;
- операций произвольного числа аргументов:
Модификации
- Базовая
- Код должен находиться в файле
clojure-solutions/linear.clj
.
- Код должен находиться в файле
- Shapeless (32 - 35)
- Добавьте операции поэлементного
сложения (
s+
), вычитания (s-
), умножения (s*
) и деления (sd
) чисел и векторов любой (в том числе, переменной) формы. Например,(s+ [[1 2] 3] [[4 5] 6])
должно быть равно[[5 7] 9]
.
- Добавьте операции поэлементного
сложения (
- Tensor (36, 37)
- Назовем тензором многомерную прямоугольную таблицу чисел.
- Добавьте операции поэлементного
сложения (
t+
), вычитания (t-
), умножения (t*
) и деления (td
) тензоров. Например,(t+ [[1 2] [3 4]] [[5 6] [7 8]])
должно быть равно[[6 8] [10 12]]
.
- 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).
Для этого, элементы тензора копируются по недостающим осям.
Например, распространив тензор
[[1 2]]
формы (1, 2) до формы (1, 2, 3) получим[[[1 1 1] [2 2 2]]]
, а распространив1
до формы (2, 3) получим[[1 1 1] [1 1 1]]
. - Тензоры называются совместимыми, если один из них может быть распространен до формы другого. Например, тензоры формы (1, 2, 3) и (1, 2) совместимы, а (1, 2, 3) и (2, 1) – нет. Числа совместимы с тензорами любой формы.
- Добавьте операции поэлементного
сложения (
tb+
), вычитания (tb-
), умножения (tb*
) и деления (tbd
) совместимых тензоров. Если формы тензоров не совпадают, то тензоры меньшей размерности должны быть предварительно распространены до тензоров большей размерности. Например,(tb+ 1 [[10 20 30] [40 50 60]] [100 200])
должно быть равно[[111 121 131] [241 251 261]]
. - Исходный код тестов
Документация
Запуск Clojure
- Консоль: Windows, *nix
- Интерактивный:
RunClojure
- С выражением:
RunClojure --eval "<выражение>"
- Скрипт:
RunClojure <файл скрипта>
- Справка:
RunClojure --help
- Интерактивный:
- IDE
- IntelliJ Idea: плагин Cursive
- Eclipse: плагин Counterclockwise
Лекция 1. Функции
Лекция 2. Внешний мир
Лекция 3. Объекты
- Прототипное наследование
- Библиотека для ДЗ proto.clj
- Java-классы
- Изменяемое состояние
Лекция 4. Комбинаторные парсеры
- Базовые функции
- Комбинаторы
- Библиотека для ДЗ parser.clj
- JSON
Лекция 5. Макросы и основания математики
Это задание преднозначено для проверки правильности настройки Clojure. Вам надо проверить, что оно успешно проверяется на вашем компьютере.
Для запуска тестов используются скрипты TestClojure.cmd и TestClojure.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
clojure
(их нельзя перемещать, но можно вызывать из других каталогов). - Тестируемое решение должно находиться в текущем каталоге.
- В качестве аргументов командной строки указывается
полное имя класса теста, сложность и модификация,
например,
cljtest.example.ExampleTest hard base
.
Модификации
- base
- Код решения
clojure-solutions/example.clj
- Исходный код тестов
- Запускать c аргументом
hard
илиeasy
.
- Запускать c аргументом
- Код решения
Модификации
- Base
- Код должен находиться в файле
javascript-solutions/objectExpression.js
.
- Код должен находиться в файле
- SumAvg (32-35). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
sum
– сумма,(sum 1 2 3)
равно 6;avg
– среднее,(avg 1 2 3)
равно 2;
- операций произвольного числа аргументов:
- Postfix (36-39). Дополнительно реализовать поддержку:
- Выражений в постфиксной записи:
(2 3 +)
равно 5- функция
parsePostfix
- метод
postfix
- Исходный код тестов
- Запускать c указанием модификации и сложности (
easy
илиhard
).
- Запускать c указанием модификации и сложности (
- Выражений в постфиксной записи:
- SumexpLSE (36, 37). Дополнительно реализовать поддержку:
- Операций произвольного числа аргументов:
Sumexp
(sumexp
) – сумма экспонент,(2 3 16 sumexp)
примерно равно 8886137;LSE
(lse
) – LogSumExp,(2 3 16 lse)
примерно равно 16;
- Операций произвольного числа аргументов:
- MeansqRMS (38, 39). Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Meansq
(meansq
) – среднее квадратов,(2 10 22 meansq)
равно 196;RMS
(rms
) – Root mean square,(2 10 22 rms)
равно 14;
- операций произвольного числа аргументов:
Модификации
- Base
- Код должен находиться в файле
javascript-solutions/objectExpression.js
.
- Код должен находиться в файле
- ExpLn (32, 34). Дополнительно реализовать поддержку:
- унарных функций:
Exp
(exp
) – экспонента,8 exp
примерно равно 2981;Ln
(Ln
) – натуральный логарифм абсолютной величины,2981 ln
примерно равно 8.
- унарных функций:
- ArcTan (33, 35). Дополнительно реализовать поддержку:
- функций:
ArcTan
(atan
) – арктангенс,1256 atan
примерно равно 1.57;ArcTan2
(atan2
) – арктангенс,841 540 atan2
примерно равно 1.
- функций:
- Distance (36, 37). Дополнительно реализовать поддержку:
- функций от
N
аргументов дляN=2..5
:SumSqN
(sumsqN
) – сумма квадратов,3 4 sumsq2
равно 25;DistanceN
(distanceN
) – длина вектора,3 4 distance2
равно 5.
- функций от
- SumrecHMean (38, 39). Дополнительно реализовать поддержку:
- функций от
N
аргументов дляN=2..5
:SumrecN
(sumrecN
) – сумма обратных величин,1 2 3 6 sumrec4
равно 2;HMeanN
(hmeanN
) – среднее гармоническое,2 3 6 hmean3
равно 3.
- функций от
Модификации
- Базовая
- Код должен находиться в файле
javascript-solutions/functionalExpression.js
.
- Код должен находиться в файле
- OneTwo (32-39). Дополнительно реализовать поддержку:
- констант:
one
– 1;two
– 2;
- констант:
- SinCos (32, 34). Дополнительно реализовать поддержку:
- операций:
sin
– синус,3.14159265 sin
примерно равно 0;cos
– косинус,3.14159265 cos
примерно равно -1.
- операций:
- SinhCosh (33, 35). Дополнительно реализовать поддержку:
- операций:
sinh
– гиперболический синус,(sinh 3)
немного больше 10;cosh
– гиперболический косинус,(cosh 3)
немного меньше 10.
- операций:
- FP (36, 37). Дополнительно реализовать поддержку:
- операций:
*+
(madd
) – тернарный оператор произведение-сумма,2 3 4 *+
равно 10;_
(floor
) – округление вниз2.7 _
равно 2;^
(ceil
) – округление вверх2.7 ^
равно 3.
- операций:
- ArgMinMax (38, 39). Дополнительно реализовать поддержку:
- операций:
argMin3
– индекс минимального из трёх аргументов,3 4 1 argMin3
равно 2;argMax3
– индекс максимального из трёх аргументов,3 4 1 argMin3
равно 1;argMin5
– индекс минимального из пяти аргументов,3 4 1 5 6 argMin3
равно 2;argMax5
– индекс максимального из пяти аргументов,3 4 10 5 6 argMax3
равно 2;
- операций:
Запуск примеров
- В браузере
- Из консоли
- на Java: RunJS.cmd, RunJS.sh
- на node.js:
node RunJS.node.js
Лекция 1. Типы и функции
- Типы
- Функции
- Функции высшего порядка.
Обратите внимание на реализацию функции
mCurry
. Обратите внимание, что функцииarray.map
иarray.reduce
(аналогleftFold
входят в стандартную библиотеку). - Пример: вектора и матрицы.
Лекция 2. Объекты и замыкания
Лекция 3. Другие возможности
- Обработка ошибок
- Чего нет в JS
- Стандартная библиотека
- Работа со свойствами
- Методы и классы
- JS 6+
- Модули: объявление использование
- Простейший ввод-вывод
Это задание преднозначено для проверки правильности настройки JavaScript. Вам надо проверить, что оно успешно проверяется на вашем компьютере.
Запуск тестов
- Для запуска тестов используется GraalJS (часть проекта GraalVM, вам не требуется их скачивать отдельно)
- Для запуска тестов можно использовать скрипты TestJS.cmd и TestJS.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
javascript
(их нельзя перемещать, но можно вызывать из других каталогов). - В качестве аргументов командной строки указывается полное имя класса теста и модификация,
например
jstest.example.ExampleTest 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 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
)
Модификации
- base
- Код решения
java-solutions/example.js
- Исходный код тестов
- Запускать c аргументом
hard
илиeasy
.
- Запускать c аргументом
- Код решения
Модификации
- 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
- Последующие аргументы: модификации
- Первый аргумент:
- Класс
- Ufs (32-35)
- Дополнительно реализуйте поддержку режимов:
u
– вычисления вint
без проверки на переполнение;f
– вычисления вfloat
без проверки на переполнение;s
– вычисления вshort
без проверки на переполнение.
- Дополнительно реализуйте поддержку режимов:
- Asm (36-39)
- Дополнительно реализуйте унарные операции:
abs
– модуль числа,abs -5
равно 5;square
– возведение в квадрат,square 5
равно 25.
- Дополнительно реализуйте бинарную операцию (максимальный приоритет):
mod
– взятие по модулю, приоритет как у умножения (1 + 5 mod 3
равно1 + (5 mod 3)
равно3
).
- Дополнительно реализуйте унарные операции:
- Uls (36, 37)
- Дополнительно реализуйте поддержку режимов:
u
– вычисления вint
без проверки на переполнение;l
– вычисления вlong
без проверки на переполнение;s
– вычисления вshort
без проверки на переполнение.
- Дополнительно реализуйте поддержку режимов:
- Ups (38, 39)
- Дополнительно реализуйте поддержку режимов:
u
– вычисления вint
без проверки на переполнение;p
– вычисления в целых числах по модулю 10079;s
– вычисления вshort
без проверки на переполнение.
- Дополнительно реализуйте поддержку режимов:
Модификации
- Count (32, 34)
- Реализовать метод
count
, возвращающий число вхождений элемента в очередь.
- Реализовать метод
- Index (33, 35)
- Реализовать метод
indexOf
, возвращающий индекс первого вхождения элемента в очередь;lastIndexOf
, возвращающий индекс последнего вхождения элемента в очередь.
- Индексы отсчитываются с головы очереди.
- Если искомого элемента нет, методы должны возвращать
-1
.
- Реализовать метод
- Contains (36, 37)
- Добавить в интерфейс очереди и реализовать методы
contains(element)
– проверяет, содержится ли элемент в очередиremoveFirstOccurrence(element)
– удаляет первое вхождение элемента в очередь и возвращает было ли такое
- Дублирования кода быть не должно
- Добавить в интерфейс очереди и реализовать методы
- Nth (38, 39)
- Добавить в интерфейс очереди и реализовать методы
getNth(n)
– создать очередь, содержащую каждый n-й элемент, считая с 1removeNth(n)
– создать очередь, содержащую каждый n-й элемент, и удалить их из исходной очередиdropNth(n)
– удалить каждый n-й элемент из исходной очереди
- Тип возвращаемой очереди должен соответствовать типу исходной очереди
- Дублирования кода быть не должно
- Добавить в интерфейс очереди и реализовать методы
Модификации
- Базовая
- Классы должны находиться в пакете
queue
- Классы должны находиться в пакете
- ToStr (32, 34)
- Реализовать метод
toStr
, возвращающий строковое представление очереди в виде '[
' голова ',
' ... ',
' хвост ']
'
- Реализовать метод
- ToArray (33, 35)
- Реализовать метод
toArray
, возвращающий массив, содержащий элементы, лежащие в очереди в порядке от головы к хвосту.
- Реализовать метод
- Deque
- Дополнительно реализовать методы
push
– добавить элемент в начало очереди;peek
– вернуть последний элемент в очереди;remove
– вернуть и удалить последний элемент из очереди.
- Дополнительно реализовать методы
- DequeToArray (36, 37)
- Реализовать модификацию Deque;
- Реализовать метод
toArray
, возвращающий массив, содержащий элементы, лежащие в очереди в порядке от головы к хвосту.
- DequeIndexed (38, 39)
- Реализовать модификацию Deque
- Реализовать методы
get
– получить элемент по индексу, отсчитываемому с головы;set
– заменить элемент по индексу, отсчитываемому с головы.
- Для работы тестов необходимо добавить опцию JVM
--add-opens java.base/java.util=ALL-UNNAMED
Модификации
- Базовая
- Класс
BinarySearch
должен находиться в пакетеsearch
- Класс
- Oddity (32 - 37)
- Если сумма всех чисел во входе чётная, то должна быть использоваться рекурсивная версия, иначе — итеративная.
- Shift (32, 34)
- На вход подается отсортированный (строго) по убыванию массив,
циклически сдвинутый на
k
элементов. Требуется найтиk
. Все числа в массиве различны. - Класс должен иметь имя
BinarySearchShift
- На вход подается отсортированный (строго) по убыванию массив,
циклически сдвинутый на
- Max (33, 35)
- На вход подается циклический сдвиг отсортированного (строго) по возрастанию массива. Требуется найти в нём максимальное значение.
- Класс должен иметь имя
BinarySearchMax
- Uni (36, 37)
- На вход подается массив полученный приписыванием в конец массива отсортированного (строго) по возрастанию, массива отсортированного (строго) по убыванию. Требуется найти минимальную возможную длину первого массива.
- Класс должен иметь имя
BinarySearchUni
- Span (38, 39)
- На вход подаётся число
x
и массив, отсортированный по неубыванию. Требуется вывести два числа: начало и длину диапазона элементов, равныхx
. Если таких элементов нет, то следует вывести пустой диапазон, у которого левая граница совпадает с местом вставки элементаx
. - Не допускается использование типов
long
иBigInteger
. - Класс должен иметь имя
BinarySearchSpan
- На вход подаётся число
Модификации
- Base
- Класс
ExpressionParser
должен реализовывать интерфейс TripleParser - Классы
CheckedAdd
,CheckedSubtract
,CheckedMultiply
,CheckedDivide
иCheckedNegate
должны реализовывать интерфейс TripleExpression - Нельзя использовать типы
long
иdouble
- Нельзя использовать методы классов
Math
иStrictMath
- Класс
- SetClear (32-37)
- Дополнительно реализуйте бинарные операции (минимальный приоритет):
set
– установка бита,2 set 3
равно 10;clear
– сброс бита,10 clear 3
равно 2.
- Дополнительно реализуйте бинарные операции (минимальный приоритет):
- Count (32-37)
- Дополнительно реализуйте унарную операцию
count
– число установленных битов,count -5
равно 31.
- Дополнительно реализуйте унарную операцию
- GcdLcm (38, 39)
- Дополнительно реализуйте бинарные операции (минимальный приоритет):
gcd
– НОД,2 gcd -3
равно 1;lcm
– НОК,2 lcm -3
равно -6.
- Дополнительно реализуйте бинарные операции (минимальный приоритет):
- Reverse (38, 39)
- Дополнительно реализуйте унарную операцию
reverse
– число с переставленными цифрами,reverse -12345
равно-54321
.
- Дополнительно реализуйте унарную операцию
- PowLog10 (36-39)
- Дополнительно реализуйте унарные операции:
log10
– логарифм по уснованию 10,log10 1000
равно 3;pow10
– 10 в степени,pow10 4
равно 10000.
- Дополнительно реализуйте унарные операции: