บทนำ
เมื่อเร็ว ๆ นี้ฉันเริ่มชินกับการพิมพ์ด้วยSwypeแล้ว
ฉันสังเกตเห็นบางคำที่สามารถสร้างได้โดยการวาดเส้นตรงจากตัวอักษรเริ่มต้นของคุณไปยังตัวอักษรสุดท้ายของคุณหรือโดยการข้ามตัวอักษรที่ทำซ้ำ
ตัวอย่างเช่นฉันสามารถพิมพ์คำballoonโดย Swyping ผ่านตัวอักษรต่อไปนี้:
b> a> l> >on
ท้าทาย
ขอให้เรากำหนดเส้นทางที่สั้นที่สุด SwypeหรือSSPเป็นจำนวนขั้นต่ำของส่วนของเส้นที่แตกต่างที่จำเป็นในการพิมพ์สตริง ส่วนของเส้นตรงเป็นเส้นตรงต่อเนื่องระหว่างตัวอักษรสองตัวขึ้นไป การเปลี่ยนแปลงทิศทางใด ๆ จะเริ่มเซ็กเมนต์บรรทัดใหม่ - แม้ว่าคำบางคำอาจถูก Swyped โดยการวาดเพียงเส้นตรงเส้นเดียว
ใช้รูปแบบแป้นพิมพ์QWERTYง่าย ๆ นี้:
q w e r t y u i o p
a s d f g h j k l
z x c v b n m
ในตัวอย่างข้างต้นคำว่าballoonจะมีSSPการ4ตามรายละเอียดในลำดับดังต่อไปนี้:
1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)
สตริงqwertyมีSSP= 1 เนื่องจากไม่จำเป็นต้องเปลี่ยนทิศทางเมื่อทำการ Swyping คำนี้
อินพุต
สตริงคำเดียวที่มีใด ๆa-zผ่าน STDIN, อาร์กิวเมนต์ของฟังก์ชันหรือบรรทัดคำสั่ง
เอาท์พุต
พิมพ์ผ่าน STDOUT ผลตอบแทนหรือภาษาของคุณทางเลือกที่ใกล้เคียงที่สุดจำนวนตัวแทนของสตริงnSSP
ขึ้นบรรทัดใหม่หนึ่งตัวเลือกใน outut ช่องโหว่มาตรฐานไม่อนุญาต การส่งที่สั้นที่สุดในหน่วยไบต์ชนะ
หมายเหตุ
- การเปลี่ยนทิศทางเริ่มต้นส่วนของบรรทัดใหม่
- ตัวอักษรที่ทำซ้ำจะนับเพียงครั้งเดียว (เช่น:
bookkeeperควรได้รับการปฏิบัติตามbokeper) - โดยปกติ Swpye จะแก้ไขตัวอักษรที่ไม่ได้รับโดยดูจากตัวอักษรที่อยู่ใกล้เคียงและเติมเต็มการเดาที่ดีที่สุด สำหรับความท้าทายนี้สมมติว่าไม่มีการใช้ภาษาธรรมชาติการทำนายข้อความหรือการแก้ไขข้อผิดพลาด
A-Zอินพุตตัวพิมพ์ใหญ่จะถูกใช้เสมือนเป็นตัวพิมพ์เล็ก- ละเว้นตัวเลขใด ๆ
0-9ในอินพุต - เส้นทางในแนวทแยงได้รับอนุญาต - นั่นคือเส้นตรงที่ตัวอักษรครอบคลุม
o,k,nตัวอย่างเช่นนับเป็น1ส่วน กฎนี้จะมีผลกับความลาดเอียงเส้นทแยงมุมใด ๆ (เช่น: ตัวอักษรc,h,iอยู่ในบรรทัด)
ตัวอย่าง
Input Output
---------------------
a 0
aa 0
aaaaaa 0
aaaaaabc 2
in 1
int 2
java 3
qwerty 1
chicago 5
balloon 4
BALLOON 4
typewriter 5
bookkeeper 6
stackexchange 11
2hello7 3
2HELLO7 3