Gagap adalah masalah yang banyak dari kita mungkin pernah mengalami atau setidaknya melihatnya. Meskipun sebagian besar perangkat lunak pengenalan suara yang terkenal memiliki masalah serius dengan gagap berbicara, mari kita bayangkan sebuah perangkat lunak yang mengerti gagap, tetapi tidak dapat memperbaikinya dan hanya menulis apa adanya.
Contoh teks tertulis oleh perangkat lunak seperti itu bisa seperti ini: "harap berhati-hati" . Dalam contoh ini "hati-hati" adalah kata aslinya dan "ca ca" adalah kata-kata yang gagap.
Tantangan
Tulis program atau fungsi yang memperbaiki kata-kata yang tergagap dengan menghapusnya dari input sambil mempertahankan kata-kata aslinya. Misalnya versi tetap dari "harap berhati-hati" akan "harap berhati-hati" .
Ini adalah kode-golf , jawaban terpendek dalam setiap bahasa menang!
Apa kata yang tergagap?
Gagap memiliki banyak variasi berbeda. Tetapi untuk menyederhanakan tantangan ini, kami akan membatasinya pada aturan berikut:
- Kata-kata yang tergagap bisa menjadi bagian yang tidak lengkap atau keseluruhan dari kata aslinya. Dengan "bagian yang belum selesai" yang saya maksudkan adalah bahwa kata aslinya harus dimulai tepat dengan kata yang gagap. Misalnya "ope" dan "terbuka" keduanya bisa menjadi kata yang gagap untuk "terbuka" , tetapi "pena" tidak dapat menjadi satu karena "terbuka" tidak dimulai dengan "pena" .
- Kata-kata yang gagap harus mengandung setidaknya satu dari vokal "aeiou" . Misalnya "bintang" bisa menjadi kata yang gagap untuk "mulai" karena mengandung "a" , tetapi "st" tidak bisa menjadi kata yang gagap karena tidak mengandung salah satu vokal yang disebutkan.
- Kata-kata yang tergagap hanya dapat muncul sebelum kata aslinya dan harus diulang setidaknya dua kali agar valid (kata aslinya tidak dihitung dalam pengulangan). Misalnya "oo open" memiliki kata-kata yang gagap tetapi "o open o" tidak, karena "o" setelah kata aslinya tidak dihitung dan "o" sebelum kata aslinya tidak diulang setidaknya dua kali. "go go go go go" memiliki lima pengulangan kata yang gagap sebelum kata aslinya dan valid.
- Satu set kata-kata gagap yang diulang tidak dapat mengandung bentuk campuran dan kata-kata tersebut harus persis seperti satu sama lain. Misalnya "op o op open" tidak dihitung sebagai kata yang gagap. Di sisi lain "o op op open" memiliki kata-kata yang gagap karena "o" yang pertama dilihat sebagai kata yang sama sekali berbeda di sini dan dua "op" dihitung sebagai kata-kata "open" yang tergagap .
- Seandainya beberapa set kata-kata gagap yang diulang berulang setelah satu sama lain, hanya kata asli terakhir yang tetap. Misalnya, dalam "ooo op op op open" , bagian "oo o" dipandang sebagai kata-kata yang tergagap pada "op" pertama , sehingga kata-kata itu harus dihapus dan kemudian "op op op" dilihat sebagai kata-kata yang tergagap-gagap dari "buka". " dan mereka harus dihapus juga, jadi hanya " terbuka "yang akan ditinggalkan setelah penghapusan kata-kata yang gagap. Anda dapat berasumsi bahwa beberapa set kata-kata yang gagap diulang hanya berlaku dari kiri ke kanan, jadi memperbaiki "op op ooo open" akan menghasilkan "op op open" (alias
Memasukkan
- Input adalah string baris tunggal yang hanya mengandung huruf Inggris ASCII (az), digit (0-9) dan karakter spasi. Casing huruf tidak penting dan Anda dapat memutuskan untuk menerima huruf kecil atau besar atau keduanya, tetapi casing harus tetap sama dan Anda tidak dapat mengubahnya di output.
- Anda dapat menggunakan daftar huruf (seperti
["l","i","s","t"," ","o","f"," ","l","e","t","t","e","r","s"]
) daripada string, tetapi Anda tidak dapat menggunakan daftar kata. Jika bahasa Anda memiliki struktur input yang berbeda, gunakan itu. Intinya adalah bahwa input tidak boleh dipisahkan oleh kata-kata, jadi biaya memisahkan kata dalam beberapa bahasa sebenarnya dapat memicu solusi kreatif lainnya. - Input mungkin tidak mengandung, satu atau beberapa kata yang tergagap di dalamnya.
- Kata dan atau angka dipisahkan oleh satu ruang dan input tidak akan berisi ruang ganda tepat di sebelah satu sama lain.
Keluaran
- String atau daftar huruf atau struktur yang sesuai dalam bahasa Anda dengan semua kata yang tergagap dihapus dari input.
- Kata-kata keluaran harus dipisahkan dengan tepat satu spasi (sama dengan input).
- Baris atau spasi baru yang mengarah dan tertinggal tunggal diperbolehkan.
Celah standar dilarang.
Uji kasus
Tidak ada kata yang tergagap:
"hello world" => "hello world"
Satu contoh kata yang gagap diulang:
"ope ope ope ope open the window" => "open the window"
Beberapa contoh kata yang gagap diulang:
"there is is is is something un un under the the the table" => "there is something under the table"
Tidak ada kata yang gagap, tidak cukup diulang:
"give me the the book" => "give me the the book"
Tidak ada kata yang tergagap, tidak memiliki vokal yang disebutkan:
"h h help m m m me" => "h h help m m m me"
Angka bukanlah kata yang gagap, mereka tidak memiliki vokal yang disebutkan:
"my nu nu number is 9 9 9 9876" => "my number is 9 9 9 9876"
Tetapi sebuah kata dengan kedua vokal dan angka dapat memiliki kata-kata tergagap:
"my wi wi windows10 is slow" => "my windows10 is slow"
Berbagai bentuk kata tergagap dalam kelompok yang sama tidak dihitung:
"this is an ant antarctica does not have" => "this is an ant antarctica does not have"
Untuk beberapa set kata yang tersumbat secara terus-menerus tepat satu sama lain, simpan saja kata asli terakhir:
"what a be be be beauti beauti beautiful flower" => "what a beautiful flower"
Ini bukan kasus beberapa set kata-kata tergagap terus menerus satu sama lain:
"drink wat wat wa wa water" => "drink wat wat water"
Masukan kosong:
"" => ""
Lebih banyak kasus dari komentar:
"a ab abc" => "a ab abc"
"a ab ab abc" => "a abc"
"ab ab abc abcd" => "abc abcd"
"a a ab a able" => "ab a able"
"i have ave ave average" => "i have average"
"my wi wi windows 10 is cra cra crap" => "my windows 10 is crap"
Mudah untuk menyalin daftar kasus uji di atas:
"hello world",
"ope ope ope ope open the window",
"there is is is is something un un under the the the table",
"give me the the book",
"h h help m m m me",
"my nu nu number is 9 9 9 9876",
"my wi wi windows10 is slow",
"this is an ant antarctica does not have",
"what a be be be beauti beauti beautiful flower",
"drink wat wat wa wa water",
"",
"a ab abc",
"a ab ab abc",
"ab ab abc abcd",
"a a ab a able",
"i have ave ave average",
"my wi wi windows 10 is cra cra crap"
"drink wat wat wa wa water" => "drink wat wat water"
sepertinya aturan itu harus diterapkan secara rekursif sehingga ini menjadi "air minum"Jawaban:
C (gcc),
183180178 byteCobalah online!
Yah, C tentu tidak bisa bersaing dengan singkatnya regex ...
Yang ini sangat sulit dibaca karena saya akhirnya menciutkan seluruh fungsi menjadi sepasang
for
loop bersarang (tanpa tubuh!). Itu membuat urutan evaluasi semua miring - kode di dekat awal benar-benar dijalankan terakhir.Trik favorit saya di sini adalah
strpbrk(u,"aeiou")-1<s
. Ini digunakan untuk memeriksa apakah kata yang diulang mengandung vokal.u
menunjuk ke awal kata yang diulang, dans
menunjuk ke pengulangan kata yang kedua; sebagai contoh:strpbrk
kemudian temukan karakter pertama"aeiou"
yang muncul setelahnyau
. (Dalam hal ini, ini adalah'u'
segera setelah itu.) Kemudian kita dapat memeriksa bahwa ini datang sebelums
untuk memverifikasi kata berisi vokal. Tapi ada sedikit masalah -strpbrk
mengembalikanNULL
(yaitu0
) jika tidak ada vokal di seluruh string. Untuk memperbaiki ini, saya cukup kurangi 1, yang berubah0
menjadi0xffffffffffffffff
(pada mesin saya) karena melimpah. Menjadi nilai maksimum dari sebuah pointer, ini jelas lebih besar daripadas
, menyebabkan cek gagal.Ini versi yang sedikit lebih tua (sebelum transformasi yang membuat aliran kontrol kacau) dengan komentar:
Terima kasih kepada @ user1475369 untuk 3 byte dan @ceilingcat untuk 2 byte.
sumber
T>1&&strpbrk
denganT>1&strpbrk
,r&&!strncmp
denganr&!strncmp
, dan&&t[-1]
dengan&t[-1]
.bcmp()
alih-alihmemcmp()
Perl 5 (-p), 34 byte
Berdasarkan jawaban yang dihapus Arnauld.
Cobalah online!
sumber
05AB1E ,
302928 byte-1 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
05AB1E, tanpa regex, jelas tidak terlihat sebagai alat terbaik untuk tugas ini. Namun, entah bagaimana itu berhasil mengalahkan Retina.
sumber
g
sebelumĀ
. Python-style truthify sudah menghasilkan0
string kosong dan string1
tidak kosong.Perl 6 , 45 byte
Cobalah online!
Sebuah jawaban regex sederhana yang menggantikan semua kecocokan gagap dengan string kosong.
sumber
Stax , 26 byte
Jalankan dan debug itu
Port langsung dari jawaban perl @ Grimy. Stax mampu mengecilkan pola regex literal, dan memiliki konstanta vokal yang mampu menyusut
[aeiou]
.sumber
Bersihkan , 184 byte
Cobalah online!
Menentukan
$ :: [Char] -> [Char]
, yang membagi string input pada spasi dan mengelompokkan elemen identik yang kemudian diciutkan oleh helperf :: [[[Char]]] -> [[Char]]
, bergabung sebelum kembali.sumber