คุณรู้ว่าคุณได้รับข้อความเสียงและการเชื่อมต่อของบุคคลนั้นไม่ดีและคุณพยายามหาวิธีโทรกลับ แต่คุณไม่แน่ใจว่าเป็น "5" หรือ "8" พวกเขา กล่าวว่า?
นั่นคือความท้าทายนี้
ข่าวดีก็คือผู้โทรอ่านหมายเลขของพวกเขาสองครั้ง แต่อ่านไม่ออกทั้งสองแห่ง
โปรแกรมของคุณควรรับข้อมูลดังนี้:
5551231234 / 5551231234
โดยที่สิบหลักแรกเป็นครั้งแรกที่มีการพูดหมายเลขโทรศัพท์ในวอยซ์เมลและชุดที่สองเป็นครั้งที่สองที่มีการพูด เฉพาะ ... มันจะมีลักษณะเช่นนี้มากขึ้น:
555?ABC1_36? / 55?522_1?234
- ตัวเลขที่ตามมาด้วยเครื่องหมายคำถามหมายความว่าเป็นสิ่งที่ดีที่สุดที่เดาได้สำหรับตัวเลขนั้น (เช่น "5?" หมายถึง "อาจเป็น 5, เปรียบเทียบกับการทำซ้ำ")
- ขีดเส้นใต้หมายถึงตัวเลขที่หายไปซึ่งเป็นที่รู้จักบางสิ่งบางอย่างที่คลุมเครือเกินกว่าที่จะถูกถอดรหัสได้ทั้งหมด
- ตัวอักษรเป็นแค่นั้น: ตัวอักษร ปฏิบัติต่อพวกเขาเป็นตัวเลขตามลำดับ
- ABC -> 2, DEF -> 3, GHI -> 4, JKL -> 5, MNO -> 6, PQRS -> 7, TUV -> 8, WXYZ -> 9
- อินพุตตัวอย่างทั้งหมดใช้ตัวพิมพ์ใหญ่ (คุณสามารถละเว้นการโทร ToUpper () ได้อย่างปลอดภัย)
- หากภาษาของคุณใช้งานได้ดีขึ้นในกรณีเล็กคุณสามารถใช้ตัวพิมพ์เล็กสำหรับอินพุตและละเว้นการโทร ToLower () เพียงแค่ทราบว่าในคำตอบของคุณ
คุณยังสามารถรับสายการตัดสินต่อไปนี้เพิ่มเติมได้:
5? / _ -> 5 //5 is the best guess we have, use it
5? / 5? -> 5 //uncertain, but matching
5? / 4? -> ? //conflict
5 / 4 -> ? //conflict
5? / 4 -> 4 //solid information overrides possible value
5 / 4? -> 5 //solid information overrides possible value
_ / _ -> ? //no information available
นอกจากนี้คุณสามารถสมมติว่าอินพุตทั้งหมดจะมีหมายเลขโทรศัพท์สิบหลักไม่รวมถึงเครื่องหมายคำถาม อินพุตที่ไม่ใช่ตัวเลขสิบหลัก (เช่น1234567 / 1234567
) สามารถถือว่าไม่สามารถแก้ไขได้ (เอาต์พุตเท็จ) หรือเกิดข้อผิดพลาด
อินพุต
อักขระหนึ่งบรรทัด0-9A-Z _?/
ตามที่อธิบายไว้ข้างต้น
เอาท์พุต
หากสามารถแยกวิเคราะห์ไปยังหมายเลขโทรศัพท์หนึ่งหลักสิบที่ถูกต้องให้ส่งออกหมายเลขโทรศัพท์ มิฉะนั้นให้ส่งข้อบ่งชี้ข้อผิดพลาดบางรูปแบบ (เช่น -1, เท็จหรือบรรทัดว่าง)
ชนะสั้นที่สุดตามปกติ
อินพุตตัวอย่าง:
1234567890 / 1234567890
1234567890? / 1234567890
123456789_ / 1234567890
1234567890? / 123456789_
1234567890 / 1234567890?
1234567890 / 123456789_
123456789_ / 1234567890?
1234567890? / 1234567890?
1234567890? / 1234567891?
123456789_ / 123456789_
555CALLUS1 / 5552255871
404_12?6039 / 4041?1560_9
_GETREVENGE / 16?36?_2838_
1?691460_50 / 16_14609?50
61?08977211 / 612?897725?1
40?0INSTA__ / 8?00_NSTI?LL
3985_534?10 / 39?8?5053_10
7__7294?737 / 7797299?_37
28?897_384?1 / _8?89763861
271168090_ / 27116800?09
6802?148343 / 67?01148343
94_11628?2?6? / 9491162_47?
17?4285_689 / 1__26?52689
6_311?95_38 / 6731194?7?38
380?7DRAGON / 3807378?5?66
4?647_93236 / 5646?6?9__36
365?268898_ / 366267?7?984
GRATEDBATE / IRATEDBATE
5307_079?93 / ____8_____
535_3_0255 / 52?5_3_024?5
55_____088 / 54?2397207?7?
6_48398_95 / _946?398?6_5?
_0_312_3_1 / 81?53123?1?71
____1_____ / 64?255?508?61
8427820607 / 6?424?8?__6?07
50_3707__6 / 52?8375?74?56
615___8255 / 62?526?983?2?1?
__652618__ / 8365261__0
149___933_ / 1_9677?92?31
___7?281562 / 3438?28154?2
5?7?7?___8?3?7?4 / 57_855837_
605_272481 / 605427__81
86?569__731 / 88560?0?7721
1__91654?15 / 17?9?9165715
800NWABODE / 80069ABI?DE
8___9017_0 / 8_2494?12?9_
_024?5?91?470 / 304?17908?7_
42510704_2 / 4_51070492
9338737_89 / 93_873PLUS
327762_401 / 327_MASH01
33093_2058 / 3309_12058
4061_33578 / 40619_3578
559_383197 / 559938_197
94_9746084 / 9459746_84
1_37655238 / 163POLKA_T
_672FRIZZY / 767237499_
8_76318872 / TIP63188_2
51_8404321 / 5178404_21
358_030314 / 358603_314
2597_85802 / 25979_5802
77141_1408 / 7714_91408
330858_457 / 330_586457
4686079_39 / 46_6079239
86457508_6 / 8_45750826
523226626_ / _23BANNANA
_ISSY_ISSY / 44__9548?79?
6?00B_YJILT / 800289KILL?
2?52803___0 / 1526?0390?61?
FI?ND___T?HE / EAS?T?EREGGS?
0_231?95_38 / 0723194?7?38
0?647_39236 / 0646?6?3__36
025?267798_ / 06?6265?9?984
0061_33578 / _0619_3578
ฉันแค่รับประกันว่าทุกกรณีขอบที่เป็นไปได้ครอบคลุม (11 รายการแรก) แต่นอกเหนือจากนั้นมันสุ่มค่อนข้างมาก
ปรับปรุง
สี่รายการที่ด้านล่างเพิ่มด้วยศูนย์นำหน้า (ตามคำแนะนำของ Jonathan Allan)
เอาต์พุตที่ถูกต้องสำหรับอินพุตตัวอย่าง:
ขึ้นอยู่กับเอาต์พุตจากรายการของJonathan Allan (เอาต์พุตที่จัดรูปแบบเหมาะสมที่สุด)
" / "
หรือเราสามารถใช้เป็นอินพุตมาตรฐานสองรายการได้หรือไม่