Podany ciąg zwraca „szczęście” tego ciągu.
Szczęście sznurka, które właśnie nadrobiłem na potrzeby tego wyzwania, jest liczbą całkowitą, określoną w ten sposób:
- Podstawowym szczęściem dla sznurka jest 1.
- Dla każdej kolejnej litery, którą dzieli ze słowem „szczęśliwy” (bez względu na wielkość liter), pomnóż szczęście przez 2. Na przykład, jeśli ciąg znaków to „ lu mberjack” lub „sma ck ”, pomnożysz przez 4. (Dokładniej, 2 ^ liczba udostępnionych kolejnych znaków.)
- Litery współdzielone muszą być w tej samej kolejności, w jakiej występują w „szczęśliwym”, ale mogą zaczynać się w dowolnym miejscu tego słowa dla tej samej wartości („luc” ma ten sam 8 * mnożnik jak „cky”).
- Jeśli słowo ma wiele wystąpień, w których dzieli kolejne znaki ze szczęśliwymi, użyj najdłuższego ciągu kolejnych znaków.
- W przypadku KAŻDEJ litery, którą dzieli ze słowem „omen”, odejmij 2 od szczęścia.
- Może pasować do postaci dowolną ilość razy, w dowolnej kolejności. Na przykład ciąg „nnnnnomemenn” traci 24 szczęścia (12 pasujących liter)
Przykład:
luck("lucky")
>>32
2 ^ 5 (5 kolejnych liter) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 kolejne litery od uck , e wspólne z omen)
luck("memes")
>>-7
1–8 (kwota podstawowa, 4 wspólne z „omen”)
To jest golf golfowy, więc wygrywa odpowiedź z najmniejszą liczbą bajtów.
Możesz wprowadzać i wyprowadzać w dowolny sposób - napisz funkcję, użyj standardowego wejścia itp.
W przypadku funkcji załóż, że dowolny typ danych ma sens dla tego języka. (Na przykład w JavaScript zostaniesz przekazany a String
i zwrócisz a Number
)
Edycja: Możesz założyć, że każde wejście jest pisane małymi literami.
int8_t str_luck(const char* str);
czy powinno być, czy powinno być uint64_t str_luck(const char* str);
?