Dalam tantangan ini, Anda akan menghapus kata-kata rangkap dari setiap kalimat .
Contohnya
Hello Hello, World!
Hello, World!
Code Code! Golf Code
Code! Golf Code
Hello hello World
Hello World
Programming Golf Programming!
Programming Golf!
Spesifikasi
- Input akan berupa string karakter ASCII.
- Sebuah kalimat didefinisikan sebagai apa saja hingga akhir string, sebuah linefeed (
\n
), atau tanda baca (.!?
). - Sebuah kata didefinisikan sebagai urutan
A-Za-z
. - Kata-kata tidak peka huruf besar-kecil (
Hello
==heLlO
).
- Hanya kemunculan pertama kata dalam kalimat yang disimpan.
- Jika sebuah kata dihapus, spasi sebelum kata yang dihapus harus dihapus. (misalnya
A A B
->A B
).
- Seperti biasa, celah standar tidak diizinkan.
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
a b a.
pergi ke apa?a b.
karena `a` dihapus.a__b_b_a
, apakah Anda mendapatkana_b_a
(b
dihapus pertama ) ataua__b_a
(b
dihapus kedua )?a__b__
karena yang diulangb
dihapus dan yang diulanga
dihapusJawaban:
Vim, 27 byte
Perhatikan bahwa 27 byte termasuk carriage return di akhir.
Cobalah online! Catatan: Ini adalah tautan ke bahasa lain yang saya tulis disebut "V". V sebagian besar kompatibel dengan vim, jadi untuk semua maksud dan tujuan, ia dapat dihitung sebagai penerjemah vim. Saya juga menambahkan satu byte
%
sehingga Anda dapat memverifikasi semua kasus uji sekaligus.Penjelasan:
sumber
JavaScript (ES6), 98
Catatan sementara saya menemukannya sendiri, sangat mirip dengan @ Neil, hanya dengan logika tambahan untuk membagi seluruh string input menjadi kalimat.
Uji
sumber
Retina ,
6646 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Penjelasan
Karena hanya huruf yang harus dianggap sebagai karakter kata (tetapi regex juga memperlakukan digit dan garis bawah sebagai karakter kata), kita perlu membuat batasan kata sendiri. Karena input dijamin hanya berisi karakter ASCII, saya memasukkan
·
(di luar ASCII, tetapi di dalam ISO 8859-1) di sekitar semua kata dan menghapusnya lagi dengan duplikat. Itu menghemat 20 byte daripada menggunakan lookarounds untuk menerapkan batas kata umum.Ini cocok dengan setiap kata dan mengelilinginya
·
.Ini adalah dua langkah yang dikompresi menjadi satu.
<sp>*(·[a-z]+·)(?<=\1[^.!?¶]+)
cocok dengan kata lengkap (dipastikan dengan memasukkan·
dalam pertandingan), bersama dengan spasi apa pun sebelumnya, asalkan (seperti yang dijamin oleh tampilan di belakang) kita dapat menemukan kata yang sama di suatu tempat sebelumnya dalam kalimat. (Yang¶
cocok dengan linefeed.)Bagian lainnya hanyalah
·
, yang cocok dengan semua batas kata artifisial yang tidak cocok sebagai bagian dari paruh pertama. Dalam kedua kasus, kecocokan hanya dihapus dari string.sumber
C, 326 byte
Siapa yang butuh ekspresi reguler?
sumber
Perl 6 , 104 byte
Pemakaian:
Penjelasan
sumber
Perl 5, 57 byte
56 byte kode +1 untuk
-p
Pemakaian:
Mungkin perlu +1, saat ini saya mengasumsikan bahwa hanya akan ada spasi di input, tidak ada tab.
sumber
\s
sebagai gantinya ... Masih jauh dari jawaban retina Anda sekalipun!