---
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 [![Markdown to HTML Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/md2html.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)

Модификации
 * *Base* ✅
    * [Исходный код тестов](java/md2html/Md2HtmlTester.java)
    * [Откомпилированные тесты](artifacts/Md2HtmlTest.jar)
        * Аргументы командной строки: модификации
 * *3637*
    * Добавьте поддержку
        `<<вставок>>`: `<ins>вставок</ins>` и
        `}}удалений{{`: `<del>удалений</del>`
 * *3839*
    * Добавьте поддержку
      \`\`\``кода __без__ форматирования`\`\`\`:
      `<pre>кода __без__ форматирования</pre>`
 * *3233*
    * Добавьте поддержку `%переменных%%`: `<var>переменных</var>`
 * *3435*
    * Добавьте поддержку `!!примеров!!`: `<samp>примеров</samp>`


## Домашнее задание 7. Разметка [![Markup Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/markup.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)

Модификации
 * *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. Подсчет слов++ [![Word Stat++ Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/wspp.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)

Модификации
 * *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. Подсчет слов [![Word Stat](https://git.fymio.us/me/prog-intro-2025/actions/workflows/word-stat.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)
 

Модификации
 * *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. Реверс [![Reverse Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/reverse.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)


Модификации
 * *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. Сумма чисел [![Sum Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/sum.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)

Модификации
 * *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. Для ускорения отладки рекомендуется сделать скрипт, выполняющий шаги 2−4.


## Домашнее задание 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`

-->
