Дано рядок, поверніть йому "удачу".
Удача струни, як я цілком склав для цього завдання, - ціле число, визначене так:
- Основна удача для струни - 1.
- Кожен лист поспіль ділиться на слово "пощастило" (нечутливий до регістру), помножте удачу на 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);
?