Selamları Kaldır


11

Meydan okuma

Merhaba, girdi olarak bir dize verildiğinde, dizenin başında bulunan tüm selamlamaları kaldırın .

50 baytın altında en doğru ikameleri yapan program kazanır.

Selamlar

Hey, selamlama aşağıdaki kelimelerden biri olarak tanımlanır:

  • Selam
  • Hey
  • Merhaba
  • Sayın
  • selamlar
  • hai
  • adamlar
  • Merhaba ben
  • Hem de nasıl
  • hiya
  • saman
  • heya
  • hola
  • hihi
  • saygılarımla

İlk harf büyük yazılabilir.

Selamlamanın ardından her zaman kaldırılması gereken bir virgül ve / veya tek bir boşluk olacaktır. Virgül ve boşluk herhangi bir sırada ( ,<space>veya <space>,) olabilir ve her ikisi de kaldırılmalıdır.

Selamlama ve sonraki sözcük yalnızca virgül ve / veya tek boşlukla ayrılır.

Daha sonra selamlamayı izleyen sözcüğün ilk harfini büyük yazmalısınız. Hiçbir değişiklik yapılmasa bile, çıktının ilk kelimesini büyük harfle yazmalısınız.

Büyük / küçük harf kullanımı yalnızca küçük harfli alfabetik karakterler ( abcdefghijklmnopqrstuvwxyz) için geçerlidir . Başka herhangi bir karakteri olduğu gibi bırakmalısınız.

Selamlama her zaman ipin başında olacaktır. Başlangıçta olmayan bir selamlamayı değiştirmemelisiniz .

Her zaman bir selamlama olmayabilir.

Kodunuz 50 baytın altında olmalıdır.

Örnekler

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

Aküyü test et

Hola, toplamda 1000 farklı girdi var:

Yukarıdakilerin her ikisini de almak için bir Bash komutu

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

Kazanan

Howdy, yukarıdaki 1000 girişten en doğru yedek oyuncuya sahip olan program kazanıyor.

Programınızın işlediği girdilerin yüzdesini başlığınıza şu şekilde doğru şekilde koymalısınız:

# Language Name, percentage%

Jeff'in bunu neden bir şey yaptığından tam olarak emin değilim, ama yine de güzel bir meydan okuma.


3
s=>System.Text.RegularExpressions.Regex.Replace();Bir desen belirtilmeden önce 50 bayt, o zaman C # çıkışı. (Elbette normal ifade yaklaşımı ile)
TheLethalCoder

1
Python da çıktı (regex ile) :(
Gábor Fekete

Verilen girdiyi her zaman% 31,3 puan için geri verebilirsiniz.
Ian Miller

Yükselen mücadelenin başlangıcında selamlamayı düzenleme çağrısı. ;)
Draco18s artık SE

2
Eğlenceli fıkra: İlk olarak "Merhaba, dünya! :)" ile PPCG'deki ilk yazıma başladım , ancak SE'nin ":)" dışında bu satırın tamamını kaldırdığını fark ettim. Tabii ki yanlış bir şey yaptığımı ve hemen suratı da çıkardığım için ipotek aldım. Düzeltme tarihinde bir iz bırakılmadı ve bugüne kadar bunu bilen tek kişi
siziz

Yanıtlar:


8

GNU sed, % 78% 100

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

(49 bayt)

Test pili oldukça sınırlıdır: her satırda hangi kelimelerin ilk göründüğünü sayabiliriz:

$ 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

Kaldırılacak selamlamak ile başlar d, g, hya da s(ya da versiyonları büyük); bu harflerle başlayan selamlama olmayanlar

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

Çizgileri yalnız göründükleri yerde görmezden gelmek, 220 yanlış pozitiftir. Şimdi bu dört harften herhangi biriyle başlayan ilk kelimeleri kaldıralım.

Bu ( / ^[dghs]\w*), büyük / küçük harf duyarsız ( /i) ile başlayan ve ardından en az bir kelime olmayan karakter ( \W\+) ile başlayan bir başlangıç ​​kelimesi gördüğümüzde boş bir dize ile değiştirin. Ardından, ilk karakteri büyük harf eşdeğeriyle ( s/./\U&/) değiştirin.

Bu bize

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

Şimdi bunu biraz geliştirebiliriz:

  • En büyük yanlış pozitif seti how, bu nedenle, bir negatif testle ön ek uygulayarak ikameyi koşullu hale getiririz:

     /^[Hh]ow\b/!
  • Ayrıca, ikinci harfi üzerinde filtre ortadan kaldırmak için g'd, speakve sweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • Bu sadece goodyanlış bir pozitif olarak kalır. Ön ek testini, wveya ile biten kelimeleri ortadan kaldırmak için ayarlayabiliriz d:

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

gösteri

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

9

Retina , 68% 72.8% (eski) 74.8% 77.5% (yeni test pili)

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

T`l`L`^.

Çevrimiçi deneyin! Düzenleme: @ MartinEnder'in ipuçlarından yararlanarak% 4,8 (eski)% 2,7 (yeni) kapsama alanı kazandı.


1
Sanırım [ ,]+ birkaç bayt daha sıkıştırmak için yapabilirsin . Ayrıca dönüşümden ayıklayabilirsiniz h.
Martin Ender

emin değilim ama i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+yedek 8 bayt var anlamına gelebilir
ASCII-sadece

@ ASCII sadece h?i?hiçbir şey kaydetmez h?i|ve eşleşir hih(test testlerinde bile olup olmadığını bilmememe rağmen).
Martin Ender

Aslında yaparsanız bir bayt tasarrufu sağlar ih?i?|iya.
Martin Ender

Belki i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+o zaman
ASCII-sadece

6

PHP,% 60.6

50 Bayt

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

Çevrimiçi deneyin!

PHP,% 59.4

49 Bayt

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

Çevrimiçi deneyin!

PHP,% 58.4

50 Bayt

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

Çevrimiçi deneyin!


1
60.1%:#^[gh]\w+.#
manatwork

Hey, yeni bir test pilini değiştirdim, cevabınızı yeni puanınızla güncelleyebilir misiniz? Teşekkürler
Beta Çürümesi

@BetaDecay güncellendi
Jörg Hülsermann

4

Vim, % 55.4% 44.4

df,<<vgU

Açıklama:

df,    Delete until and including the first comma
<<     Remove leading spaces
vgU    Uppercase first letter

Hey, yeni bir test pilini değiştirdim, cevabınızı yeni puanınızla güncelleyebilir misiniz? Teşekkürler
Beta Çürümesi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.