ดูเหมือนว่าจะมีความนิยมอย่างต่อเนื่องเกี่ยวกับผู้คนที่เรียนรู้รูปแบบแป้นพิมพ์ใหม่ ๆ อย่าง Dvorak หรือ Neo เพราะมันน่าจะทำให้พวกเขามีประสิทธิผลมากขึ้น ฉันยืนยันว่าการสลับรูปแบบแป้นพิมพ์เป็นความคิดที่ไม่ดีเพราะอาจใช้เวลาเป็นเดือนที่คุณจะได้รับความเร็วและเมื่อคุณมีความเร็วมากกว่าส่วนที่เหลืออีก 5% คุณจะเมาถ้าคุณจำเป็นต้องพิมพ์บนคอมพิวเตอร์ที่ไม่ใช่ เป็นของคุณเอง
นอกจากนี้ทุกคนยังลืมที่คอขวดที่แท้จริงในการสื่อสารที่ทันสมัยอยู่ - ปุ่มกดโทรศัพท์
นี่คือลักษณะของปุ่มกดโทรศัพท์โดยเฉลี่ยของคุณ:
ตัวอักษร 'r' เป็นตัวอักษรตัวที่สามบนปุ่ม 7; ดังนั้นหากคุณต้องการพิมพ์ตัวอักษร 'r' บนโทรศัพท์มือถือคุณจะต้องกดปุ่ม 7 สามครั้งสำหรับ 's' คุณจะต้องกด 4 ครั้งและสำหรับ 'a' คุณจะต้องกดปุ่ม 2 ครั้งเดียว
เมื่อพิจารณาถึงสิ่งนี้การวาง 'e' หลังจาก 'd' อาจเป็นการตัดสินใจที่ไม่ดี - 'e' เป็นตัวอักษรที่ใช้บ่อยที่สุดในตัวอักษรภาษาอังกฤษดังนั้นถ้าคุณติดป้ายกำกับปุ่ม 3 "EDF" แทน "DEF" คุณ จะประหยัดการกดแป้นได้ค่อนข้างมาก
ยิ่งไปกว่านั้นคุณอาจพบว่าการพิมพ์ตัวอักษร 2 ตัวที่ใช้ปุ่มเดียวกันนั้นเป็นเรื่องน่ารำคาญ - หากคุณต้องการเขียน "TU" คุณจะไม่สามารถกด 8 ครั้งสามครั้งได้เพราะจะส่งผลให้ 'V' ดังนั้นโดยปกติคุณจะเขียน 'T' จากนั้นกด Space แล้วกด Backspace แล้วเขียน 'U' ซึ่งเท่ากับ 5 กดปุ่มแทน 3
TL; DR
รับกฎทั้งสองนี้:
- พิมพ์ตัวอักษรด้วยการกดปุ่ม n ครั้งโดยที่ n คือตำแหน่งที่ตัวอักษรอยู่บนป้ายของปุ่ม
- การเขียนตัวอักษรสองตัวที่พิมพ์โดยใช้ปุ่มเดียวกันต้องกดปุ่มเพิ่มอีก 2 ปุ่ม
รูปแบบแป้นพิมพ์โทรศัพท์ที่ต้องใช้จำนวนปุ่มน้อยที่สุดคืออะไรคือข้อความที่ระบุ? คุณควรใช้ปุ่ม 2-9, 1 และ 0 เท่านั้นที่สงวนไว้สำหรับสัญลักษณ์พิเศษ
อินพุต
ข้อความที่คุณควรหารูปแบบที่ดีที่สุดสำหรับการจัดหาผ่าน stdin คุณไม่จำเป็นต้องจัดการกับสิ่งอื่นใดนอกจากตัวอักษรตัวเล็กและสามารถสันนิษฐานได้ว่าอินพุตนั้นประกอบด้วยสิ่งนั้นเท่านั้น คุณสามารถสันนิษฐานได้ว่าข้อความที่ป้อนมีขนาดใหญ่พอสมควรและตัวอักษรทุกตัวอยู่ในนั้นอย่างน้อยหนึ่งครั้งถ้ามี
เอาท์พุต
ฉันไม่ต้องการใส่ข้อ จำกัด มากเกินไปในผลลัพธ์เนื่องจากบางครั้งก็ให้ประโยชน์กับภาษาอื่นมากกว่า ดังนั้นภาษาของคุณแสดงอาร์เรย์ได้ดีหรือคุณสามารถแยกแต่ละป้ายกำกับด้วยการขึ้นบรรทัดใหม่
อาจมีเลย์เอาต์ที่เหมาะสมที่สุดหลายรูปแบบคุณสามารถพิมพ์รูปแบบใดรูปแบบหนึ่ง นี่คือตัวอย่างง่ายๆ:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
คะแนนโบนัส
-35ถ้าอัลกอริทึมของคุณไม่ดุร้ายบังคับเลย์เอาต์ที่เป็นไปได้ทั้งหมด (ฉันกำลังดูที่ 'permutations' ของ Haskell ที่นี่)
-3หากรหัสของคุณพอดีกับข้อความ (140 ตัวอักษร) และคุณโพสต์รูปของคุณส่งรหัสของคุณให้เพื่อน
นี่เป็นความท้าทายครั้งแรกของฉันใน StackExchange ฉันยินดีที่จะได้ยินว่าคุณชอบหรือมีข้อเสนอแนะอื่น ๆ เกี่ยวกับมัน!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
การเรียงสับเปลี่ยนที่ไม่ซ้ำกัน