ครูของฉันเป็นมากกว่าความสุขกับฉันทำการบ้านอังคาร ฉันปฏิบัติตามกฎทั้งหมด แต่เธอบอกว่าสิ่งที่ฉันส่งออกเป็นคำพูดพล่อยๆ ... เมื่อเธอดูเป็นครั้งแรกเธอสงสัยอย่างมาก "ทุกภาษาควรปฏิบัติตามกฎหมายของ Zipf blah blah blah" ... ฉันไม่รู้ด้วยซ้ำว่ากฎของ Zipf คืออะไร!
ปรากฎว่ากฎหมายของ Zipfระบุว่าหากคุณพล็อตลอการิทึมของความถี่ของแต่ละคำบนแกน y และลอการิทึมของ "สถานที่" ของแต่ละคำบนแกน x (พบมากที่สุด = 1, วินาทีที่พบมากที่สุด = 2, ส่วนใหญ่ที่สาม commmon = 3 และอื่น ๆ ) จากนั้นพล็อตจะแสดงเส้นที่มีความชันประมาณ -1 ให้หรือรับประมาณ 10%
ตัวอย่างเช่นนี่คือโครงเรื่องสำหรับ Moby Dick:
แกน x เป็นคำที่พบบ่อยที่สุดที่nแกน y คือจำนวนครั้งที่เกิดขึ้นของคำที่พบบ่อยที่สุดครั้งที่n ความชันของเส้นประมาณ -1.07
ตอนนี้เรากำลังครอบคลุม Venutian โชคดีที่ชาว Venutians ใช้ตัวอักษรละติน กฎมีดังนี้:
- แต่ละคำจะต้องมีสระอย่างน้อยหนึ่งสระ (a, e, i, o, u)
- ในแต่ละคำสามารถมีสระได้ถึงสามสระในหนึ่งแถว แต่ไม่เกินสองพยัญชนะในหนึ่งแถว (พยัญชนะเป็นตัวอักษรใด ๆ ที่ไม่ใช่สระ)
- ไม่เกิน 15 ตัวอักษร
- ทางเลือก: จัดกลุ่มคำเป็นประโยคยาว 3-30 คำคั่นด้วยเครื่องหมายจุด
เนื่องจากครูรู้สึกว่าฉันโกงการบ้านอังคารฉันจึงได้รับมอบหมายให้เขียนเรียงความอย่างน้อย 30,000 คำ (ใน Venutian) เธอจะตรวจสอบงานของฉันโดยใช้กฎของ Zipf ดังนั้นเมื่อมีการติดตั้งบรรทัด (ดังที่อธิบายไว้ด้านบน) ความชันจะต้องมีอย่างน้อยที่สุด -0.9 แต่ไม่น้อยกว่า -1.1 และเธอต้องการคำศัพท์อย่างน้อย 200 คำ คำเดียวกันไม่ควรซ้ำเกิน 5 ครั้งติดต่อกัน
นี่คือ CodeGolf ดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ โปรดวางผลลัพธ์ลงใน Pastebin หรือเครื่องมืออื่นที่ฉันสามารถดาวน์โหลดเป็นไฟล์ข้อความได้


