- Скачайте исходный код (RunMe.java)
- Откомпилируйте код (должен получиться
RunMe.class
) - Запустите класс
RunMe
с выданными вам аргументами командной строки - Следуйте выведенной инструкции
-
Разработайте класс
Sum
, который при запуске из командной строки будет складывать переданные в качестве аргументов целые числа и выводить их сумму на консоль. -
Аргументы могут содержать:
- цифры;
- знаки + и -;
- произвольные пробельные символы.
-
При выполнении задания можно считать, что для представления входных данных и промежуточных результатов достаточен тип int.
-
Перед выполнением задания ознакомьтесь с документацией к классам String и Integer.
-
Для отладочного вывода используйте System.err, тогда он будет игнорироваться проверяющей программой.
Исходный код тестов:
Модификации:
- Float
- Входные данные являются 32-битными числами с формате с плавающей точкой
- Класс должен иметь имя
SumFloat
- Исходный код тестов
- Откомпилированные тесты
- Разработайте класс
Reverse
, читающий числа из стандартного ввода, и выводящий их на стандартный вывод в обратном порядке. - В каждой строке входа содержится некоторое количество целых чисел (может быть 0). Числа разделены пробелами. Каждое число помещается в тип int.
- Порядок строк в выходе должен быть обратным по сравнению с порядком строк во входе. Порядок чисел в каждой строке так же должен быть обратным к порядку чисел во входе.
- Вход содержит не более 10^6 чисел и строк.
- Для чтения чисел используйте класс Scanner.
Исходный код тестов:
Откомпилированные тесты: ReverseTest.jar
Модификации:
- Min
- Рассмотрим входные данные как (не полностью определенную) матрицу, вместо каждого числа выведите минимум из чисел в его столбце и строке
- Класс должен иметь имя
ReverseMin
- Исходный код тестов
- Откомпилированные тесты
- Разработайте класс
WordStat
, который будет подсчитывать статистику встречаемости слов во входном файле. - Словом называется непрерывная последовательность букв, апострофов и тире (Unicode category Punctuation, Dash). Для подсчета статистики, слова приводятся к нижнему регистру.
- Выходной файл должен содержать все различные слова, встречающиеся во входном файле, в порядке их появления. Для каждого слова должна быть выведена одна строка, содержащая слово и число его вхождений во входной файл.
- Имена входного и выходного файла задаются в качестве аргументов командной строки. Кодировка файлов: UTF-8.
Исходный код тестов:
Откомпилированные тесты: WordStatInputTest.jar
Модификации
- InputShingles
- Выходной файл должен содержать все различные подстроки длины 3 слов встречающихся во входном файле, в порядке их появления. Слова длины меньшей 3 игнорируются.
- Класс должен иметь имя
WordStatInputShingles
- Исходный код тестов
- Откомпилированные тесты
- Реализуйте свой аналог класса Scanner на основе Reader.
- Примените разработанный Scanner для решения задания «Реверс».
- Примените разработанный Scanner для решения задания «Статистика слов».
- Код, управляющий чтением должен быть общим.
- Код, выделяющий числа и слова должен быть общим.
- При реализации блочного чтения обратите внимание на слова/числа, пересекающие границы блоков, особенно — больше одного раза.
Исходный код тестов:
Откомпилированные тесты: FastReverseTest.jar
Модификации
- Abc
- Во вводе и выводе используются числа, записаные буквами:
нулю соответствует буква
a
, единице –b
и так далее - Класс должен иметь имя
ReverseAbc
- Исходный код тестов
- Откомпилированные тесты
- Во вводе и выводе используются числа, записаные буквами:
нулю соответствует буква
- Разработайте класс
WordStatIndex
, который будет подсчитывать статистику встречаемости слов во входном файле. - Словом называется непрерывная последовательность букв, апострофов и тире (Unicode category Punctuation, Dash). Для подсчета статистики, слова приводятся к нижнему регистру.
- Выходной файл должен содержать все различные слова, встречающиеся во входном файле, в порядке их появления. Для каждого слова должна быть выведена одна строка, содержащая слово, число его вхождений во входной файл и номера вхождений этого слова среди всех слов во входном файле.
- Имена входного и выходного файла задаются в качестве аргументов командной строки. Кодировка файлов: UTF-8.
- Программа должна работать за линейное от размера входного файла время.
- Для реализации программы используйте Collections Framework.
Исходный код тестов:
Откомпилированные тесты: WordStatIndexTest.jar
Модификации
- SortedLineIndex
- В выходном файле слова должны быть упорядочены в лексикографическом порядке
- Вместо номеров вхождений во всем файле надо указывать
<номер строки>:<номер в строке>
- Класс должен иметь имя
WordStatSortedLineIndex
- Исходный код тестов
- Откомпилированные тесты
- Разработайте набор классов для текстовой разметки.
- Класс
Paragraph
может содержать произвольное число других элементов разметки и текстовых элементов. - Класс
Text
– текстовый элемент. - Классы разметки
Emphasis
,Strong
,Strikeout
– выделение, сильное выделение и зачеркивание. Элементы разметки могут содержать произвольное число других элементов разметки и текстовых элементов. - Все классы должны реализовывать метод
toMarkdown(StringBuilder)
, которой должен генерировать Markdown-разметку по следующим правилам:- текстовые элементы выводятся как есть;
- выделенный текст окружается символами '*';
- сильно выделенный текст окружается символами '__';
- зачеркнутый текст окружается символами '~'.
- Следующий код должен успешно компилироваться:
Paragraph paragraph = new Paragraph(List.of( new Strong(List.of( new Text("1"), new Strikeout(List.of( new Text("2"), new Emphasis(List.of( new Text("3"), new Text("4") )), new Text("5") )), new Text("6") )) ));
Вызов paragraph.toMakdown(new StringBuilder())
должен заполнять переданный StringBuilder следующим содержимым:
__1~2*34*5~6__
7. Разработанные классы должны находиться в пакете markup.
Исходный код тестов:
Модификации
- BBCode
- Дополнительно реализуйте метод
toBBCode
, генерирующий BBCode-разметку:- выделеный текст окружается тегом
i
; - сильно выделеный текст окружается тегом
b
; - зачеркнутый текст окружается тегом
s
.
- выделеный текст окружается тегом
- Исходный код тестов
- Дополнительно реализуйте метод
- Реализуйте игру m,n,k.
- Добавьте обработку ошибок ввода пользователя.
- Проверку выигрыша можно производить за O(nmk).
Модификации
- Турнир
- Добавьте поддержку кругового турнира для нескольких участников из c кругов
- Выведите таблицу очков по схеме:
- 3 очка за победу
- 1 очко за ничью
- 0 очков за поражение
- Разработайте классы
Const
,Variable
,Add
,Subtract
,Multiply
,Divide
для вычисления выражений с одной переменной в типе int. - Классы должны позволять составлять выражения вида
При вычислении такого выражения вместо каждой переменной подставляется значение, переданное в качестве параметра методу evaluate (на данном этапе имена переменных игнорируются). Таким образом, результатом вычисления приведенного примера должно стать число 7.
new Subtract( new Multiply( new Const(2), new Variable("x") ), new Const(3) ).evaluate(5)
- Метод
toString
должен выдавать запись выражения в полноскобочной форме. Напримердолжен выдаватьnew Subtract( new Multiply( new Const(2), new Variable("x") ), new Const(3) ).toString()
((2 * x) - 3)
.
Модификации
- Базовая
- Реализуйте интерфейс Expression
- Исходный код тестов
- Запускать c аргументом
easy
илиhard
- Запускать c аргументом
- Triple
- Дополнительно реализуйте интерфейс TripleExpression
- Исходный код тестов
-
Доработайте предыдущее домашнее задание, так что бы выражение строилось по записи вида
x * (x - 2)*x + 1
-
В записи выражения могут встречаться: умножение *, деление /, сложение +, вычитание -, унарный минус -, целочисленные константы (в десятичной системе счисления, которые помещаются в 32-битный знаковый целочисленный тип), круглые скобки, переменные (x) и произвольное число пробельных символов в любом месте (но не внутри констант).
-
Приоритет операторов, начиная с наивысшего
- унарный минус;
- умножение и деление;
- сложение и вычитание.
-
Разбор выражений рекомендуется производить методом рекурсивного спуска. Алгоритм должен работать за линейное время.
Модификации
- Базовая
- Класс
ExpressionParser
должен реализовывать интерфейс Parser - Результат разбора должен реализовывать интерфейс TripleExpression
- Исходный код тестов
- Класс
- Bitwise
- Дополнительно реализуйте бинарные операции:
&
– побитное И, приоритет меньше чем у+
(6 & 1 + 2
равно6 & (1 + 2)
равно 2);^
– побитный XOR, приоритет меньше чем у&
(6 ^ 1 + 2
равно6 ^ (1 + 2)
равно 5);|
– побитное ИЛИ, приоритет меньше чем у^
(6 | 1 + 2
равно6 | (1 + 2)
равно 7);
- Исходный код тестов
- Дополнительно реализуйте бинарные операции:
-
Добавьте в программу вычисляющую выражения обработку ошибок, в том числе:
- ошибки разбора выражений;
- ошибки вычисления выражений.
-
Для выражения
1000000*x*x*x*x*x/(x-1)
вывод программы должен иметь следующий вид:x f 0 0 1 division by zero 2 32000000 3 121500000 4 341333333 5 overflow 6 overflow 7 overflow 8 overflow 9 overflow 10 overflow
Результат
division by zero (overflow)
означает, что в процессе вычисления произошло деление на ноль (переполнение). -
При выполнении задания следует обратить внимание на дизайн и обработку исключений.
-
Человеко-читаемые сообщения об ошибках должны выводится на консоль.
-
Программа не должна «вылетать» с исключениями (как стандартными, так и добавленными).
Модификации
- Базовая
- Класс
ExpressionParser
должен реализовывать интерфейс Parser - Классы
CheckedAdd
,CheckedSubtract
,CheckedMultiply
,CheckedDivide
иCheckedNegate
должны реализовывать интерфейс TripleExpression - Нельзя использовать типы
long
иdouble
- Нельзя использовать методы классов
Math
иStrictMath
- Исходный код тестов
- Класс
- AbsSqrt
- Дополнительно реализуйте унарные операции:
abs
– модуль числа,abs -5
равно 5;sqrt
– квадратный корень,sqrt 24
равно 4.
- Исходный код тестов
- Дополнительно реализуйте унарные операции: