Домашнее задание 1. Запусти меня!

Тесты к домашним заданиям

  1. Установите JDK 11+
  2. Скопируйте один из вариантов HelloWorld, рассмотренных на лекции.
  3. Откомпилируйте HelloWorld.java и получите HelloWorld.class.
  4. Запустите HelloWorld и проверьте его работоспособность.
  5. Создайте скрипт, компилирующий и запускающий HelloWorld из командной строки.

Домашнее задание 2. Сумма чисел

  1. Разработайте класс Sum, который при запуске из командной строки будет складывать переданные в качестве аргументов целые числа и выводить их сумму на консоль.
  2. Примеры запуска программы:
    java Sum 1 2 3
    Результат: 6
    java Sum 1 2 -3
    Результат: 0
    java Sum "1 2 3"
    Результат: 6
    java Sum "1 2" " 3"
    Результат: 6
    java Sum " "
    Результат: 0
    Аргументы могут содержать:
  3. При выполнении задания можно считать, что для представления входных данных и промежуточных результатов достаточен тип int.
  4. Перед выполнением задания ознакомьтесь с документацией к классам String и Integer.
  5. Для отладочного вывода используйте System.err, тогда он будет игнорироваться проверяющей программой.

Домашнее задание 3. Реверс

  1. Разработайте класс Reverse, читающий числа из стандартного ввода, и выводящий их на стандартный вывод в обратном порядке.
  2. В каждой строке входа содержится некоторое количество целых чисел (может быть 0). Числа разделены пробелами. Каждое число помещается в тип int.
  3. Порядок строк в выходе должен быть обратным по сравнению с порядком строк во входе. Порядок чисел в каждой строке также должен быть обратным к порядку чисел во входе.
  4. Вход содержит не более 106 чисел и строк.
  5. Для чтения чисел используйте класс Scanner.
  6. Примеры работы программы:
    ВводВывод
    1 2
    3
    
    3
    2 1
    
    3
    2 1
    
    1 2
    3
    
    1
    
    2 -3
    
    -3 2
    
    1
    
    1     2
    3     4
    
    4 3
    2 1
    

Домашнее задание 4. Статистика слов

  1. Разработайте класс WordStatInput, подсчитывающий статистику встречаемости слов во входном файле.
  2. Словом называется непрерывная последовательность букв, апострофов (') и дефисов (Unicode category Punctuation, Dash). Для подсчета статистики слова приводятся к нижнему регистру.
  3. Выходной файл должен содержать все различные слова, встречающиеся во входном файле, в порядке их появления. Для каждого слова должна быть выведена одна строка, содержащая слово и число его вхождений во входном файле.
  4. Имена входного и выходного файла задаются в качестве аргументов командной строки. Кодировка файлов: UTF-8.
  5. Примеры работы программы:
    Входной файлВыходной файл
    To be, or not to be, that is the question:
    
    to 2
    be 2
    or 1
    not 1
    that 1
    is 1
    the 1
    question 1
    
    Monday's child is fair of face.
    Tuesday's child is full of grace.
    
    monday's 1
    child 2
    is 2
    fair 1
    of 2
    face 1
    tuesday's 1
    full 1
    grace 1
    
    Шалтай-Болтай
    Сидел на стене.
    Шалтай-Болтай
    Свалился во сне.
    
    шалтай-болтай 2
    сидел 1
    на 1
    стене 1
    свалился 1
    во 1
    сне 1
    

Домашнее задание 5. Свой сканер

  1. Реализуйте свой аналог класса Scanner на основе Reader.
  2. Примените разработанный Scanner для решения задания «Реверс».
  3. Примените разработанный Scanner для решения задания «Статистика слов».
  4. Нужно использовать блочное чтение. Код, управляющий чтением должен быть общим.
  5. Сложный вариант. Код, выделяющий числа и слова должен быть общим.
  6. Обратите внимание на:
    • Обработку ошибок.
    • На слова/числа, пересекающие границы блоков, особенно — больше одного раза.

Домашнее задание 6. Статистика слов++

  1. Разработайте класс Wspp, который будет подсчитывать статистику встречаемости слов во входном файле.
  2. Словом называется непрерывная последовательность букв, апострофов и тире (Unicode category Punctuation, Dash). Для подсчета статистики, слова приводятся к нижнему регистру.
  3. Выходной файл должен содержать все различные слова, встречающиеся во входном файле, в порядке их появления. Для каждого слова должна быть выведена одна строка, содержащая слово, число его вхождений во входной файл и номера вхождений этого слова среди всех слов во входном файле.
  4. Имена входного и выходного файла задаются в качестве аргументов командной строки. Кодировка файлов: UTF-8.
  5. Программа должна работать за линейное от размера входного файла время.
  6. Для реализации программы используйте Collections Framework.
  7. Сложный вариант. Реализуйте и примените класс IntList, компактно хранящий список целых чисел.
  8. Примеры работы программы:
    Входной файлВыходной файл
        To be, or not to be, that is the question:
    
        to 2 1 5
        be 2 2 6
        or 1 3
        not 1 4
        that 1 7
        is 1 8
        the 1 9
        question 1 10
    
        Monday's child is fair of face.
        Tuesday's child is full of grace.
    
        monday's 1 1
        child 2 2 8
        is 2 3 9
        fair 1 4
        of 2 5 11
        face 1 6
        tuesday's 1 7
        full 1 10
        grace 1 12
    
        Шалтай-Болтай
        Сидел на стене.
        Шалтай-Болтай
        Свалился во сне.
    
        шалтай-болтай 2 1 5
        сидел 1 2
        на 1 3
        стене 1 4
        свалился 1 6
        во 1 7
        сне 1 8
    

Домашнее задание 7. Разметка

  1. Разработайте набор классов для текстовой разметки.
  2. Класс Paragraph может содержать произвольное число других элементов разметки и текстовых элементов.
  3. Класс Text – текстовый элемент.
  4. Классы разметки Emphasis, Strong, Strikeout – выделение, сильное выделение и зачеркивание. Элементы разметки могут содержать произвольное число других элементов разметки и текстовых элементов.
  5. Все классы должны реализовывать метод toMarkdown(StringBuilder), который должен генерировать Markdown-разметку по следующим правилам:
    1. текстовые элементы выводятся как есть;
    2. выделенный текст окружается символами '*';
    3. сильно выделенный текст окружается символами '__';
    4. зачеркнутый текст окружается символами '~'.
  6. Следующий код должен успешно компилироваться:
        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.toMarkdown(new StringBuilder()) должен заполнять переданный StringBuilder следующим содержимым:
        __1~2*34*5~6__
    
  7. Разработанные классы должны находиться в пакете markup.