Task 2
🎓 🎓 Task 2 состоит из трёх задач. Все заготовки задач находятся в корне проекта в папке src/main/kotlin. В каждой заготовке вам дан класс с открытым методом, в который нужно написать код для решения поставленной задачи. Все - как и для Task 1.
Тесты находятся в папке src/test/kotlin. Тесты можно запускать различными способами. Например, выполнить таск Gradle: Gradle -> Tasks -> verification -> test. Тогда прогонятся все unit-тесты сразу:
Или открыть класс с тестом и нажать на зелёный треугольник рядом с объявлением класса. Если все тесты пройдены успешно 😺, они отмечаются зеленым значком ✔️, иначе 🙀 - красным ❗
❗ В последних версиях Android Studio (>= 4.2) убрали по-умолчанию построение дерева tasks Gradle. Поэтому вы можете не найти задачу test в Gradle -> Tasks -> verification -> test
и тесты могут не запускаться.
Во-первых, эту несправедливость несложно поправить. Зайдите в File -> Settings -> Experimental
и отключите Do not build Gradle task list during Gradle sync
. Затем сделайте sync проекта с Gradle: File -> Sync Project with Gradle Files
Во-вторых, всегда можно запустить тесты в консоли, набрав ./gradlew test
.
❗ Замечание, для задачек, которые работают с датами: Локаль на сервере может отличаться от вашей. Отсюда - локально тесты могут проходить, а на сервере - падать. Подумайте, как это исправить.
Если вы пришли к выводу, что выполнили максимум того что могли сделать, то сделайте Submit задачи через https://app.rs.school/
Условия задач
1) Date Formatter
Робот Геннадий, умный робот. Он умеет говорить на правильном русском языке и по дате определяет день недели. Будь как Геннадий.
Задача: Реализуйте метод, который по числу, месяцу и году определяет день недели и возвращает его в правильном падеже.
Пример:
-
Входные данные: 17 11 2020
-
Выходная строка: 17 ноября, вторник
-
Входные данные: 18 3 2019
-
Выходная строка: 18 марта, понедельник
-
Входные данные: 29 2 2017
-
Выходная строка: Такого дня не существует
Input: three parameters - day: String, month: String, year: String
Output: text representation of Date - "$day $text_month, $text_day_of_the_week" or "Такого дня не существует"
2) Abbreviation
You can perform the following operations on the string a
- Capitalize zero or more of a's lowercase letters.
- Delete all of the remaining lowercase letters in a.
Given two strings, a and b, determine if it's possible to make a equal to b as described. If so, print "YES" on a new line. Otherwise, print "NO".
For example, given a = AbcDE and b = ABDE, in a we can convert "b" and delete "c" to match b. If a = AbcDE and b = AFDE, matching is not possible because letters may only be capitalized or discarded, not changed.
Function Description
Complete the function abbreviation(). It must return either YES or NO.
Input: two parameters - a: the String to modify, b: the String to match. String a consits only of uppercase and lowercase English letters, ascii[A-Za-z]. String b consists only of uppercase English letters, ascii[A-Z]
Output: String "YES" if it's possible to make string a equal to string b. Otherwise, print "NO"
Sample Input: abbreviation("daBcd", "ABC")
Output: "YES"
We have a = daBcd and b = ABC. We perform the following operation:
- Capitalize the letters "a" and "c" in a so that a = daBcd
- Delete all the remaining lowercase letters in a so that a = ABC
Because we were able to successfully convert a to b, we print "YES" .
3) Blocks
Робот Пафнутий узнал про блоки. И теперь он отказывается работать как-то по другому.
Помоги Пафнутию выполнить простейшие операции с разными типами объектов.
blockA — принимает данные. В блок передается массив разных объектов. Числа, строки, даты. Массив без данных Пафнутий не принимает.
blockB — принимает данные. В блок передается класс объекта, с которым нужно работать.
blockC — возвращает данные на основе тех, которые были получены в блоках A и B.
В зависимости от принимаемого массива в блоке A и класса в блоке B в блок C возвращается:
- Для чисел — сумма всех чисел
- Для строк — конкатенация всех строк
- Для дат — самая позняя (т.е. ближайшая к текущему дню) дата в виде строки в формате dd.MM.yyyy
blockC вызывается, когда у Пафнутия хватает данных для вычисления
Пример:
- В blockA передаем массив [1, "4", 2, "3"]
- В blockB передаем класс String
- В blockC возвращает "43", так как из массива в блоке А берутся элементы типа String (из блока B) - "4" и "3" - и происходит их конкатенация
Input:
- blockA - cписок с объектами Array одного из трех типов (тип объектов может быть String, Int или LocalDate)
- blockB - тип объекта KClass<*>
Output: blockC: Any - результат, согласно условиям описанным выше
👌