Skip to content

Files

Latest commit

8f7d921 · Apr 9, 2022

History

History

prog-intro-tests

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Apr 9, 2022
Apr 9, 2022
Apr 9, 2022

Тесты к курсу «Введение в программирование»

Условия домашних заданий

Домашнее задание 13. Обработка ошибок

Модификации

  • Base
    • Класс ExpressionParser должен реализовывать интерфейс Parser
    • Классы CheckedAdd, CheckedSubtract, CheckedMultiply, CheckedDivide и CheckedNegate должны реализовывать интерфейс TripleExpression
    • Нельзя использовать типы long и double
    • Нельзя использовать методы классов Math и StrictMath
    • Исходный код тестов
      • Первый аргумент: easy или hard
      • Последующие аргументы: модификации
  • PowLog (36-39)
    • Дополнительно реализуйте бинарные операции (максимальный приоритет):
      • ** – возведение в степень, 2 ** 3 равно 8;
      • // – логарифм, 10 // 2 равно 3.
  • Shifts (38, 39)
    • Дополнительно реализуйте бинарные операции с минимальным приоритетом:
      • << – сдвиг влево (1 << 5 + 3 равно 1 << (5 + 3) равно 256);
      • >> – сдвиг вправо (1024 >> 5 + 3 равно 1024 >> (5 + 3) равно 4);
      • >>> – арифметический сдвиг вправо (-1024 >>> 5 + 3 равно 1024 >>> (5 + 3) равно -4);
  • MinMax (31-37)
    • Дополнительно реализуйте бинарные операции (минимальный приоритет):
      • min – минимум, 2 min 3 равно 2;
      • max – максимум, 2 max 3 равно 3.
  • Abs (36-39)
    • Дополнительно реализуйте унарную операцию
      • abs – модуль числа, abs -5 равно 5.
  • Zeroes (31-35)
    • Дополнительно реализуйте унарные операции
      • l0 – число старших нулевых бит, l0 123456 равно 15;
      • t0 – число младших нулевых бит, t0 123456 равно 6.

Домашнее задание 12. Разбор выражений

Модификации

  • Base
    • Класс expression.parser.ExpressionParser должен реализовывать интерфейс Parser
    • Результат разбора должен реализовывать интерфейс TripleExpression
    • Исходный код тестов
      • Первый аргумент: easy или hard
      • Последующие аргументы: модификации
  • Shifts (38, 39)
    • Дополнительно реализуйте бинарные операции с минимальным приоритетом:
      • << – сдвиг влево (1 << 5 + 3 равно 1 << (5 + 3) равно 256);
      • >> – сдвиг вправо (1024 >> 5 + 3 равно 1024 >> (5 + 3) равно 4);
      • >>> – арифметический сдвиг вправо (-1024 >>> 5 + 3 равно 1024 >>> (5 + 3) равно -4);
  • MinMax (34-37)
    • Дополнительно реализуйте бинарные операции (минимальный приоритет):
      • min – минимум, 2 min 3 равно 2;
      • max – максимум, 2 max 3 равно 3.
  • Zeroes (31-33, 36-39)
    • Дополнительно реализуйте унарные операции
      • l0 – число старших нулевых бит, l0 123456 равно 15;
      • t0 – число младших нулевых бит, t0 123456 равно 6.

Домашнее задание 11. Выражения

Модификации

  • Base
  • Triple (31-39)
    • Дополнительно реализуйте поддержку выражений с тремя переменными: x, y и z.
    • Интерфейс TripleExpression.
  • BigInteger (36-37)
    • Дополнительно реализуйте вычисления в типе BigInteger.
    • Интерфейс BigIntegerExpression.
  • BigDecimal (38-39)
    • Дополнительно реализуйте вычисления в типе BigDecimal .
    • Интерфейс BigDecimalExpression.

Домашнее задание 10. Игра m,n,k

Тесты не предусмотрены. Решение должно находиться в пакете game.

Модификации

  • Переговоры (38-39)
    • У игрока должна быть возможность сдаться, если он не хочет продолжать игру.
    • Игрок может вместо своего хода предложить ничью. Если второй игрок принимает предложение, то игра заканчивается. В противном случае, игра продолжается и игрок делает ход. Повторное предложение ничьей на том же ходу считается ошибкой.
  • Турнир (36-37)
    • Добавьте поддержку кругового турнира для нескольких участников.
    • В рамках кругового турнира каждый с каждым должен сыграть две партии, по одной каждым цветом.
    • Выведите таблицу очков по схеме:
      • 3 очка за победу;
      • 1 очко за ничью;
      • 0 очков за поражение.
  • Гекс (36-39)
    • Добавьте поддержку ромбической доски для игры Гекс (с тремя направлениями линий).
    • В качестве примера, сделайте доску размером 11×11.
  • Multiplayer (34-35)
    • Добавьте поддержку значков - и |;
    • Добавьте возможность игры для 3 и 4 игроков.
  • Матчи (31-33)
    • Добавьте поддержку матчей: последовательность игр до указанного числа побед.
    • Стороны в матче должны меняться каждую игру.

Домашнее задание 9. Markdown to HTML

Модификации

  • Базовая
  • InsDel (38, 39)
    • Добавьте поддержку <<вставок>>: <ins>вставок</ins> и }}удалений{{: <del>удалений</del>
  • Pre (36, 37)
    • Добавьте поддержку ```кода __без__ форматирования```: <pre>кода __без__ форматирования</pre>
  • Quote (34, 35)
    • Добавьте поддержку ''цитат'': <q>цитат</q>
  • Var (31-33)
    • Добавьте поддержку %переменных%: <var>переменных</var>

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

Модификации

  • Base
  • Html (34, 35)
    • Дополнительно реализуйте метод toHtml, генерирующий HTML-разметку:
      • выделеный текст окружается тегом em;
      • сильно выделеный текст окружается тегом strong;
      • зачеркнутый текст окружается тегом s.
  • HtmlList (38, 39)
    • Сделайте модификацию Html
    • Добавьте поддержку:
      • Нумерованных списков (класс OrderedList, тег ol): последовательность элементов
      • Ненумерованных списков (класс UnorderedList, тег ul): последовательность элементов
      • Элементов списка (класс ListItem, тег li): последовательность абзацев и списков
    • Для новых классов поддержка Markdown не требуется
    • Исходный код тестов
  • BBCode (31-33)
    • Дополнительно реализуйте метод toBBCode, генерирующий BBCode-разметку:
      • выделеный текст окружается тегом i;
      • сильно выделеный текст окружается тегом b;
      • зачеркнутый текст окружается тегом s.
  • BBCodeList (36, 37)
    • Сделайте модификацию BBCode
    • Добавьте поддержку:
      • Нумерованных списков (класс OrderedList, тег list=1): последовательность элементов
      • Ненумерованных списков (класс UnorderedList, тег list): последовательность элементов
      • Элементов списка (класс ListItem, открывающий тег *): последовательность абзацев и списков
    • Для новых классов поддержка Markdown не требуется
    • Исходный код тестов

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

Модификации

  • Base
    • Класс должен иметь имя Wspp
    • Исходный код тестов: WsppTest.java, WsppTester.java
    • Откомпилированные тесты: WsppTest.jar
      • Аргументы командной строки: модификации
  • SortedSecondG (38-39)
    • В выходном файле слова должны быть упорядочены в лексикографическом порядке
    • Вместо номеров вхождений во всем файле надо указывать только четныe вхождения в каждой строке.
    • Класс должен иметь имя WsppSortedSecondG
  • SecondG (36-37)
    • Вместо номеров вхождений во всем файле надо указывать только четныe вхождения в каждой строке.
    • Класс должен иметь имя WsppSecondG
  • SortedPosition (34-35)
    • В выходном файле слова должны быть упорядочены в лексикографическом порядке
    • Вместо номеров вхождений во всем файле надо указывать <номер строки>:<номер в строке>
    • Класс должен иметь имя WsppSortedPosition
  • Position (31-33)
    • Вместо номеров вхождений во всем файле надо указывать <номер строки>:<номер в строке>
    • Класс должен иметь имя WsppPosition

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

Модификации

  • Base
    • Исходный код тестов: FastReverseTest.java
    • Откомпилированные тесты: FastReverseTest.jar
      • Аргументы командной строки: модификации
  • HexAbc2 (38-39)
    • На вход подаются десятичные и шестнадцатеричные числа
    • Шестнадцатеричные числа имеют префикс 0x
    • Десятеричные числа могут быть записаны буквами нулю соответствует буква a, единице – b и так далее
    • Выведите все числа, используя буквенный формат
    • Класс должен иметь имя ReverseHexAbc2
  • Linear (38-39)
    • Пусть n – сумма числа чисел и строк во входе, тогда программе разрешается потратить не более 5 n +O(1) памяти
  • HexDec2 (36-37)
    • На вход подаются десятичные и шестнадцатеричные числа
    • Шестнадцатеричные числа имеют префикс 0x
    • Выведите все числа, используя формат шестнадцатеричных чисел
    • Класс должен иметь имя ReverseHexDec2
  • Hex2 (34-35)
    • Во вводе используются числа в шестнадцатеричной системе счисления
    • Класс должен иметь имя ReverseHex2
  • Abc2 (31-33)
    • Во вводе и выводе используются числа, записаные буквами: нулю соответствует буква a, единице – b и так далее
    • Класс должен иметь имя ReverseAbc2

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

Модификации

  • Base
  • Count (34, 35, 38, 39)
    • В выходном файле слова должны быть упорядочены по возрастанию числа вхождений, а при равном числе вхождений – по порядку первого вхождения во входном файле.
    • Класс должен иметь имя WordStatCount
  • Words (31, 32, 33, 36, 37)
    • В выходном файле слова должны быть упорядочены в лексикографическом порядке
    • Класс должен иметь имя WordStatWords
  • Sort (36-39)
    • Пусть n – число слов во входном файле, тогда программа должна работать за O(n log n).

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

Модификации

  • Base
  • Sum2 (38, 39)
    • Рассмотрим входные данные как (не полностью определенную) матрицу, вместо каждого числа выведите сумму чисел в прямоугольнике верхний левый угол матрицы — текущее число
    • Класс должен иметь имя ReverseSum2
  • Min2 (36, 37)
    • Рассмотрим входные данные как (не полностью определенную) матрицу, вместо каждого числа выведите минимум из чисел верхний левый угол матрицы — текущее число
    • Класс должен иметь имя ReverseMin2
  • Linear (36-39)
    • Пусть n – сумма числа чисел и строк во входе, тогда программе разрешается потратить не более 6_n_+O(1) памяти
  • Transpose (34-35)
    • Рассмотрим входные данные как (не полностью определенную) матрицу, выведите ее в транспонированном виде
    • Класс должен иметь имя ReverseTranspose
  • Odd2 (31-33)
    • Выведите (в реверсивном порядке) только числа, у которых сумма номеров строки и столбца нечетная
    • Класс должен иметь имя ReverseOdd2

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

Модификации

  • BigIntegerHex (38-39)
    • Входные данные помещаются в тип BigInteger
    • Шестнадцатеричные числа имеют префикс 0x
    • Класс должен иметь имя SumBigIntegerHex
  • LongHex (36-37)
    • Входные данные являются 64-битными целыми числами
    • Шестнадцатеричные числа имеют префикс 0x
    • Класс должен иметь имя SumLongHex
  • Float (34-35)
    • Входные данные являются 32-битными числами с формате с плавающей точкой
    • Класс должен иметь имя SumFloat
    • Числа разделяются пробелами-разделителями
  • Long (31-33)
    • Входные данные являются 64-битными целыми числами
    • Класс должен иметь имя SumLong

Для того, чтобы протестировать исходную программу:

  1. Скачайте откомпилированные тесты (SumTest.jar)
  2. Откомпилируйте Sum.java
  3. Проверьте, что создался Sum.class
  4. В каталоге, в котором находится Sum.class выполните команду
       java -jar <путь к SumTest.jar> Base
    
    • Например, если SumTest.jar находится в текущем каталоге, выполните команду
        java -jar SumTest.jar Base
    

Исходный код тестов:

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

Модификации

  • RunMe
    1. Скачайте исходный код (RunMe.java)
    2. Создайте скрипт, компилирующий и запускающий RunMe из командной строки с выданными вам аргументами командной строки
    3. Следуйте выведенной инструкции

Рекомендации по выполнению модификации

  1. Проверьте версию Java: 1. Запустите javac --version и проверьте, что версия находится в диапазоне 11..17. 1. Запустите java --version и проверьте, что версия такая же как и у javac.
  2. Скачайте RunMe.java
  3. Откомпилируйте RunMe.java: 1. Запустите javac RunMe.java 1. Убедитесь, что компиляция завершилась бе ошибок 1. Проверьте, что появился RunMe.class
  4. Запустите RunMe: 1. Запустите java RunMe [шесть] [слов] [пароля] [пришедшего] [на] [email] 1. При правильном исполнении вы должны получить ссылку Если получено сообщение об ошибке — исправьте её и запустите повторно 1. Зайдите по полученной ссылке и убедитесь, что она правильная
  5. Напишите и протестируйте скрипт: 1. Напишите скрипт, включающий команды компиляции и запуска. Если вы не умеете писать скрипты, во воспользуйтесь одной из инструкций: Windows, Linux, macOS 1. Запустите и проверьте, что вы получили ту же ссылку, что и в предыдущем пункте 1. Сдайте скрипт преподавателю
  6. Вы можете получить больше плюсиков, модифицируя код RunMe.java