Đưa ra một chuỗi, trả lại "may mắn" của chuỗi đó.
May mắn của một chuỗi, vì tôi hoàn toàn chỉ bù cho mục đích của thử thách này, là một số nguyên, được xác định như vậy:
- Cơ sở may mắn cho một chuỗi là 1.
- Đối với mỗi chữ cái liên tiếp, nó chia sẻ với từ "may mắn" (không phân biệt chữ hoa chữ thường), nhân số may mắn lên 2. Ví dụ: nếu chuỗi của bạn là " lu mberjack" hoặc "sma ck " bạn sẽ nhân với 4. (Cụ thể hơn, 2 ^ số ký tự liên tiếp được chia sẻ.)
- Các chữ cái được chia sẻ phải theo thứ tự liên tiếp xuất hiện trong "may mắn" nhưng có thể bắt đầu ở bất cứ đâu trong từ có cùng giá trị ("luc" có cùng số nhân 8 * với "cky").
- Nếu từ có nhiều lần xuất hiện trong đó nó chia sẻ các ký tự liên tiếp với may mắn, hãy sử dụng chuỗi ký tự liên tiếp dài nhất.
- Đối với BẤT K letter chữ cái nào nó chia sẻ với từ "điềm báo" trừ đi 2 từ may mắn.
- Nó có thể phù hợp với một nhân vật bất kỳ số lần, theo bất kỳ thứ tự nào. Chẳng hạn, chuỗi "nnnnnomemenn" mất 24 may mắn (12 chữ cái khớp)
Thí dụ:
luck("lucky")
>>32
2 ^ 5 (5 chữ cái liên tiếp) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 chữ cái liên tiếp từ uck , e chia sẻ với điềm báo)
luck("memes")
>>-7
1 - 8 (số tiền gốc, 4 được chia sẻ với "điềm báo")
Đây là mã golf, vì vậy câu trả lời có ít byte nhất sẽ thắng.
Bạn có thể nhập và xuất bất kỳ cách nào bạn muốn - viết một hàm, sử dụng đầu vào tiêu chuẩn, v.v.
Đối với các hàm, giả sử bất kỳ loại dữ liệu nào sẽ có ý nghĩa đối với ngôn ngữ đó. (Ví dụ: trong JavaScript, bạn sẽ được thông qua String
và trả lại a Number
)
Chỉnh sửa: Bạn có thể giả sử bất kỳ đầu vào là chữ thường.
int8_t str_luck(const char* str);
hay nên uint64_t str_luck(const char* str);
?