Dada una cadena, devuelve la "suerte" de esa cadena.
La suerte de una cadena, como acabo de inventar con el propósito de este desafío, es un número entero, determinado de esta manera:
- La suerte base para una cadena es 1.
- Para cada letra consecutiva que comparte con la palabra "suerte" (no distingue entre mayúsculas y minúsculas), multiplique la suerte por 2. Por ejemplo, si su cadena era " lu mberjack" o "sma ck ", multiplicaría por 4. (Más específicamente, 2 ^ número de caracteres consecutivos compartidos)
- Las letras compartidas deben estar en el mismo orden consecutivo que aparece en "suerte", pero pueden comenzar en cualquier parte de la palabra por el mismo valor ("luc" tiene el mismo multiplicador 8 * que "cky").
- Si la palabra tiene múltiples ocurrencias donde comparte caracteres consecutivos con lucky, use la cadena consecutiva más larga de los caracteres.
- Para CUALQUIER letra que comparta con la palabra "presagio", reste 2 de la suerte.
- Puede coincidir con un personaje cualquier cantidad de veces, en cualquier orden. Por ejemplo, la cadena "nnnnnomemenn" pierde 24 suerte (12 letras coincidentes)
Ejemplo:
luck("lucky")
>>32
2 ^ 5 (5 letras consecutivas) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 letras consecutivas de uck , e compartidas con presagio)
luck("memes")
>>-7
1 - 8 (cantidad base, 4 compartidos con "presagio")
Este es el código de golf, por lo que gana la respuesta con la menor cantidad de bytes.
Puede ingresar y emitir de la forma que desee: escriba una función, use la entrada estándar, etc.
Para las funciones, suponga que cualquier tipo de datos tendría sentido para ese idioma. (Por ejemplo, en JavaScript, se le pasará ay String
devolverá a Number
)
Editar: puede suponer que cualquier entrada es minúscula.
int8_t str_luck(const char* str);
o debería ser uint64_t str_luck(const char* str);
?