Bir dize verildiğinde, o dizenin "şansını" döndür.
Bir dizgenin şansı, bu zorluğun amacı için tamamen yeni oluşturduğum gibi, tam olarak şöyle belirlenmiştir:
- Bir dize için temel şans 1'dir.
- Her ardışık harf için "şanslı" kelimesiyle paylaşır (duyarsız), şansı 2 ile çarpın. Örneğin, dizeniz " lu mberjack" veya "sma ck " ise 4 ile çarpın. (Daha spesifik olarak, 2 ^ paylaşılan ardışık karakter sayısı.)
- Paylaşılan harflerin "şanslı" olarak göründüğü aynı ardışık sırada olması gerekir, ancak aynı değer için kelimenin herhangi bir yerinde başlayabilir ("luc", "cky" ile aynı 8 * çarpanına sahiptir).
- Kelimenin ardışık karakterlerini şanslı ile paylaştığı birden çok tekrar oluşuyorsa, karakterlerin en uzun ardışık dizesini kullanın.
- HERHANGİ bir mektup için "omen" kelimesiyle paylaşır, şanstan 2 çıkar.
- Bir karaktere, herhangi bir sırada, herhangi bir miktarda, herhangi bir miktarda eşleşebilir. Örneğin, "nnnnnomemenn" dizgisi 24 şans kaybeder (eşleşen 12 harf)
Örnek:
luck("lucky")
>>32
2 ^ 5 (5 ardışık harf) = 32
luck("firetruck")
>>6
2 ^ 3-2 (3 ardışık harfler UCK'nın , E alâmet ile ortak)
luck("memes")
>>-7
1 - 8 (temel tutar, 4 "omen" ile paylaşılan)
Bu kod golf, yani en az bayt olan cevap kazanıyor.
İstediğiniz gibi giriş ve çıkış yapabilirsiniz - bir işlev yazın, standart giriş kullanın, vb.
İşlevler için, bu dil için hangi veri türünün anlamlı olacağını varsayalım. (Örneğin, JavaScript’te, a ile gönderilir String
ve a ile döndürülür Number
)
Düzenleme: Herhangi bir girişin küçük harf olduğunu varsayabilirsiniz.
int8_t str_luck(const char* str);
öyle uint64_t str_luck(const char* str);
mi yoksa öyle mi olmalı ?