Usuń pozdrowienia


11

Wyzwanie

Cześć, biorąc pod uwagę ciąg jako dane wejściowe, usuń wszelkie pozdrowienia znalezione na początku ciągu.

Wygrywa program, który wykonuje najbardziej poprawne podstawienia w mniej niż 50 bajtach.

Pozdrowienia

Hej, pozdrowienie jest zdefiniowane jako jedno z następujących słów:

  • cześć
  • Hej
  • dzień dobry
  • drogi
  • Pozdrowienia
  • hai
  • chłopaki
  • hii
  • cześć
  • cześć
  • siano
  • heya
  • hola
  • cześć cześć
  • pozdrowienia

Pierwsza litera może być pisana wielkimi literami.

Po powitaniu zawsze będzie przecinek i / lub jedna spacja, którą również należy usunąć. Przecinek i spacja mogą być w dowolnej kolejności ( ,<space>lub <space>,) i oba należy usunąć.

Powitanie i następujące słowo będą zawsze oddzielone przecinkiem i / lub pojedynczą spacją.

Następnie musisz wpisać wielką literę pierwszej litery słowa, która byłaby zgodna z pozdrowieniem. Nawet jeśli nie nastąpiła zamiana, powinieneś zapisać wielkie słowo w pierwszym słowie.

Wielkie litery dotyczą tylko małych liter ( abcdefghijklmnopqrstuvwxyz). Powinieneś zostawić każdą inną postać taką, jaka była.

Powitanie zawsze będzie na początku łańcucha. Nie powinieneś zastępować pozdrowienia, którego nie ma na początku.

Nie zawsze może być pozdrowienie.

Twój kod musi mieć mniej niż 50 bajtów.

Przykłady

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

Sprawdź akumulator

Hola, w sumie jest 1000 różnych danych wejściowych:

Polecenie Bash do odzyskania obu powyższych jest

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

Zwycięski

Howdy, program z najbardziej poprawnymi podstawieniami z 1000 wejść powyżej wygrywa.

Musisz umieścić procent nagłówka danych, które program poprawnie obsługuje w nagłówku, tak jak poniżej:

# Language Name, percentage%

Nie jestem do końca pewien, dlaczego Jeff to stworzył, ale mimo to stanowi spore wyzwanie.


3
s=>System.Text.RegularExpressions.Regex.Replace();50 bajtów przed określeniem nawet wzorca, to C # out. (Oczywiście z wyrażeniem regularnym)
TheLethalCoder

1
Python również jest niedostępny (z wyrażeniem regularnym) :(
Gábor Fekete

Zawsze możesz zwrócić dane wejściowe, uzyskując wynik 31,3%.
Ian Miller

Zachęcaj do edycji pozdrowienia na początku rosnącego wyzwania. ;)
Draco18s nie ufa już SE

2
Zabawna anegdota: Mój pierwszy post na PPCG zacząłem od „Witaj, świecie! :)”, ale zauważyłem, jak tylko go opublikowałem, że SE usunęło całą linię oprócz „:)”. Byłem oczywiście zawstydzony, że zrobiłem coś złego i natychmiast usunąłem buźkę. W historii zmian nie pozostał żaden ślad i do dziś jesteśmy jedynymi, którzy o tym wiedzą ...
ETHprodukcje

Odpowiedzi:


8

GNU sed, 78% 100%

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

(49 bajtów)

Bateria testowa jest dość ograniczona: możemy policzyć, które słowa pojawiają się w pierwszej linii:

$ 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

Wezwań do usunięcia rozpoczyna się d, g, hlub s(i duże ich wersji); pozdrowienia zaczynające się od tych liter są

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

Ignorowanie linii tam, gdzie pojawiają się one same, to 220 fałszywych trafień. Usuńmy więc początkowe słowa zaczynające się na dowolną z tych czterech liter.

Kiedy widzimy początkowe słowo zaczynające się na dowolne z tych ( / ^[dghs]\w*), bez rozróżniania wielkości liter ( /i), po którym następuje co najmniej jeden znak inny niż słowo ( \W\+), a następnie zastępujemy go pustym ciągiem. Następnie zamień pierwszy znak na ekwiwalent wielkich liter ( s/./\U&/).

To nam daje

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

Możemy teraz trochę to udoskonalić:

  • Największy zestaw wyników fałszywie dodatnich jest howtaki, więc uzależniamy podstawienie przedrostkiem testem ujemnym:

     /^[Hh]ow\b/!
  • Możemy również filtrować na drugą literę, aby wyeliminować g'd, speaki sweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • To pozostawia tylko goodjako fałszywie pozytywny. Możemy dostosować test prefiksu wyeliminować słowa kończące się albo walbo d:

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

Demonstracja

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

9

Siatkówka , 68% 72,8% (stare) 74,8% 77,5% (nowa bateria testowa)

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

T`l`L`^.

Wypróbuj online! Edycja: Zyskaliśmy 4,8% (stary) 2,7% (nowy) zasięg dzięki pomocy @ MartinEnder.


1
Myślę, że możesz zrobić, [ ,]+ aby wycisnąć jeszcze kilka bajtów. Możesz również wyodrębnić hz alternacji.
Martin Ender

nie jestem pewien, ale i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+może działać, co oznacza, że ​​masz 8 bajtów do stracenia
tylko ASCII

@ Tylko ASCII h?i?niczego nie zapisuje h?i|i pasowałoby hih(chociaż nie wiem, czy to nawet w przypadkach testowych).
Martin Ender

Właściwie to oszczędza bajt ih?i?|iya.
Martin Ender

Może i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+wtedy
tylko ASCII

6

PHP, 60,6%

50 bajtów

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

Wypróbuj online!

PHP, 59,4%

49 bajtów

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

Wypróbuj online!

PHP, 58,4%

50 bajtów

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

Wypróbuj online!


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

Hej, zmieniłem na nową baterię testową, czy możesz zaktualizować swoją odpowiedź o nowy wynik? Dzięki
Beta Decay

@BetaDecay został zaktualizowany
Jörg Hülsermann

4

Vim, 55,4% 44,4%

df,<<vgU

Wyjaśnienie:

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

Hej, zmieniłem na nową baterię testową, czy możesz zaktualizować swoją odpowiedź o nowy wynik? Dzięki
Beta Decay
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.