คุณได้รับการว่าจ้างให้เขียนรหัสบางส่วนสำหรับแอปที่เขียนตามคำบอกซึ่งใช้การป้อนข้อมูลด้วยเสียงจากแหล่งพูดพูดแยกเป็นคำและเขียนลงบนหน้าจอ
ฝ่ายบริหารไม่เชื่อใจคุณในทุกสิ่งที่มีพลังมากในโครงการ - คุณรู้จักที่จะนั่งรอบ ๆ และตีกอล์ฟตลอดทั้งวันแทนที่จะทำงานของคุณโชคไม่ดี - พวกเขาแค่ให้งานง่าย ๆ แก่คุณเท่านั้น: เปลี่ยน ประโยคที่มีเครื่องหมายวรรคตอนสลับกันเป็นประโยคที่จัดรูปแบบอย่างถูกต้องโดยกำหนด 'รูปแบบที่เหมาะสม' ไว้ด้านล่าง
ประโยคเป็นสตริงของอินพุต Word เป็นกลุ่มของอักขระที่ไม่ใช่ช่องว่างที่ต่อเนื่อง
^
เครื่องหมายวรรคตอนเป็นคำที่มีตัวอักษรตัวแรกคือคำจะเป็นตัวพิมพ์ใหญ่หากตัวอักษรตัวแรกของ Word ไม่ใช่ตัวพิมพ์เล็ก (คำที่เป็นตัวพิมพ์ใหญ่จะตรงกับ regex
/[^a-z].*/
)คำแรกของประโยคจะต้องเป็นตัวพิมพ์ใหญ่
A
^COMMA
คืออักขระเครื่องหมายจุลภาค,
และมีช่องว่างหลัง แต่ไม่นำหน้า จะกลายเป็นaaa ^COMMA bbb
aaa, bbb
เป็นเครื่องหมายจุลภาคที่มีลักษณะเหมือน
^COLON
:
เป็นเครื่องหมายจุลภาคที่มีลักษณะเหมือน
^SEMICOLON
;
เป็นเครื่องหมายจุลภาคที่มีลักษณะเหมือน
^PERIOD
.
คำต่อไปนี้^PERIOD
จะต้องเป็นตัวพิมพ์ใหญ่เป็นช่วงเวลาที่ดูเหมือนว่า
^BANG
!
A
^DASH
คืออักขระเส้นประ-
และมีช่องว่างทั้งก่อนหน้าและถัดไปA
^HYPHEN
เป็นอักขระเส้นประ-
แต่ไม่มีที่ว่างในการติดตามหรือนำหน้า^EMDASH
คือยัติภังค์ (ไม่รีบ!)--
ที่จะสะกดAn
^OPENQUOTE
เป็นอักขระเครื่องหมายคำพูด"
ที่มีช่องว่างนำหน้า แต่ไม่ได้ติดตาม คำต่อไปนี้^OPENQUOTE
จะต้องเป็นตัวพิมพ์ใหญ่ หาก^OPENQUOTE
จะนำหน้าด้วยคำที่ไม่ได้เป็นเครื่องหมายวรรคตอนเพิ่มระหว่างคำว่าและ^COMMA
^OPENQUOTE
หาก a^OPENQUOTE
นำหน้าด้วยเครื่องหมายวรรคตอนที่ทำให้คำถัดไปเป็นตัวพิมพ์ใหญ่คำนี้จะข้าม^OPENQUOTE
ไปที่คำถัดไปA
^CLOSEQUOTE
คือ digraph,"
ที่มีช่องว่างตามหลัง แต่ไม่นำหน้า หาก^CLOSEQUOTE
นำโดย^COMMA
,^PERIOD
หรือ^BANG
ที่เครื่องหมายวรรคตอนหายไปและ^CLOSEQUOTE
ถูกสะกด,"
,."
หรือ!"
ตามลำดับ หากเครื่องหมายวรรคตอนที่หายไประบุการใช้อักษรตัวพิมพ์ใหญ่การใช้อักษรตัวพิมพ์ใหญ่นั้นจะต้องเกิดขึ้นกับคำถัดไปที่มีอยู่ช่องว่างเริ่มต้นหรือต่อท้ายในผลลัพธ์สุดท้ายเต็มรูปแบบจะต้องถูกลบออกและสตริงใด ๆ ของสองหรือมากกว่าช่องว่างในแถวจะต้องถูกยุบลงในอักขระช่องว่างเดียว
กรณีใด ๆ ที่ไม่ได้กล่าวถึงข้างต้น (เช่น
^COMMA ^COMMA
หรือ^SEMICOLON ^CLOSEQUOTE
หรือ^UNDEFINEDPUNCTUATION
) จะไม่เกิดขึ้นในอินพุตที่มีรูปแบบที่เหมาะสมและเป็นพฤติกรรมที่ไม่ได้กำหนดไว้
ทีมพัฒนาแจ้งให้คุณทราบดังต่อไปนี้:
โครงการกำลังเขียนเป็นภาษา[ภาษาของคุณที่นี่]และควรสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อให้ใช้พื้นที่น้อยที่สุดเมื่อเป็นแอพสำหรับ Android / iPhone คุณพยายามอธิบายว่านั่นไม่ใช่วิธีการพัฒนาแอป แต่พวกเขาไม่ฟัง แต่เดี๋ยวก่อนช่างเป็นเรื่องบังเอิญ! คุณเป็นนักกอล์ฟที่ยอดเยี่ยมใน[ภาษาของคุณที่นี่] !
แอปจะไม่มีสิทธิ์การเข้าถึงเว็บใด ๆ และจะไม่มีห้องสมุดใด ๆ ที่ติดตั้งซึ่งจัดรูปแบบนี้ให้คุณ คุณอาจโน้มน้าวให้ทีมนำไปสู่การอนุญาตให้คุณใช้ไลบรารี regex หากมีอยู่ในภาษาของคุณ แต่ถ้าคุณคิดว่าคุณต้องการ
การสนับสนุนใบเสนอราคาซ้อนที่ใช้เครื่องหมายคำพูดคู่ / เดี่ยวได้รับการวางแผนอย่างถูกต้องสำหรับแอปเวอร์ชันที่ใหม่กว่า แต่ไม่ใช่เวอร์ชันที่คุณใช้งานอยู่ในขณะนี้ดังนั้นอย่ากังวลเกี่ยวกับเรื่องนี้
ฝ่ายบริหารเป็นแฟนตัวยงของการพัฒนาที่ขับเคลื่อนด้วยการทดสอบดังนั้นทีมนักพัฒนาจึงมีลิงคีย์บอร์ดที่โชคดีที่เขียนการทดสอบบางส่วนสำหรับโปรแกรมของคุณ: (เพิ่มบรรทัดใหม่เพื่อให้สามารถอ่านได้
การป้อนข้อมูล:
hello ^COMMA world ^BANG
เอาท์พุท:
Hello, world!
การป้อนข้อมูล:
once upon a time ^COMMA there was a horse ^PERIOD that horse cost me $50 ^PERIOD ^OPENQUOTE eat your stupid oats ^COMMA already ^BANG ^CLOSEQUOTE I told the horse ^PERIOD the horse neighed back ^OPENQUOTE no ^CLOSEQUOTE and died ^PERIOD THE END
เอาท์พุท:
Once upon a time, there was a horse. That horse cost me $50. "Eat your stupid oats, already!" I told the horse. The horse neighed back, "No," and died. THE END
การป้อนข้อมูล:
begin a ^PERIOD b ^COMMA c ^COLON d ^SEMICOLON e ^BANG f ^HYPHEN g ^DASH h ^EMDASH i ^OPENQUOTE j ^PERIOD ^OPENQUOTE k ^SEMICOLON ^OPENQUOTE l ^CLOSEQUOTE m ^BANG ^CLOSEQUOTE n ^PERIOD 0x6C6F6C end
เอาท์พุท:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
นี่คือรหัสกอล์ฟ: คะแนนต่ำสุดชนะ คุณสามารถเขียนฟังก์ชันของอาร์กิวเมนต์สตริงหนึ่งตัวหรือโปรแกรมอ่านจาก STDIN และเขียนไปยัง STDOUT
prompt()
?