-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhighest_scoring_word.os
38 lines (34 loc) · 2.33 KB
/
highest_scoring_word.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Текст задачи: https://www.codewars.com/kata/57eb8fcdf670e99d9b000272 (6 kyu).
// Рейтинг буквы равен её позиции в алфавите. Для английского языка: a = 1, b = 2 и т. д.
// Рейтинг слова = сумма рейтингов содержащихся в нём букв.
// Дана строка, необходимо вывести слово с наивысшим рейтингом. Если рейтинг у нескольких слов одинаковый, вывести первое из них.
// Все слова записаны в нижнем регистре, знаков препинания в предложениях нет (они всё равно не учитываются).
Функция АлфавитСтруктура()
Алфавит = Новый Структура;
Для Индекс = 0 По 25 Цикл
Алфавит.Вставить(Символ(Индекс + 97), Индекс);
КонецЦикла;
Возврат Алфавит;
КонецФункции
Функция РейтингСлова(ИсходноеСлово, Алфавит)
Длина = СтрДлина(ИсходноеСлово);
Рейтинг = 0;
Для Позиция = 1 По Длина Цикл
Символ = Сред(ИсходноеСлово, Позиция, 1);
Рейтинг = Рейтинг + Алфавит[Символ];
КонецЦикла;
Возврат Рейтинг;
КонецФункции
АлфавитРейтинги = АлфавитСтруктура();
ИсходнаяСтрока = "what time are we climbing up the volcano";
СтрокаМассив = СтрРазделить(ИсходнаяСтрока, " ");
НаивысшийРейтинг = 0;
СловоСНаивысшимРейтингом = "";
Для Каждого Слово Из СтрокаМассив Цикл
РейтингТекущегоСлова = РейтингСлова(Слово, АлфавитРейтинги);
Если РейтингТекущегоСлова > НаивысшийРейтинг Тогда
НаивысшийРейтинг = РейтингТекущегоСлова;
СловоСНаивысшимРейтингом = Слово;
КонецЕсли;
КонецЦикла;
Сообщить(СловоСНаивысшимРейтингом);