Anda tahu bagaimana Anda mendapatkan pesan suara dan koneksi orang itu tidak bagus, dan Anda mencoba mencari cara untuk memanggil mereka kembali, tetapi Anda tidak yakin apakah itu "5" atau "8" yang mereka kata?
Itulah tantangan ini.
Berita baiknya adalah bahwa penelepon membacakan nomor mereka dua kali, tetapi rusak di kedua tempat.
Program Anda harus mengambil input seperti ini:
5551231234 / 5551231234
Di mana sepuluh digit pertama adalah pertama kalinya nomor telepon dikatakan dalam pesan suara dan set kedua adalah yang kedua kali dikatakan. Hanya ... itu akan terlihat lebih seperti ini:
555?ABC1_36? / 55?522_1?234
- Angka yang diikuti oleh tanda tanya berarti bahwa itu adalah tebakan terbaik untuk digit itu (mis. "5?" Berarti "mungkin angka 5, bandingkan dengan yang diulang").
- Garis bawah menunjukkan angka yang hilang yang diketahui, sesuatu yang terlalu kabur oleh statis untuk diuraikan sama sekali.
- Surat hanya itu: surat. Perlakukan mereka sebagai digit masing-masing
- ABC -> 2, DEF -> 3, GHI -> 4, JKL -> 5, MNO -> 6, PQRS -> 7, TUV -> 8, WXYZ -> 9
- Semua input sampel menggunakan huruf besar (Anda dapat dengan aman menghilangkan panggilan ToUpper ())
- Jika bahasa Anda berfungsi lebih baik dalam huruf kecil, Anda dapat dengan bebas menggunakan huruf kecil untuk input dan menghilangkan panggilan ToLower (). Catat itu dalam jawaban Anda.
Anda juga dapat menerima panggilan penilaian berikut:
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
Selain itu Anda dapat mengasumsikan bahwa semua input akan berisi nomor telepon sepuluh digit, tidak termasuk tanda tanya. Input yang bukan sepuluh digit (mis. 1234567 / 1234567
) Dapat diperlakukan sebagai tidak dapat diselesaikan (output falsey) atau menimbulkan kesalahan.
Memasukkan
Satu baris karakter 0-9A-Z _?/
, seperti dijelaskan di atas.
Keluaran
Jika dapat diuraikan menjadi satu nomor telepon sepuluh digit yang valid, keluarkan nomor telepon itu. Kalau tidak, output beberapa bentuk indikasi kesalahan (misalnya -1, false, atau baris kosong).
Kemenangan terpendek, seperti biasa.
Input sampel:
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
Saya hanya mengasuransikan bahwa setiap kemungkinan edge-case tertutup (11 entri pertama), tetapi selain itu, ini cukup acak.
Memperbarui
Empat entri di bagian bawah ditambahkan dengan angka nol di depan (atas saran Jonathan Allan).
Output yang benar untuk input sampel:
Berdasarkan output dari entri Jonathan Allan (output yang diformat adalah ideal).
" / "
, atau dapatkah kita menganggapnya sebagai dua input standar?