Anda telah disewa untuk menulis beberapa kode untuk aplikasi pengambilan dikte, yang mengambil input suara dari sumber yang diucapkan, mem-parsingnya sebagai kata-kata, dan menuliskannya di layar.
Manajemen tidak benar-benar mempercayai Anda dengan semua kekuatan yang ada di proyek ini — Anda dikenal hanya duduk-duduk dan bermain golf sepanjang hari alih-alih melakukan pekerjaan Anda, sayangnya — jadi mereka hanya memberi Anda tugas yang sangat sederhana untuk dilakukan: putar Kalimat dengan Tanda baca diselingi menjadi kalimat yang diformat dengan benar, di mana 'diformat dengan benar' didefinisikan di bawah ini.
Kalimat adalah serangkaian input. A Word adalah sekelompok karakter non-spasi yang bisa menular. Tanda baca adalah kata yang karakter pertamanya adalah
^
.Sebuah huruf besar ditulis dengan huruf besar jika huruf pertama dari kata tersebut bukan huruf kecil (kata dengan huruf besar cocok dengan regex
/[^a-z].*/
).Kata pertama dari Kalimat harus ditulis dengan huruf besar.
A
^COMMA
adalah karakter koma,
dan memiliki spasi berikut tetapi tidak sebelumnya.aaa ^COMMA bbb
menjadiaaa, bbb
.A
^COLON
adalah tanda koma:
.A
^SEMICOLON
adalah tanda koma;
.A
^PERIOD
adalah tanda koma.
. Kata berikut a^PERIOD
harus ditulis dengan huruf besar .A
^BANG
adalah periode yang terlihat seperti!
.A
^DASH
adalah karakter tanda hubung-
dan memiliki spasi sebelum dan sesudahnya.A
^HYPHEN
juga karakter dasbor-
tetapi tidak memiliki spasi mengikuti atau mendahului.An
^EMDASH
adalah tanda hubung (bukan tanda hubung!) Yang dieja--
.An
^OPENQUOTE
adalah karakter kutipan"
yang memiliki ruang mendahului tetapi tidak mengikuti. Kata berikut^OPENQUOTE
harus ditulis dengan huruf besar . Jika suatu^OPENQUOTE
didahului oleh kata yang bukan tanda baca, tambahkan a^COMMA
antara kata itu dan^OPENQUOTE
. Jika a^OPENQUOTE
didahului oleh Tanda Baca yang membuat kata berikutnya menjadi kapital, ini melompati^OPENQUOTE
ke kata berikutnya.A
^CLOSEQUOTE
adalah digraf,"
yang memiliki spasi mengikuti tetapi tidak mendahului. Jika^CLOSEQUOTE
didahului oleh^COMMA
,^PERIOD
atau^BANG
, bahwa Tanda Baca menghilang dan^CLOSEQUOTE
dieja,"
,."
atau!"
masing-masing. Jika Tanda baca yang hilang menentukan huruf besar, huruf besar itu masih harus muncul pada kata berikutnya yang tersedia.Ruang awal atau akhir dalam hasil akhir penuh harus dihilangkan, dan string apa pun dari dua ruang atau lebih dalam satu baris harus diciutkan menjadi karakter spasi tunggal.
Kasus apa pun yang tidak dicakup di atas (misalnya
^COMMA ^COMMA
atau^SEMICOLON ^CLOSEQUOTE
atau^UNDEFINEDPUNCTUATION
) tidak akan terjadi pada input yang terbentuk dengan baik dan dengan demikian perilaku tidak terdefinisi.
Tim pengembangan memberi tahu Anda tentang hal-hal berikut:
Proyek ini sedang ditulis dalam bahasa [ bahasa Anda di sini] , dan harus sesingkat mungkin sehingga membutuhkan ruang sesedikit mungkin ketika itu merupakan aplikasi untuk Android / iPhone. Anda mencoba menjelaskan bahwa itu bukan cara kerja pengembangan aplikasi, tetapi mereka tidak mendengarkan. Tapi hei, kebetulan sekali! Anda adalah pegolf luar biasa dalam [bahasa Anda di sini] !
Aplikasi tidak akan memiliki izin akses web apa pun, dan tidak akan ada pustaka yang diinstal yang melakukan pemformatan ini untuk Anda. Anda mungkin dapat meyakinkan pimpinan tim untuk mengizinkan Anda perpustakaan regex jika ada untuk bahasa Anda, jika Anda merasa perlu.
Dukungan untuk kutipan bersarang yang menggunakan tanda kutip ganda / tunggal dengan benar direncanakan untuk versi aplikasi yang lebih baru, tetapi bukan versi yang sedang Anda kerjakan sekarang, jadi jangan khawatir.
Manajemen adalah penggemar berat pengembangan yang digerakkan oleh pengujian, dan tim pengembang telah membuat beberapa keyboard monyet yang malang menulis beberapa tes untuk bagian program Anda: (baris baru ditambahkan agar mudah dibaca, perlakukan sebagai ruang)
Memasukkan:
hello ^COMMA world ^BANG
Keluaran:
Hello, world!
Memasukkan:
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
Keluaran:
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
Memasukkan:
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
Keluaran:
Begin a. B, c: d; e! F-g - h--i, "j. "K; "l," m!" N. 0x6C6F6C end
Ini adalah kode golf: skor terendah menang. Anda dapat menulis fungsi dari satu argumen string, atau program membaca dari STDIN dan menulis ke STDOUT.
prompt()
?