Giter Club home page Giter Club logo

job4j_exercises's Introduction

Профессиональное тестирование по Java

Цель курса

Цель курса - проверить логические и алгоритмические способности ученика заниматься профессиональным программированием. Кандидаты, полностью выполнившие все задания могут смело продолжать изучать программирование, так как у них есть хороший потенциал стать высококвалифицированными разработчиками ПО. Кандидатам, которые испытывают сложности в выполнении данных задач, следует обратить внимание на смежные области разработки ПО, такие как: QA Automation, аналитик, функциональный программист, support.

Описание

В курсе собраны 20 задач возрастающей сложности. Каждая задача состоит из подготовленного каркаса классов и полностью написанных автоматических тестов. То есть все задания будут автоматически проверены. В данном курсе используется подход TDD. Инструменты, необходимые для прохождения курса: Maven, Git, Java 8.

Для получения исходного кода нужно выполнить команду:

git clone [email protected]:peterarsentev/course_test.git

Проект собрать через maven. Задания курса находятся в отдельных пакетах

/src/main/java/ru/parsentev/task_XXX/package-info.java

а так же продублированы ниже.

Ученик должен ознакомиться c заданием и перейти к реализации недостающего кода и классов. После завершения реализации ученик должен зайти в папку

/src/test/java/ru/parsentev/task_XXX/

и в каждом классе убрать аннотацию

@Ignore - это аннотация используется для игнорирования тестов.

После этого ученик должен перейти в корень проекта и выполнить команду

mvn clean test

Система сборки должна успешно пройти все тесты. Если тесты упали - необходимо поправить ваш код. Код тестов править нельзя.

В репозитории есть две ветки

  • master - каркас заданий с тестами.
  • solution - полностью выполненные задания с тестами.

Смотреть решения рекомендуется после успешной реализации кода и успешно пройденных тестов.

В качестве теоретического материала для подготовки к курсу следует прочитать следующие книги:

Head First Java, 2nd Edition: Kathy Sierra, Bert Bates

Алгоритмы. Руководство по разработке, Стивен С. Скиена

Темы необходимые для прохождения курса.

  • Типы данных
  • Арифметические операции
  • Операторы условия
  • Циклы
  • Массивы
  • Наследование
  • Полиморфизм
  • Инкапсуляция
  • Исключения

Задания

  1. Реализовать программу Calculator (калькулятор). Калькулятор должен выполнять операции: сложение, вычитание, умножение, деление, возведение в степень. При выполнении деления ввести проверку на 0. Если второй аргумент 0 - нужно выкинуть исключение java.lang.IllegalStateException

  2. Реализовать класс Point (точка), описывающую точку в системе координат x, y - Point(x, y). Объект точка должен иметь методы double Point#distanceTo(Point point) - метод должен вычислять расстояние между двумя точками.

  3. Реализовать класс Triangle (треугольник). Треугольник должен описываться через точки в системе координат. Объект треугольник должен иметь методы: boolean exists() - проверяет существует ли треугольник или нет. double area() - вычисляет площадь треугольника. Если треугольник не существует - выбросить исключение java.lang.IllegalStateException

  4. Реализовать класс IsoscelesTriangle (равнобедренный треугольник) наследуя класс треугольник из задания 3. Дополнить поведение метода boolean exists() - true, если треугольник равнобедренный. Остальное поведение оставить прежним.

  5. Реализовать класс RightTriangle (прямоугольный треугольник) наследуя класс треугольник из задания 3. Дополнить поведение метода boolean exists() - true, если треугольник равносторонний. Остальное поведение оставить прежним.

  6. Реализовать класс Square (квадрат), основанный на четырех точках Point(x, y). boolean exists() - проверяет существует ли квадрат или нет.

  7. Реализовать класс Expression. Класс должен принимать строку из просто математического выражения и методы double calc(). Должен поддерживать операции + - / * exp. Например, "2+2" - 4, "2-2" - 0 Если выражение не корректное выбросить исключение java.lang.IllegalStateException

  8. Реализовать класс вычисляющий простые числа в диапазоне от 1 до N.

  9. Реализовать метод подсчета уникальных символов в строке.

  10. Реализовать методы проверки корректности открытых и закрытых скобок. Например, ()(()((()))) - true, ()) - false.

  11. Задан массив чисел со значениями 0 и 1. Нужно проверить, что все значения в массиве равны 1. Например, [0, 1] - false, [1, 1] - true.

  12. Задан массив чисел со значениями 0 и 1. Нужно проверить, что в массиве есть последовательности из трех и больше единиц. Например, [0, 1, 1] - false, [1, 1, 1] - true.

  13. Задан числовой массив. Нужно проверить, что все значения в массиве одинаковые. Например, [0, 0, 0] - true, [1, 1, 1] - true, [0, 1, 1] - false.

  14. Задано предложение. Нужно переставить слова в обратно порядке. Например, "программируй и зарабатывай" -> "зарабатывай и программируй".

  15. Задан числовой массив. Нужно реализовать метод кольцевого сдвига на N. int[] shift(). Не использовать дополнительный массив. Например, [1, 2, 3, 4, 5] - shift(2) - [4, 5, 1, 2, 3]

  16. Задан квадратный массив. Нужно проверить, что в нем есть выигрышные варианты для игры крестики-нолики.

  17. Реализован банкомат размена денег. Автомат принимает бумажную купюру и обменивает на монеты. Метод должен возвращать список всех возможных вариантов размены купюры.

  18. Задан двумерный массив, заполненный нулями и единицами. Нужно определить самое большое множество единиц. Множеством считается объединение единиц, которые находятся рядом друг с другом по горизонтали и(или) вертикали. Если они находятся рядом по диагонали - такое нахождение не учитывать.

  19. Задан двумерный массив из единиц и нулей. Нужно найти минимальный путь от точки А до точки В. Двигаться можно только по единицам и только в вниз или вправо.

  20. Задан одномерный массив. Нужно найти все возможные варианты перестановок этого массива.

  21. Задан список скриптов с указанием их зависимостей.

    1 - [2, 3], 2 - [4], 3 - [4, 5], 4 - [], 5 - []

    Необходимо написать метод, который возвращает список всех скриптов, которые нужны для загрузки входящего скрипта.

    Например, чтобы выполнить скрипт 1, нужно выполнить скрипт (2, 3), которые в свою очередь зависят от 4 и 5 скрипта.

    List load(Map<Integer, List ds, Integer scriptId)

  22. Задан двухмерный массив. Массив заполнен числами. По массиву двигается робот. Робот может двигаться вниз, вверх и вправо. Задача начальная точка и конечная. Перемещение из одной клетки в другую затрачивает энергию. Рассчитывается она разность модуля значений клеток. Например, ход из клетки 1 в 10 будет оцениваться в 9 единиц.

    Необходимо написать метод, который определяет наименее трудозатратный путь.

    int optimalWay(int[][] board, int sx, int sy, int fx, int fy)

    [1, 2, 3]
    [1, 3, 6]
    [1, 1, 5] 
    

    start (0, 0), finish (3, 3). Ответ: 4. Путь 1 1 1 1 5

  23. Задан двухмерный массив. Массив заполнен нулями и единицами. Робот может ходить только по единицам. Задача начальная и конечная точка. Робот может ходить вверх, вних, влево и вправо. Необходимо найти минимальный путь до конечной точки.

    int minWay(int[][] board, int sx, int sy, int fx, int fy)

job4j_exercises's People

Contributors

like2learn avatar peterarsentev avatar yarmail avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

job4j_exercises's Issues

Вопрос по task_011

Задан массив чисел со значениями 0 и 1. Нужно проверить, что все значения в массиве равны 1. Например, [0, 1] - false, [1, 1] - true,

Не могу понять, есть ли тут какой-то подвох, поскольку относительно других, это и следующая пара заданий уж очень просто выглядят

Опечатка

У вас опечатка в ридми.
Задача 21: Задач вместо Задан

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.