Hapus salam

11

Tantangan

Hai, diberi string sebagai input, hapus salam yang ditemukan di awal string.

Program yang melakukan pergantian paling benar di bawah 50 byte menang.

Salam

Hai, salam didefinisikan sebagai salah satu dari kata-kata berikut:

  • Hai
  • Hei
  • Halo
  • terhormat
  • Salam pembuka
  • hai
  • teman-teman
  • Hai Aku
  • Howdy
  • hai
  • jerami
  • heya
  • Halo
  • hihi
  • salam

Huruf pertama dapat ditulis dengan huruf besar.

Akan selalu ada koma dan / atau ruang tunggal setelah salam yang juga harus dihapus. Koma dan spasi mungkin dalam urutan apa pun ( ,<space>atau <space>,) dan keduanya harus dihilangkan.

Salam dan kata berikut hanya akan dipisahkan oleh koma dan / atau spasi tunggal.

Anda kemudian harus menggunakan huruf besar dari kata pertama yang akan mengikuti salam. Sekalipun tidak ada penggantian yang terjadi, Anda masih harus menggunakan huruf besar kata pertama dari output.

Kapitalisasi hanya berlaku untuk karakter abjad huruf kecil ( abcdefghijklmnopqrstuvwxyz). Anda harus meninggalkan karakter lain apa pun.

Salam akan selalu di awal string. Anda seharusnya tidak mengganti salam yang tidak di awal.

Mungkin tidak selalu ada salam.

Kode Anda harus di bawah 50 byte.

Contohnya

Input > Output

Salutations, what's going on? > What's going on?
hello i have quetions how does juice an avocado > I have quetions how does juice an avocado
How d'you do > How d'you do
Hey,You! > You!
hola cows eat hay > Cows eat hay
hey Hi there! > Hi there!
hihi ,guys > Guys

Uji baterai

Hola, ada total 1.000 input berbeda:

Perintah Bash untuk mengambil kedua hal di atas adalah

wget https://raw.githubusercontent.com/beta-decay/Remove-Substitutions-Battery/master/{inputs,replaced}.txt

Kemenangan

Howdy, program dengan substitusi paling benar dari 1000 input di atas menang.

Anda harus meletakkan persentase input yang ditangani oleh program Anda dengan benar di header Anda seperti:

# Language Name, percentage%

Saya tidak sepenuhnya yakin mengapa Jeff membuat ini menjadi suatu hal, tetapi itu membuat tantangan yang bagus.

Peluruhan Beta
sumber
3
s=>System.Text.RegularExpressions.Regex.Replace();50 byte bahkan sebelum pola ditentukan, itu C # keluar lalu. (Dengan pendekatan regex tentunya)
TheLethalCoder
1
Python juga keluar (dengan regex) :(
Gábor Fekete
Anda selalu dapat mengembalikan input yang diberikan untuk skor 31,3%.
Ian Miller
Mendesak untuk mengedit salam di awal tantangan yang meningkat. ;)
Draco18 tidak lagi mempercayai SE
2
Anekdot asyik : Saya awalnya memulai posting pertama saya di PPCG dengan "Halo, dunia! :)" tetapi perhatikan segera setelah saya mempostingnya bahwa SE menghapus keseluruhan baris itu kecuali ":)". Saya tentu saja malu bahwa saya telah melakukan sesuatu yang salah dan segera menghapus smiley juga. Tidak ada jejak yang tersisa dalam sejarah revisi, dan sampai hari ini Anda dan saya adalah satu-satunya yang mengetahuinya ...
ETHproduksi

Jawaban:

8

GNU sed, 78% 100%

/^\w*[wd]\b/!s/^[dghs][eruaio]\w*\W\+//i
s/./\U&/

(49 byte)

Baterai tes sangat terbatas: kita dapat menghitung kata-kata mana yang muncul lebih dulu pada setiap baris:

$ sed -e 's/[ ,].*//' inputs.txt | sort | uniq -ic
 40 aight
 33 alright
 33 dear
 33 g'd
 41 good
 36 greetings
 35 guys
 31 hai
 33 hay
 27 hello
 33 hey
 37 heya
 43 hi
 34 hihi
 29 hii
 35 hiya
 45 hola
 79 how
 37 howdy
 33 kowabunga
 39 salutations
 32 speak
 34 sweet
 40 talk
 36 wassup
 34 what's
 38 yo

Salam untuk dihapus mulai dengan d, g, hatau s(atau huruf besar versi daripadanya); non-salam yang dimulai dengan surat-surat itu adalah

 33 g'd
 41 good
 79 how
 32 speak
 34 sweet

Mengabaikan garis di mana mereka muncul sendirian, itu 220 false-positive. Jadi mari kita hapus saja kata-kata awal yang dimulai dengan salah satu dari keempat huruf itu.

Ketika kita melihat kata awal dimulai dengan salah satu dari mereka ( / ^[dghs]\w*), case-insensitive ( /i), dan diikuti oleh setidaknya satu karakter non-kata ( \W\+), kemudian ganti dengan string kosong. Kemudian, ganti karakter pertama dengan huruf besar yang setara ( s/./\U&/).

Itu memberi kita

s/^[dghs]\w*\W\+//i
s/./\U&/

Kami sekarang dapat sedikit memperbaiki ini:

  • Set false-positif terbesar adalah how, jadi kami membuat substitusi bersyarat dengan awalan dengan tes negatif:

     /^[Hh]ow\b/!
  • Kami juga dapat memfilter pada huruf kedua, untuk menghilangkan g'd, speakdan sweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • Yang tersisa hanya goodsebagai false positive. Kami dapat menyesuaikan tes awalan untuk menghilangkan kata-kata yang berakhir dengan salah satu watau d:

    /^\w*[wd]\b/!

Demonstrasi

$ diff -u <(./123478.sed inputs.txt) replaced.txt | grep ^- | wc -l
0
Toby Speight
sumber
9

Retina , 68% 72,8% (lama) 74,8% 77,5% (baterai uji baru)

i`^h(a[iy]|eya?|i(h?i|ya|)|ello)[ ,]+

T`l`L`^.

Cobalah online! Sunting: Memperoleh cakupan 4,8% (lama) 2,7% (baru) dengan bantuan dari tips @ MartinEnder.

Neil
sumber
1
Saya pikir Anda bisa lakukan [ ,]+ untuk memeras beberapa byte lagi. Anda juga dapat mengekstrak hdari pergantian.
Martin Ender
tidak yakin tetapi i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+mungkin berfungsi berarti Anda memiliki 8 byte untuk cadangan
ASCII-hanya
@ ASCII-hanya h?i?menghemat tidak ada h?i|dan akan cocok hih(meskipun saya tidak tahu apakah itu bahkan dalam kasus uji).
Martin Ender
Sebenarnya, itu menghemat byte jika Anda melakukannya ih?i?|iya.
Martin Ender
Mungkin i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+saat itu
hanya ASCII
6

PHP, 60,6%

50 Bytes

<?=ucfirst(preg_replace("#^[dh]\w+.#i","",$argn));

Cobalah online!

PHP, 59,4%

49 Bytes

<?=ucfirst(preg_replace("#^h\w+,? #i","",$argn));

Cobalah online!

PHP, 58,4%

50 Bytes

<?=ucfirst(preg_replace("#^[gh]\w+.#i","",$argn));

Cobalah online!

Jörg Hülsermann
sumber
1
60,1%:#^[gh]\w+.#
manatwork
Hei, saya sudah berubah menjadi baterai uji baru, dapatkah Anda memperbarui jawaban Anda dengan skor baru Anda? Terima kasih
Beta Decay
@BetaDecay diperbarui
Jörg Hülsermann
4

Vim, 55,4% 44,4%

df,<<vgU

Penjelasan:

df,    Delete until and including the first comma
<<     Remove leading spaces
vgU    Uppercase first letter
BlackCap
sumber
Hei, saya sudah berubah menjadi baterai uji baru, dapatkah Anda memperbarui jawaban Anda dengan skor baru Anda? Terima kasih
Beta Decay