first commit

This commit is contained in:
2026-01-29 23:19:54 +05:00
commit fb1ce36970

550
README.md Normal file
View File

@@ -0,0 +1,550 @@
---
gitea: none
include_toc: true
---
# Тесты к курсу «Введение в программирование»
[Условия домашних заданий](https://www.kgeorgiy.info/courses/prog-intro/homeworks.html)
## Домашнее задание 14. Обработка ошибок
Модификации
* *Base*
* Класс `ExpressionParser` должен реализовывать интерфейс
[ListParser](java/expression/exceptions/ListParser.java).
* Результат разбора должен реализовывать интерфейс
[ListExpression](java/expression/ListExpression.java).
* Нельзя использовать типы `long` и `double`
* Нельзя использовать методы классов `Math` и `StrictMath`
* [Исходный код тестов](java/expression/exceptions/ExceptionsTest.java)
* Первый аргумент: `easy` или `hard`
* Последующие аргументы: модификации
* *3637* Дополнительно реализуйте бинарные операции (максимальный приоритет):
* `**` возведение в степень, `2 ** 3` равно 8;
* `//` логарифм, `10 // 2` равно 3.
* *3839* Дополнительно реализуйте
* бинарные операции (максимальный приоритет):
* `**` возведение в степень, `2 ** 3` равно 8;
* `//` логарифм, `10 // 2` равно 3.
* унарные операции:
* `log₂` логарифм по основанию 2, `log₂ 10` равно 3;
* `pow₂` два в степени, `pow₂ 4` равно 16.
* *3435* Дополнительно реализуйте унарные операции:
* `log₂` логарифм по основанию 2, `log₂ 10` равно 3;
* `pow₂` два в степени, `pow₂ 4` равно 16.
* *3233*
* Дополнительно реализуйте унарные операции:
* `low` младший установленный бит, `low 123456` равно 64;
* `high` старший установленный бит, `high 123456` равно 65536.
## Домашнее задание 13. Разбор выражений
Модификации
* *Base*
* Класс `ExpressionParser` должен реализовывать интерфейс
[ListParser](java/expression/parser/ListParser.java)
* Результат разбора должен реализовывать интерфейс
[ListExpression](java/expression/ListExpression.java)
* [Исходный код тестов](java/expression/parser/ParserTest.java)
* Первый аргумент: `easy` или `hard`
* Последующие аргументы: модификации
* *3637*. Дополнительно реализуйте:
* бинарные операции (минимальный приоритет):
* `min` минимум, `2 min 3` равно 2;
* `max` максимум, `2 max 3` равно 3.
* унарную операцию
`reverse` число с переставленными цифрами,
`reverse -12345` равно `-54321`.
* *3839*. * Дополнительно реализуйте:
* бинарные операции (минимальный приоритет):
* `min` минимум, `2 min 3` равно 2;
* `max` максимум, `2 max 3` равно 3;
* унарные операции
* `reverse` число с переставленными цифрами,
`reverse -12345` равно `-54321`;
* `digits` сумма цифр числа, `digits -12345` равно 15.
* *3435*
* унарные операции
* `floor` округление вниз до числа кратного 1000,
`floor 1234` равно 1000;
* `ceiling` округление вверх до числа кратного 1000,
`ceiling 1234` равно 2000.
* бинарные операции (минимальный приоритет):
* `set` установка бита, `2 set 3` равно 10;
* `clear` сброс бита, `10 clear 3` равно 2.
* *3233*. Дополнительно реализуйте унарные операции
* `floor` округление вниз до числа кратного 1000,
`floor 1234` равно 1000;
* `ceiling` округление вверх до числа кратного 1000,
`ceiling 1234` равно 2000.
## Домашнее задание 12. Выражения
Модификации
* *Base*
* Реализуйте интерфейс [Expression](java/expression/Expression.java)
* [Исходный код тестов](java/expression/ExpressionTest.java)
* Первый аргумент: `easy` или `hard`
* Последующие аргументы: модификации
* *Triple* (32-39)
* Дополнительно реализуйте поддержку выражений с тремя переменными: `x`, `y` и `z`.
* Например, для `expr = new Subtract(new Add(new Variable("x"), new Variable("y")), new Const(1))`:
* `expr.evaluate(2, 3, 5)` должно быть равно 4;
* `expr.toString()` должно быть равно `((x + y) - 1)`.
* Интерфейс/тесты [TripleExpression](java/expression/TripleExpression.java).
* *BigIntegerList* (36, 37). Дополнительно реализуйте поддержку вычисления
выражений в типе `BigInteger` с позиционными переменными.
* Конструктор позиционной переменной получает индекс переменной.
* При выводе позиционная переменная должна иметь вид `$index`.
* Метод вычисления выражения должен называться `evaluateBi`,
ему передаётся список значений переменных.
* Например, для `expr = new Subtract(new Add(new Variable(0), new Variable(1)), new Const(BigInteger.ONE))`:
* `expr.evaluateBi(List.of(BigInteger.TWO, BigInteger.THREE))` должно быть равно 4;
* `expr.toString()` должно быть равно `(($0 + $1) - 1)`.
* Интерфейс/тесты [BigIntegerListExpression](java/expression/BigIntegerListExpression.java).
* *BigDecimalList* (38, 39). Дополнительно реализуйте поддержку вычисления
выражений в типе `BigDecimal` с позиционными переменными.
* Конструктор позиционной переменной получает индекс переменной.
* При выводе позиционная переменная должна иметь вид `$index`.
* Метод вычисления выражения должен называться `evaluateBd`,
ему передаётся список значений переменных.
* Например, для `expr = new Subtract(new Add(new Variable(0), new Variable(1)), new Const(BigDecimal.ONE))`:
* `expr.evaluateBd(List.of(BigDecimal.TWO, BigDecimal.THREE))` должно быть равно 4;
* `expr.toString()` должно быть равно `(($0 + $1) - 1)`.
* Интерфейс/тесты [BigDecimalListExpression](java/expression/BigDecimalListExpression.java).
* *List* (34, 35). Дополнительно реализуйте поддержку выражений вычисления
выражений с позиционными переменными.
* Конструктор позиционной переменной получает индекс переменной.
* При вычислении выражения передаётся список значений переменных.
* При выводе позиционная переменная должна иметь вид `$index`.
* Например, для `expr = new Subtract(new Add(new Variable(0), new Variable(1)), new Const(1))`:
* `expr.evaluate(List.of(2, 3))` должно быть равно 4;
* `expr.toString()` должно быть равно `(($0 + $1) - 1)`.
* Интерфейс/тесты [ListExpression](java/expression/ListExpression.java).
## Домашнее задание 11. Игра m,n,k
Решение должно находиться в пакете `game`.
Модификации
* *Base*
* Тестов не существует, так как они зависят от вашего кода.
* *Двукруговой турнир* (32-39)
* Добавьте поддержку двукругового турнира для нескольких участников.
* В рамках турнира каждый с каждым должен сыграть две партии,
по одной каждым цветом.
* Выведите таблицу очков по схеме:
* 3 очка за победу;
* 1 очко за ничью;
* 0 очков за поражение.
* *Гекс* (36-39)
* Добавьте поддержку ромбической доски для
[игры Гекс](https://ru.wikipedia.org/wiki/Гекс)
(с тремя направлениями линий).
* В качестве примера, сделайте доску размером 11×11.
* *Дополнительные ходы* (34-37)
* Если в результате хода игрока на доске появляется новая последовательность
из 4+ одинаковых символов, то он делает дополнительный ход.
* Игрок не может сделать несколько дополнительных ходов подряд.
* *Multiplayer* (38, 39)
* Добавьте возможность игры для 3 и 4 игроков (значки `@` и `#`);
* Если игрок проигрывает из-за ошибочного хода,
то игра продолжается без него.
Если остался только один игрок, он объявляется победителем.
## Домашнее задание 9. Markdown to HTML
Модификации
* *Base*
* [Исходный код тестов](java/md2html/Md2HtmlTester.java)
* [Откомпилированные тесты](artifacts/Md2HtmlTest.jar)
* Аргументы командной строки: модификации
* *3637*
* Добавьте поддержку
`<<вставок>>`: `<ins>вставок</ins>` и
`}}удалений{{`: `<del>удалений</del>`
* *3839*
* Добавьте поддержку
\`\`\``кода __без__ форматирования`\`\`\`:
`<pre>кода __без__ форматирования</pre>`
* *3233*
* Добавьте поддержку `%переменных%%`: `<var>переменных</var>`
* *3435*
* Добавьте поддержку `!!примеров!!`: `<samp>примеров</samp>`
## Домашнее задание 7. Разметка
Модификации
* *Base*
* Исходный код тестов:
* [MarkupTester.java](java/markup/MarkupTester.java)
* [MarkupTest.java](java/markup/MarkupTest.java)
* Аргументы командной строки: модификации
* Откомпилированных тестов не существует,
так как они зависят от вашего кода
* *3637*, *3839*, *4142*, *4749*
* Дополнительно реализуйте метод `toTex`, генерирующий TeX-разметку:
* Абзацы предваряются командой `\par{}`
* Выделенный текст заключается в `\emph{` и `}`
* Сильно выделенный текст заключается в `\textbf{` и `}`
* Зачеркнутый текст заключается в `\textst{` и `}`
* Добавьте поддержку:
* Нумерованных списков (класс `OrderedList`, окружение `enumerate`): последовательность элементов
* Ненумерованных списков (класс `UnorderedList`, окружение `itemize`): последовательность элементов
* Элементов списка (класс `ListItem`, тег `\item`: последовательность абзацев и списков
* Для новых классов поддержка Markdown не требуется
* [Исходный код тестов](java/markup/MarkupListTest.java)
* *3233*, *3435*
* Дополнительно реализуйте метод `toHtml`, генерирующий HTML-разметку:
* Абзацы окружаются тегом `p`
* Выделенный текст окружается тегом `em`
* Сильно выделенный текст окружается тегом `strong`
* Зачеркнутый текст окружается тегом `s`
## Домашнее задание 6. Подсчет слов++
Модификации
* *Base*
* Класс должен иметь имя `Wspp`
* Исходный код тестов:
[WsppTest.java](java/wspp/WsppTest.java),
[WsppTester.java](java/wspp/WsppTester.java)
* Откомпилированные тесты: [WsppTest.jar](artifacts/WsppTest.jar)
* Аргументы командной строки: модификации
* *3637*
* В выходном файле слова должны быть упорядочены
по возрастанию длины, а при равной длине
по порядку первого вхождения во входной файл
* Вместо всех вхождений в файле надо указывать
только последнее вхождение в строке
* В словах могут дополнительно встречаться
цифры и символы `$` и `_`
* Класс должен иметь имя `WsppLast`
* *3839*
* В выходном файле слова должны быть упорядочены
по возрастанию длины, а при равной длине
по порядку первого вхождения во входной файл
* Вместо всех вхождений в файле надо указывать
только среднее вхождение строке
* В словах могут дополнительно встречаться
цифры и символы `$` и `_`
* Класс должен иметь имя `WsppMiddle`
* *3435*
* В выходном файле слова должны быть упорядочены
по возрастанию длины, а при равной длине
по порядку первого вхождения во входной файл
* Вместо номеров вхождений во всем файле надо указывать
`<номер строки>:<номер вхождения>`,
где номер вхождения считается с конца файла
* В словах могут дополнительно встречаться
цифры и символы `$` и `_`
* Класс должен иметь имя `WsppPosition`
* *3233*
* В выходном файле слова должны быть упорядочены
в порядке вхождения во входной файл
* Вместо номеров вхождений во всем файле надо указывать
`<номер строки>:<номер вхождения>`,
где номер вхождения считается с конца файла
* В словах могут дополнительно встречаться
цифры и символы `$` и `_`
* Класс должен иметь имя `WsppPos`
* *4142*
* В выходном файле слова должны быть упорядочены
по возрастанию длины, а при равной длине
по порядку первого вхождения во входной файл
* Вместо всех вхождений в файле надо указывать
только последнее вхождение в строке
* В словах могут дополнительно встречаться
цифры и символы `$` и `_`
* Класс должен иметь имя `WsppLast`
* *4749*
* В выходном файле слова должны быть упорядочены
по возрастанию длины, а при равной длине
по порядку первого вхождения во входной файл
* Вместо номеров вхождений во всем файле надо указывать
`<номер строки>:<номер вхождения>`,
где номер вхождения считается с конца файла
* В словах могут дополнительно встречаться
цифры и символы `$` и `_`
* Класс должен иметь имя `WsppPosition`
## Домашнее задание 5. Свой сканнер
Модификации
* *Base*
* Исходный код тестов: [FastReverseTest.java](java/reverse/FastReverseTest.java)
* Откомпилированные тесты: [FastReverseTest.jar](artifacts/FastReverseTest.jar)
* Аргументы командной строки: модификации
* *3637*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите минимум из чисел,
находящихся в его столбце в последующих строках, и его самого
* Во вводе могут быть десятичные и восьмиричные числа
* Числа дополнительно могут разделяться
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
скобками
* Класс должен иметь имя `ReverseMinC`
* *3839*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите минимум из чисел
текущее число — правый нижний угол матрицы
* Во вводе могут быть десятичные и восьмиричные числа
* Числа дополнительно могут разделяться
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
скобками
* Класс должен иметь имя `ReverseMin`
* *3435*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
выведите ее поворот по часовой стрелке
* Числа дополнительно могут разделяться
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
скобками
* Класс должен иметь имя `ReverseRotate`
* *3233*
* Выведите (в реверсивном порядке) только числа,
у которых сумма номеров строки и столбца четная
* Числа дополнительно могут разделяться
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
скобками
* Класс должен иметь имя `ReverseEven`
* *4142*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите среднее из чисел в его столбце и строке
* Числа дополнительно могут разделяться
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
скобками
* Класс должен иметь имя `ReverseAvg`
* *4749*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите сумму чиселв его столбце и строке
* Числа дополнительно могут разделяться
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
скобками
* Класс должен иметь имя `ReverseSum`
## Домашнее задание 4. Подсчет слов
Модификации
* *Base*
* Класс должен иметь имя `WordStat`
* Исходный код тестов:
[WordStatTest.java](java/wordStat/WordStatTest.java),
[WordStatTester.java](java/wordStat/WordStatTester.java),
[WordStatChecker.java](java/wordStat/WordStatChecker.java)
* Откомпилированные тесты: [WordStatTest.jar](artifacts/WordStatTest.jar)
* Аргументы командной строки: модификации
* *FastSort*
* Пусть _n_ число слов во входном файле,
тогда программа должна работать за O(_n_ log _n_).
* *3637*
* Назовём _серединой слова_ подстроку, полученную удалением
первых и последних 3 символов слова.
Слова длины меньшей 7 игнорируются.
* Выходной файл должен содержать все различные
середины слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthMiddle`
* *3839*
* Назовём _аффиксами слова_
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
Слова длины один игнорируются.
* Выходной файл должен содержать все различные
аффиксы слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthAffix`
* *3435*
* Назовём _суффиксом слова_ подстроку,
состоящую из `n / 2` последних символов слова, где `n` — длина слова.
Слова длины один игнорируются.
* Выходной файл должен содержать все различные
суффиксы слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthSuffix`
* *3233*
* Выходной файл должен содержать все различные
слова встречающиеся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLength`
* *4142*
* Назовём _серединой слова_ подстроку, полученную удалением
первых и последних 3 символов слова.
Слова длины меньшей 7 игнорируются.
* Выходной файл должен содержать все различные
середины слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthMiddle`
* *4749*
* Назовём _префиксом слова_ подстроку,
состоящую из `n / 2` первых символов слова, где `n` — длина слова.
Слова длины один игнорируются.
* Выходной файл должен содержать все различные
префиксы слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthPrefix`
## Домашнее задание 3. Реверс
Модификации
* *Base*
* Исходный код тестов:
[ReverseTest.java](java/reverse/ReverseTest.java),
[ReverseTester.java](java/reverse/ReverseTester.java)
* Откомпилированные тесты: [ReverseTest.jar](artifacts/ReverseTest.jar)
* Аргументы командной строки: модификации
* *Memory*
* Программа должна сначала считывать все данные в память,
и только потом обрабатывать их.
* Пусть _M_ объём памяти, необходимый для сохранения ввода
в двумерном массиве `int` минимального размера.
Ваша программа должна использовать не более 4_M_ + 1024 байт памяти.
* Накладные расходы на запуск вашей программы JVM не учитываются.
* *3637*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите максимум из чисел,
находящихся в его столбце в последующих строках, и его самого
* Класс должен иметь имя `ReverseMaxC`
* *3839*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите максимум из чисел
текущее число — правый нижний угол матрицы
* Класс должен иметь имя `ReverseMax`
* *3435*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
выведите ее поворот по часовой стрелке, например для ввода
```
1 2 3 4
5 6
7 8 9
```
вывод должен быть
```
7 5 1
8 6 2
9 3
4
```
* Класс должен иметь имя `ReverseRotate`
* *3233*
* Выведите (в реверсивном порядке) только числа,
у которых сумма номеров строки и столбца четная
* Класс должен иметь имя `ReverseEven`
* *4142*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите среднее из чисел в его столбце и строке
* Класс должен иметь имя `ReverseAvg`
* *4749*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите сумму чиселв его столбце и строке
* Класс должен иметь имя `ReverseSum`
## Домашнее задание 2. Сумма чисел
Модификации
* *Base*
* Исходный код тестов:
[SumTest.java](java/sum/SumTest.java),
[SumTester.java](java/sum/SumTester.java),
[базовые классы](java/base/)
* Откомпилированные тесты: [SumTest.jar](artifacts/SumTest.jar)
* Аргументы командной строки: модификации
* *3637*
* Входные данные являются 64-битными числами в формате с плавающей точкой
* На вход подаются десятичные и шестнадцатеричные числа
* Шестнадцатеричные числа имеют префикс `0x`,
например `0xa.bp2` равно (10+11/16)·4 равно 42.75
* Ввод регистронезависим
* Класс должен иметь имя `SumDoubleHex`
* *3839*
* Входные данные помещаются в тип [BigDecimal](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigDecimal.html)
* На вход подаются десятичные и шестнадцатеричные числа
* Шестнадцатеричные числа имеют префикс `0x`,
например `0xbsc` равно 11·10⁻¹²
(мантисса и порядок являются целыми числами)
* Ввод регистронезависим
* Класс должен иметь имя `SumBigDecimalHex`
* *3435*
* На вход подаются десятичные и шестнадцатеричные числа
* Шестнадцатеричные числа имеют префикс `0x`
* Ввод регистронезависим
* Класс должен иметь имя `SumHex`
* *3233*
* Входные данные являются 64-битными числами в формате с плавающей точкой
* Класс должен иметь имя `SumDouble`
* *4142*
* Входные данные помещаются в тип [BigInteger](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigInteger.html)
* восьмеричные числа имеют суффикс `o`
* Класс должен иметь имя `SumBigIntegerOctal`
* *4749*
* Входные данные являются 64-битными целыми числами
* восьмеричные числа имеют суффикс `o`
* Класс должен иметь имя `SumLongOctal`
Для того, чтобы протестировать программу:
1. Скачайте откомпилированные тесты ([SumTest.jar](artifacts/SumTest.jar))
1. Откомпилируйте `Sum.java`
1. Проверьте, что создался `Sum.class`
1. В каталоге, в котором находится `Sum.class`, выполните команду
```
java -ea -jar <путь к SumTest.jar> Base
```
* Например, если `SumTest.jar` находится в текущем каталоге, выполните команду
```
java -ea -jar SumTest.jar Base
```
1. Для ускорения отладки рекомендуется сделать скрипт, выполняющий шаги 24.
## Домашнее задание 1. Запусти меня!
Модификации
* *RunMe*
1. Скачайте исходный код [RunMe.java](java/RunMe.java).
1. Создайте скрипт, компилирующий и запускающий `RunMe` из командной строки
с выданными вам аргументами командной строки.
1. Следуйте выведенной инструкции.
Рекомендации по выполнению модификации
1. Проверьте версию Java:
1. Запустите `javac --version` и проверьте, что версия
находится в диапазоне 21..24.
1. Запустите `java --version` и проверьте, что версия
такая же как и у `javac`.
1. Скачайте [RunMe.java](java/RunMe.java)
1. Откомпилируйте `RunMe.java`:
1. Запустите `javac RunMe.java`
1. Убедитесь, что компиляция завершилась без ошибок
1. Проверьте, что появился `RunMe.class`
1. Запустите `RunMe`:
1. Запустите `java RunMe [шесть] [слов] [пароля] [пришедшего] [на] [email]`
1. При правильном исполнении вы должны получить ссылку.
Если получено сообщение об ошибке — исправьте её и запустите повторно
1. Зайдите по полученной ссылке и убедитесь, что она правильная
1. Напишите и протестируйте скрипт:
1. Напишите скрипт, включающий команды компиляции и запуска.
Если вы не умеете писать скрипты, воспользуйтесь одной из инструкций:
[Windows](https://tutorialreference.com/batch-scripting/batch-script-files),
[Linux](https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/),
[macOS](https://rowannicholls.github.io/bash/intro/myscript.html)
1. Запустите и проверьте, что вы получили ту же ссылку, что и в предыдущем пункте
1. Сдайте скрипт преподавателю
1. Вы можете получить больше плюсиков, модифицируя код `RunMe.java`