Объектно-ориентированное программирование

2. Конструкции структурного программирования в Kotlin

Теоретические сведения

Лекция

Задание

Данное задание предназначено для ознакомления с языком Kotlin. Для его выполнения нужно создать программу для поиска анаграмм. Анаграммы это слова (или фразы), состоящие из одинаковых букв, но расположенных в различном порядке, например: «автор» — «товар». Программ должна состоят из нескольких функций, приводящих список слов к форме, удобной для быстрого поиска. Список слов может быть взят тут (файл 20k.txt).

Создайте и протестируйте следующие функции:

  1. Создайте функцию
    fun charSort(word: String): String
    

    которая возвращает строку с буквами из аргумента в порядке возрастания. Можно использовать любой алгоритм сортировки. Подсказка: используйте тип CharArray.

  2. Определим
    class WordWithIndex(val word:String, val index:Int)
    

    Создайте функцию

    fun wordArraySort(array: Array<WordWithIndex>)
    

    которая сортирует array по убыванию свойства word.

  3. Создайте функцию
    fun getAnagrams(words: Array<String>) :ArrayList<ArrayList<String>>
    

    которая возвращает список списков анаграмм, например: {{автор, тавро, отвар, рвота, втора, товар}, {сила, лиса}, …}. Эта функция создает массив из WordWithIndex из исходного массива, затем, используя функцию charSort, создает новый массив из WordWithIndex с отсортированными буквами в каждом слове. Далее, последний массив сортируется с помощью функции wordArraySort. В отсортированном массиве анаграммы должны быть расположены по порядку и находятся за один проход по массиву.

  4. В проекте IDEA создайте каталог «resource», пометьте его как «Resources Root» и поместите в него файл со списком слов. Создайте функцию main () которая находит все анаграммы из исходного файла. Для чтения из файла списка слов можно использовать следующий код:
    val words = WordWithIndex::class.java.getResource("20k.txt")
            .readText()
            .split("\n")
            .filter { it.length>10 }
            .toTypedArray()