Étant donné une chaîne, renvoyez la "chance" de cette chaîne.
La chance d'une chaîne, comme je viens de la rattraper pour le but de ce défi, est un entier, déterminé comme suit:
- La chance de base pour une chaîne est 1.
- Pour chaque lettre consécutive qu'il partage avec le mot "chanceux" (insensible à la casse), multipliez la chance par 2. Par exemple, si votre chaîne était " lu mberjack" ou "sma ck ", vous multiplieriez par 4. (Plus précisément, 2 ^ nombre de caractères consécutifs partagés.)
- Les lettres partagées doivent être dans le même ordre consécutif; elles apparaissent dans "chanceux" mais peuvent commencer n'importe où dans le mot pour la même valeur ("luc" a le même multiplicateur 8 * que "cky").
- Si le mot a plusieurs occurrences où il partage des caractères consécutifs avec chanceux, utilisez la chaîne de caractères consécutive la plus longue.
- Pour N'IMPORTE QUELLE lettre, elle partage le mot "présage", soustrayez 2 de la chance.
- Il peut correspondre à un personnage à tout moment, dans n'importe quel ordre. Par exemple, la chaîne "nnnnnomemenn" perd 24 points de chance (12 lettres correspondantes)
Exemple:
luck("lucky")
>>32
2 ^ 5 (5 lettres consécutives) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 lettres consécutives de uck , e partagé avec omen)
luck("memes")
>>-7
1 - 8 (montant de base, 4 partagé avec "augure")
C'est le code de golf, donc la réponse avec le moins d'octets gagne.
Vous pouvez entrer et sortir comme vous le souhaitez - écrire une fonction, utiliser une entrée standard, etc.
Pour les fonctions, supposons que tout type de données ait un sens pour cette langue. (Par exemple, en JavaScript, vous recevrez un String
et retournerez un Number
)
Modifier: vous pouvez supposer que toute entrée est en minuscule.
int8_t str_luck(const char* str);
ou devrait-il être uint64_t str_luck(const char* str);
?