Если дана строка, верните ее «удачу».
Удача строки, как я только что придумал для этой задачи, является целым числом, определяемым так:
- Базовое везение для строки - 1.
- Для каждой последовательной буквы, которую она разделяет со словом «lucky» (без учета регистра), умножьте удачу на 2. Например, если ваша строка была « lu mberjack» или «sma ck », вы умножили бы на 4. (Более конкретно, 2 ^ количество последовательных символов.)
- Совместно используемые буквы должны быть в том же порядке, в котором они указаны как «счастливые», но могут начинаться в любом месте слова с тем же значением («luc» имеет тот же множитель 8 *, что и «cky»).
- Если слово встречается несколько раз, когда оно разделяет последовательные символы на счастливое, используйте самую длинную последовательную строку символов.
- Для ЛЮБОГО письма оно делится со словом «предзнаменование», отнимает 2 от удачи.
- Он может соответствовать персонажу любое количество раз и в любом порядке. Например, строка «nnnnnomemenn» теряет 24 удачи (12 совпадающих букв)
Пример:
luck("lucky")
>>32
2 ^ 5 (5 последовательных букв) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 последовательных письма от uck , e разделены с предзнаменованием)
luck("memes")
>>-7
1 - 8 (базовая сумма, 4 делятся на «предзнаменование»)
Это код гольф, поэтому ответ с наименьшим количеством байтов выигрывает.
Вы можете вводить и выводить данные любым способом - написать функцию, использовать стандартный ввод и т. Д.
Для функций предположите, какой тип данных будет иметь смысл для этого языка. (Например, в JavaScript вам нужно передать a String
и вернуть a Number
)
Изменить: Вы можете предположить, что любой ввод в нижнем регистре.
int8_t str_luck(const char* str);
и должно быть uint64_t str_luck(const char* str);
?