--- gitea: none include_toc: true --- # Тесты к курсу «Введение в программирование» [Условия домашних заданий](https://www.kgeorgiy.info/courses/prog-intro/homeworks.html) ## Домашнее задание 9. Markdown to HTML [![Markdown to HTML Tests](https://git.codejava.tech/me/prog-intro-2025/actions/workflows/md2html.yml/badge.svg)](https://git.codejava.tech/me/prog-intro-2025/actions) Модификации * *Base* ✅ * [Исходный код тестов](java/md2html/Md2HtmlTester.java) * [Откомпилированные тесты](artifacts/Md2HtmlTest.jar) * Аргументы командной строки: модификации * *3637* * Добавьте поддержку `<<вставок>>`: `вставок` и `}}удалений{{`: `удалений` * *3839* * Добавьте поддержку \`\`\``кода __без__ форматирования`\`\`\`: `
кода __без__ форматирования
` * *3233* * Добавьте поддержку `%переменных%%`: `переменных` * *3435* * Добавьте поддержку `!!примеров!!`: `примеров` ## Домашнее задание 7. Разметка [![Markup Tests](https://git.codejava.tech/me/prog-intro-2025/actions/workflows/markup.yml/badge.svg)](https://git.codejava.tech/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.codejava.tech/me/prog-intro-2025/actions/workflows/wspp.yml/badge.svg)](https://git.codejava.tech/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` ## Домашнее задание 4. Подсчет слов [![Word Stat](https://git.codejava.tech/me/prog-intro-2025/actions/workflows/word-stat.yml/badge.svg)](https://git.codejava.tech/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.codejava.tech/me/prog-intro-2025/actions/workflows/reverse.yml/badge.svg)](https://git.codejava.tech/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.codejava.tech/me/prog-intro-2025/actions/workflows/sum.yml/badge.svg)](https://git.codejava.tech/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`