Модификации
- Простая
- Код должен находиться в файле
sorted-list-map.pl. - Исходный код тестов
- Запускать c аргументом
sorted
- Запускать c аргументом
- Код должен находиться в файле
- Сложная
- Код должен находиться в файле
tree-map.pl. - Исходный код тестов
- Запускать c аргументом
hardилиbonus
- Запускать c аргументом
- Код должен находиться в файле
- Replace
- Size
- floorKey
Запуск Prolog
Лекция 1. Введение в пролог
- Учебный план
- Вычисления
- Списки
- Задача о расстановке ферзей
- Загадка Эйнштейна
- Арифметические выражения
Модификации
- Базовая
- Код должен находиться в файле
expression.clj. - Исходный код тестов
- Запускать c аргументом
easyилиhard
- Запускать c аргументом
- Код должен находиться в файле
- Variables. Дополнительно реализовать поддержку:
- Переменных, состоящих из произвольного количества букв
XYZв любом регистре- Настоящее имя переменной определяется первой буквой ее имени
- Исходный код тестов
- Переменных, состоящих из произвольного количества букв
- PowLog. Дополнительно реализовать поддержку:
- Бинарных правоассоциативных операций максимального приоритета:
Pow(**) – возведения в степень:4 ** 3 ** 2равно4 ** (3 ** 2)равно 262144Log(//) – взятия логарифма:8 // 9 // 3равно8 // (9 // 3)равно 3
- Исходный код тестов
- Бинарных правоассоциативных операций максимального приоритета:
- Bitwise. Дополнительно реализовать поддержку:
- Побитовых операций
And(&) – и:5 & 6равно 4Or(|) - или:5 & 6равно 7Xor(^) - исключающее:5 ^ 6примерно равно 1.66881E-308- для реализации операций используйте doubleToLongBits и longBitsToDouble
- операции по увеличиению приоритета:
^,|,&,+и-,*и/
- Исходный код тестов
- Побитовых операций
Модификации
- Базовая
- Код должен находиться в файле
expression.clj. - Исходный код тестов
- Запускать c аргументом
easyилиhard
- Запускать c аргументом
- Код должен находиться в файле
- SinhCosh. Дополнительно реализовать поддержку:
- унарных операций:
Sinh(sinh) – гиперболический синус,(sinh 3)немного больше 10;Cosh(cosh) – гиперболический косинус,(cosh 3)немного меньше 10.
- Исходный код тестов
- унарных операций:
- SquareSqrt. Дополнительно реализовать поддержку:
- унарных операций:
Square(square) – возведение в квадрат,(square 3)равно 9;Sqrt(sqrt) – извлечение квадратного корня из модуля аргумента,(sqrt -9)равно 3.
- Исходный код тестов
- унарных операций:
Модификации
- Базовая
- Код должен находиться в файле
expression.clj. - Исходный код тестов
- Запускать c аргументом
easyилиhard
- Запускать c аргументом
- Код должен находиться в файле
- SquareSqrt. Дополнительно реализовать поддержку:
- унарных операций:
square(square) – возведение в квадрат,(square 3)равно 9;sqrt(sqrt) – извлечение квадратного корня из модуля аргумента,(sqrt -9)равно 3.
- Исходный код тестов
- унарных операций:
- MinMax. Дополнительно реализовать поддержку:
- операций:
min(min) – минимум,(min 1 2 6)равно 1;max(max) – максимум,(min 1 2 6)равно 6;
- Исходный код тестов
- операций:
- MedAvg. Дополнительно реализовать поддержку:
- операций:
med(med) – медиана,(med 1 2 6)равно 2;avg(max) – среднее,(min 1 2 6)равно 3;
- Исходный код тестов
- операций:
Модификации
- Базовая
- Код должен находиться в файле
linear.clj. - Исходный код тестов
- Код должен находиться в файле
- Shapeless
- Добавьте операции поэлементного сложения (
s+), вычитания (s-) и умножения (s*) чисел и векторов любой (в том числе, переменной) формы. Например,(s+ [[1 2] 3] [[4 5] 6])должно быть равно[[5 7] 9]. - Исходный код тестов
- Добавьте операции поэлементного сложения (
- Tensor
- Назовем тензором многомерную прямоугольную таблицу чисел.
- Добавьте операции поэлементного сложения (
t+), вычитания (t-) и умножения (t*) тензоров. Например,(s+ [[1 2] [3 4]] [[5 6] [7 8]])должно быть равно[[6 8] [10 12]]. - Исходный код тестов
- Broadcast
- Назовем тензором многомерную прямоугольную таблицу чисел.
- Форма тензора – последовательность чисел
(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) – нет. Числа совместимы с тензорами любой формы.
- Добавьте операции поэлементного сложения (
b+), вычитания (b-) и умножения (b*) совместимых тензоров. Если формы тензоров не совпадают, то тензоры меньшей размерности должны быть предварительно распространены до тензоров большей размерности. Например,(b+ 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. Объекты и вычисления
Лекция 4. Комбинаторные парсеры
Модификации
- Базовая
- Код должен находиться в файле
objectExpression.js. - Исходный код тестов
- Запускать c аргументом
easyилиhard
- Запускать c аргументом
- Код должен находиться в файле
- PrefixSumAvg. Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Sum(sum) – сумма,(sum 1 2 3)равно 6;Avg(avg) – арифметическое среднее,(avg 1 2 3)равно 2;
- Исходный код тестов
- операций произвольного числа аргументов:
- PostfixSumAvg. Дополнительно реализовать поддержку:
- выражений в постфиксной записи:
(2 3 +)равно 5 - унарных операций:
Sum(sum) – сумма,(1 2 3 sum)равно 6;Avg(avg) – арифметическое среднее,(1 2 3 avg)равно 2;
- Исходный код тестов
- выражений в постфиксной записи:
- PrefixSumexpSoftmax. Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
Sumexp(sumexp) – сумма экспонент,(8 8 9)примерно равно 14065;Softmax(softmax) – softmax первого аргумента,(softmax 1 2 3)примерно равно 9;
- Исходный код тестов
- операций произвольного числа аргументов:
- PostfixSumexpSoftmax. Дополнительно реализовать поддержку:
- выражений в постфиксной записи:
(2 3 +)равно 5 - унарных операций:
Sumexp(sumexp) – сумма экспонент,(8 8 9 sumexp)примерно равно 14065;Softmax(softmax) – softmax первого аргумента,(1 2 3 softmax)примерно 9;
- Исходный код тестов
- выражений в постфиксной записи:
- PostfixSumsqLength. Дополнительно реализовать поддержку:
- выражений в постфиксной записи:
(2 3 +)равно 5 - унарных операций:
Sumsq(sumsq) – сумма квадратов,(1 2 3 sumsq)равно 14;Length(lengthу) – длина вектора,(3 4 length)равно 5;
- Исходный код тестов
- выражений в постфиксной записи:
Модификации
- Базовая
- Код должен находиться в файле
objectExpression.js. - Исходный код тестов
- Запускать c аргументом
easy,hardилиbonus.
- Запускать c аргументом
- Код должен находиться в файле
- ArcTan. Дополнительно реализовать поддержку:
- функций:
ArcTan(atan) – арктангенс,1256 atanпримерно равно 1.57;ArcTan2(atan2) – арктангенс,841 540 atan2примерно равно 1;
- Исходный код тестов
- функций:
- MinMax. Дополнительно реализовать поддержку:
- функций:
Min3(min3) – минимум из трех аргументов,1 2 3 minравно 1;Max5(max5) – максимум из пяти аргументов,1 2 3 4 5 maxравно 5;
- Исходный код тестов
- функций:
- SinhCosh. Дополнительно реализовать поддержку:
- унарных функций:
Sinh(sinh) – гиперболический синус,3 sinhнемного больше 10;Cosh(cosh) – гиперболический косинус,3 coshнемного меньше 10;
- Исходный код тестов
- унарных функций:
Запуск примеров
- В браузере
- Из консоли
- на Java: RunJS.cmd, RunJS.sh
- на node.js:
node RunJS.node.js
Лекция 1. Типы и функции
- Типы
- Функции
- Функции высшего порядка.
Обратите внимание на реализацию функции
mCurry.
Лекция 2. Объекты и методы
Лекция 3. Другие возможности
Модификации
- Базовая
- Код должен находиться в файле
functionalExpression.js. - Исходный код тестов
- Запускать c аргументом
hardилиeasy;
- Запускать c аргументом
- Код должен находиться в файле
- PieAvgMed. Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
pi– π;e– основание натурального логарифма;
- операций:
avg5– арифметическое среднее пяти аргументов,1 2 3 4 5 avg5равно 7.5;med3– медиана трех аргументов,1 2 -10 med3равно 1.
- Исходный код тестов
- Запускать c аргументом
hard
- Запускать c аргументом
- переменных:
- Variables. Дополнительно реализовать поддержку:
- переменных:
y,z; - Исходный код тестов
- Запускать c аргументом
easy
- Запускать c аргументом
- переменных:
- OneIffAbs. Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
one– 1;two– 2;
- операций:
abs– абсолютное значение,-2 absравно 2;iff– условный выбор: если первый аргумент неотрицательный, вернуть второй аргумент, иначе вернуть первый третий аргумент.iff one two 3равно 2iff -1 -2 -3равно -3iff 0 one twoравно 1;
- Исходный код тестов
- Запускать c аргументом
hard
- Запускать c аргументом
- переменных:
- IffAbs. Дополнительно реализовать поддержку:
- переменных:
y,z; - операций:
abs– абсолютное значение,-2 absравно 2;iff– условный выбор: если первый аргумент неотрицательный, вернуть второй аргумент, иначе вернуть первый третий аргумент:iff 1 2 3равно 2iff -1 -2 -3равно -3iff 0 1 2равно 1;
- Исходный код тестов
- Запускать c аргументом
hard
- Запускать c аргументом
- переменных:
- OneTwo. Дополнительно реализовать поддержку:
- переменных:
y,z; - констант:
one– 1;two– 2;
- Исходный код тестов
- Запускать c аргументом
easy
- Запускать c аргументом
- переменных:
Запуск тестов
- Для запуска тестов используется GraalVM
- Для запуска тестов можно использовать скрипты TestJS.cmd и TestJS.sh
- Репозиторий должен быть скачан целиком.
- Скрипты должны находиться в каталоге
javascript(их нельзя перемещать, но можно вызывать из других каталогов).
- Для самостоятельно запуска из консоли необходимо использовать командную строку вида:
java -ea -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI --module-path=<js>/graal --upgrade-module-path=<js>/graal/compiler.jar --class-path <js> jstest.functional.FunctionalExpressionTest {hard|easy}, где-ea– включение проверок времени исполнения;-XX:+UnlockExperimentalVMOptionsи-XX:+EnableJVMCI– опции необходимые для запуска Graal;--module-path=<js>/graalпуть к модулям Graal (здесь и далее<js>путь к каталогуjavascriptэтого репозитория);--upgrade-module-path=<js>/graal/compiler.jarпуть к JIT-компилятору Graal;--class-path <js>путь к откомпилированным тестам;- {
hard|easy} указание тестируемой модификации.
- При запуске из 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;ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory could not be instantiated– неверно указан--upgrade-module-pathили не указана опция-XX:+EnableJVMCI;Graal.js not found– неверно указаны--module-pathи--upgrade-module-pathError: Could not find or load main class jstest.functional.FunctionalExpressionTest– неверно указан--class-path;Error: Could not find or load main class <other class>– неверно указано полное имя класса теста;Exception in thread "main" java.lang.AssertionError: You should enable assertions by running 'java -ea jstest.functional.FunctionalExpressionTest'– не указана опция-ea;Error: VM option 'EnableJVMCI' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.– не указана опция-XX:+UnlockExperimentalVMOptions;First argument should be one of: "easy", "hard", found: XXX– неверно указана сложность;Exception in thread "main" jstest.EngineException: Script 'functionalExpression.js' not found– в текущем каталоге отсутствует решение (functionalExpression.js)
Модификации
- Базовая
- Класс
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.
- Исходный код тестов
- Класс
- AsmUfb
- Дополнительно реализовать унарные операции:
abs– модуль числа,abs -5равно 5;square– возведение в квадрат,square 5равно 25.
- Дополнительно реализовать бинарную операцию (максимальный приоритет):
mod– взятие по модулю, приоритет как у умножения (1 + 5 mod 3равно1 + (5 mod 3)равно3).
- Дополнительно реализовать поддержку режимов:
u– вычисления вintбез проверки на переполнение;f– вычисления вfloatбез проверки на переполнение;b– вычисления вbyteбез проверки на переполнение.
- Исходный код тестов
- Дополнительно реализовать унарные операции:
- Ls
- Дополнительно реализовать поддержку режимов:
l– вычисления вlongбез проверки на переполнение;s– вычисления вshortбез проверки на переполнение.
- Исходный код тестов
- Дополнительно реализовать поддержку режимов:
- Ufb
- Дополнительно реализовать поддержку режимов:
u– вычисления вintбез проверки на переполнение;f– вычисления вfloatбез проверки на переполнение;b– вычисления вbyteбез проверки на переполнение.
- Исходный код тестов
- Дополнительно реализовать поддержку режимов:
Модификации
- Базовая
- Link
- Добавьте поддержку
[ссылок с _выделением_](https://kgeorgiy.info):<a href='https://kgeorgiy.info'>ссылок с <em>выделением</em></a> - Исходный код тестов
- Откомпилированные тесты
- Добавьте поддержку
- Underline
- Добавьте поддержку
++подчеркивания++:<u>подчеркивания</u> - Исходный код тестов
- Откомпилированные тесты
- Добавьте поддержку
- Image
- Добавьте поддержку
:<img alt='картинок' src='http://www.ifmo.ru/images/menu/small/p10.jpg'> - Исходный код тестов
- Откомпилированные тесты
- Добавьте поддержку
- Mark
- Добавьте поддержку
~выделения цветом~:<mark>выделения цветом</mark> - Исходный код тестов
- Откомпилированные тесты
- Добавьте поддержку
- All
- Добавьте поддержку всех вышеперечисленных модификаций
- Исходный код тестов
- Откомпилированные тесты
Модификации
- Базовая
- Класс
ExpressionParserдолжен реализовывать интерфейс Parser - Классы
CheckedAdd,CheckedSubtract,CheckedMultiply,CheckedDivideиCheckedNegateдолжны реализовывать интерфейс TripleExpression - Нельзя использовать типы
longиdouble - Нельзя использовать методы классов
MathиStrictMath - Исходный код тестов
- Класс
- HighLow
- Дополнительно реализовать унарные операции:
high– значение, у которого оставлен только самый старший установленный битhigh -4равноInteger.MIN_VALUE;low– значение, у которого оставлен только самый младший установленный битlow 18равно2.
- Исходный код тестов
- Дополнительно реализовать унарные операции: