Terinspirasi oleh pertanyaan StackOverflow sederhana ini .
Idenya sederhana; diberi sebuah String dan sebuah array dari Strings, hapus setiap instance kata dalam array (abaikan case) dari String input selain yang pertama, bersama dengan spasi kosong apa pun yang tersisa. Kata-kata harus cocok dengan seluruh kata dalam String input, dan bukan bagian dari kata-kata.
misalnya "A cat called matt sat on a mat and wore a hat A cat called matt sat on a mat and wore a hat", ["cat", "mat"]
harus output"A cat called matt sat on a mat and wore a hat A called matt sat on a and wore a hat"
Memasukkan
- Input dapat diambil sebagai String, dan array dari Strings atau array dari Strings di mana String input adalah elemen pertama. Parameter ini bisa dalam urutan apa pun.
- String input tidak dapat diambil sebagai daftar String yang dibatasi ruang.
- String input tidak akan memiliki spasi memimpin, tertinggal atau berurutan.
- Semua input hanya akan berisi karakter [A-Za-z0-9] dengan pengecualian dari String input juga termasuk spasi.
- Array input mungkin kosong atau mengandung kata-kata yang tidak ada dalam String input.
Keluaran
- Output dapat berupa nilai balik dari suatu fungsi, atau dicetak ke STDOUT
- Output harus dalam kasus yang sama dengan String asli
Uji kasus
the blue frog lived in a blue house, [blue] -> the blue frog lived in a house
he liked to read but was filled with dread wherever he would tread while he read, [read] -> he liked to read but was filled with dread wherever he would tread while he
this sentence has no matches, [ten, cheese] -> this sentence has no matches
this one will also stay intact, [] -> this one will also stay intact
All the faith he had had had had no effect on the outcome of his life, [had] -> All the faith he had no effect on the outcome of his life
5 times 5 is 25, [5, 6] -> 5 times is 25
Case for different case, [case] -> Case for different
the letters in the array are in a different case, [In] -> the letters in the array are a different case
This is a test Will this be correct Both will be removed, [this,will] -> This is a test Will be correct Both be removed
Karena ini adalah kode golf, jumlah byte terendah menang!
This is a test Will this be correct Both will be removed
+this will
. Dua kata kedua dihapus dengan benar, tetapi juga menghapusbe
setelah kata keduawill
karena beberapa alasan.@B=<>;$_=join$",grep!(/^$_$/xi~~@B&&$v{+lc}++),@F
lc
dipanggil tanpa orangtua. Luar biasa! Dan menggunakan regex terhadap array jauh lebih baik, Terima kasih! Saya kesulitan mengingat semua tips Anda!Pyth, 27 byte
Cobalah online
Penjelasan
Saya yakin 10 byte untuk pemeriksaan case sensitive dapat dikurangi, tapi saya tidak mengerti caranya.
sumber
Stax , 21 byte CP437
25 byte saat dibongkar,
Hasilnya adalah sebuah array. Output yang nyaman untuk Stax adalah satu elemen per baris.
Jalankan dan debug online!
Penjelasan
sumber
Perl 6 , 49 byte
Menguji
Diperluas:
sumber
Perl 5 ,
5048 byteTermasuk
+1
untuk-p
Berikan string target diikuti oleh setiap kata filter pada baris terpisah di STDIN:
Itu
chop
hanya diperlukan untuk memperbaiki ruang tambahan dalam kasus kata terakhir akan dihapusHanya kode:
Cobalah online!
sumber
JavaScript (ES6), 98 byte
sumber
K4 , 41 byte
Larutan:
Contoh:
Penjelasan:
Berpisah di ruang putih, huruf kecil kedua input, cari yang cocok, hapus semua kecuali kejadian pertama, gabungkan string kembali bersama.
sumber
JavaScript (Node.js) , 75 byte
Cobalah online!
sumber
f=
dalam jumlah byte Anda. Anda juga dapat menyimpan byte dengan mencari parameter, mengganti(s,a)=>
dengans=>a=>
dan memanggil fungsif(s)(a)
.JavaScript ES6, 78 Bytes
Bagaimana itu bekerja:
sumber
f
untuk panggilan rekursif, fungsi yang tidak disebutkan namanya juga akan menjadi pengiriman yang valid, sehingga Anda dapat menyimpan dua byte dengan menjatuhkanf=
.PowerShell v3 atau lebih baru, 104 byte
Dengan biaya satu byte, itu dapat berjalan di PS 2.0 dengan mengganti
$Matches.0
dengan$Matches[0]
.Versi panjang:
Gunakan
Simpan sebagai Apapun.ps1 dan panggil dengan string dan kata-kata sebagai argumen. Jika lebih dari satu kata harus dilewatkan, kata-kata tersebut harus dibungkus @ ():
Alternatif tanpa file (dapat disisipkan langsung ke konsol PS):
Simpan skrip sebagai ScriptBlock (di dalam kurung kurawal) dalam variabel, lalu panggil metode Invoke (), atau gunakan dengan Invoke-Command:
sumber
Javascript, 150 byte
sumber
Bersih ,
153142138134 byteCobalah online!
Menentukan fungsi
$ :: String [String] -> String
, cukup banyak melakukan apa yang digambarkan tantangan. Ia menemukan dan menghapus setiap kemunculan setelah yang pertama, untuk setiap kata target.sumber
Retina,
4637 byte-14 byte terima kasih kepada @Neil , dan +5 byte untuk perbaikan bug.
Input dalam format
word1,word2,word3,sentence
, karena saya tidak yakin bagaimana cara input multi-line (di mana input digunakan secara berbeda) ..Penjelasan:
Cobalah online.
sumber
+i`((.+),.*\2.* )\2( |$)
dan yang kedua$1
tetapi saya perhatikan bahwa kode Anda gagaloften,he intended to keep ten geese
.\b
alih-alih(^|,)
, tapi kabar buruknya adalah saya pikir Anda perlu\b\3\b
(belum menemukan test case yang cocok).Merah , 98 byte
Cobalah online!
sumber
Sekam , 13 byte
Mengambil daftar string dan string tunggal sebagai argumen, dalam urutan ini. Mengasumsikan bahwa daftar tersebut bebas duplikat. Cobalah online!
Penjelasan
sumber
Min , 125 byte
Input
quot
pada stack dengan String input sebagai elemen pertama, dan aquot
dari string duplikat sebagai elemen kedua, yaitusumber
Python 3 , 168 byte
Cobalah online!
sumber
AWK , 120 byte
Cobalah online!
Bagian "hapus spasi" membuat ini sedikit lebih menantang daripada yang saya pikirkan. Mengatur bidang ke
""
, menghapus bidang, tetapi meninggalkan pemisah tambahan.TIO Link memiliki 28 byte tambahan untuk memungkinkan banyak entri.
Input diberikan lebih dari 2 baris. Baris pertama adalah daftar kata-kata dan yang kedua adalah "kalimat". Perhatikan bahwa "kata" dan "kata," tidak dianggap sama dengan tanda baca terlampir. Memiliki persyaratan tanda baca kemungkinan akan menjadikan masalah ini lebih menyenangkan .
sumber
Ruby ,
63 61 6059 byteCobalah online!
Versi lebih pendek yang peka dan gagal ~ setiap 10 15 kali karena keacakan (37 byte)
sumber
Python 2 , 140 byte
Cobalah online!
Penjelasan:
re.sub(..)
dapat mengambil sebagai argumen fungsi alih-alih string pengganti. Jadi di sini kita punya beberapa lambda mewah. Fungsi dipanggil untuk setiap kemunculan pola dan satu objek diteruskan ke fungsi ini - matchobject. Objek ini memiliki informasi tentang kejadian yang ditemukan. Saya tertarik pada indeks kejadian ini, yang dapat diambil olehstart()
atauend()
fungsinya. Yang terakhir lebih pendek sehingga digunakan.Untuk mengecualikan penggantian kemunculan kata pertama, saya menggunakan fungsi pencarian regex lain untuk mendapatkan yang tepat dan membandingkan indeks, menggunakan yang sama
end()
Bendera
re.I
adalah versi pendek darire.IGNORECASES
sumber