รับสตริงส่งคืน "โชค" ของสตริงนั้น
โชคของสตริงในขณะที่ฉันทำขึ้นเพื่อจุดประสงค์ของการท้าทายนี้โดยสมบูรณ์เป็นจำนวนเต็มพิจารณาดังนี้:
- โชคพื้นฐานสำหรับสตริงคือ 1
- สำหรับแต่ละตัวอักษรที่ต่อเนื่องกันจะแบ่งปันด้วยคำว่า "lucky" (ไม่คำนึงถึงขนาดตัวพิมพ์) คูณโชคด้วย 2 ตัวอย่างเช่นถ้าสตริงของคุณคือ " lu mberjack" หรือ "sma ck " คุณจะคูณด้วย 4 (เพิ่มเติมโดยเฉพาะ แบ่งปันอักขระต่อเนื่อง 2 ^ ตัว)
- ตัวอักษรที่ใช้ร่วมกันจะต้องอยู่ในลำดับเดียวกันนั้นปรากฏใน "lucky" แต่สามารถเริ่มที่ใดก็ได้ในคำสำหรับค่าเดียวกัน ("luc" มีตัวคูณ 8 * เดียวกันกับ "cky")
- หากคำนั้นมีหลายครั้งที่คำนั้นมีการใช้อักขระร่วมกันโชคดีให้ใช้สตริงที่ต่อเนื่องกันนานที่สุดของอักขระ
- สำหรับจดหมายใด ๆ มันจะแบ่งปันด้วยคำว่า "ลางบอกเหตุ" ลบ 2 จากโชค
- มันสามารถจับคู่กับตัวละครจำนวนครั้งในลำดับใด ๆ ตัวอย่างเช่นสตริง "nnnnnomemenn" สูญเสีย 24 โชค (12 ตัวอักษรที่ตรงกัน)
ตัวอย่าง:
luck("lucky")
>>32
2 ^ 5 (5 ตัวอักษรติดต่อกัน) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (จดหมาย 3 ฉบับติดต่อกันจากuck , eใช้ร่วมกับลางบอกเหตุ)
luck("memes")
>>-7
1 - 8 (จำนวนฐาน 4 แบ่งปันกับ "ลางบอกเหตุ")
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ
คุณสามารถอินพุตและเอาต์พุตในแบบที่คุณต้องการ - เขียนฟังก์ชั่นใช้อินพุตมาตรฐาน ฯลฯ
สำหรับฟังก์ชั่นสมมติว่าชนิดข้อมูลใดที่เหมาะสมสำหรับภาษานั้น (ตัวอย่างเช่นใน JavaScript คุณจะถูกส่งผ่านString
และส่งคืนNumber
)
แก้ไข: คุณสามารถสมมติว่าอินพุตใด ๆ เป็นตัวพิมพ์เล็ก
int8_t str_luck(const char* str);
หรือควรเป็นuint64_t str_luck(const char* str);
อย่างไร