Удалить приветствия


11

Вызов

Привет, учитывая строку в качестве входных данных, удалите все приветствия, найденные в начале строки.

Программа, которая выполняет самые правильные замены в менее чем 50 байтах, побеждает.

Приветствия

Эй, приветствие определяется как одно из следующих слов:

  • Здравствуй
  • Привет
  • Привет
  • Уважаемые
  • Привет
  • хаи
  • парни
  • HII
  • здор`ово
  • хия
  • сено
  • хейа
  • Голя
  • хихи
  • приветы

Первая буква может быть заглавной.

После приветствия всегда будет запятая и / или один пробел, который также должен быть удален. Запятая и пробел могут быть в любом порядке ( ,<space>или <space>,), и оба должны быть удалены.

Приветствие и следующее слово всегда будут разделяться запятой и / или одним пробелом.

Затем вы должны использовать первую букву слова, которое следовало бы за приветствием. Даже если замена не состоялась, вы все равно должны использовать заглавные буквы в первом слове результата.

Использование заглавных букв относится только к строчным буквам алфавита ( abcdefghijklmnopqrstuvwxyz). Вы должны оставить любой другой персонаж, как это было.

Приветствие всегда будет в начале строки. Вы не должны заменять приветствие, которого нет в начале.

Там не всегда может быть приветствие.

Ваш код должен быть менее 50 байтов.

Примеры

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

Тест батареи

Привет, всего 1000 различных входов:

Команда Bash для получения обоих выше

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

выигрыш

Привет, программа с наиболее правильными заменами из 1000 входов выше выигрывает.

Вы должны поместить процент входных данных, которые ваша программа обрабатывает правильно, в заголовок следующим образом:

# Language Name, percentage%

Я не совсем уверен, почему Джефф сделал это, но, тем не менее, это хороший вызов.


3
s=>System.Text.RegularExpressions.Regex.Replace();50 байтов, прежде чем будет задан даже шаблон, это C # тогда. (С подходом регулярных выражений, конечно)
TheLethalCoder

1
Также отсутствует Python (с регулярным выражением) :(
Габор Фекете

Вы всегда можете вернуть данный вход для оценки 31,3%.
Ян Миллер

Призывайте отменить приветствие в начале повышения проблемы. ;)
Draco18s больше не доверяет SE

2
Забавный анекдот: я впервые начал свой первый пост на PPCG со слова «Hello, world! :)», но заметил, как только я его опубликовал, SE удалил всю эту строку, кроме «:)». Я был, конечно, огорчен, что сделал что-то не так и сразу же убрал смайлик. В истории редакций не осталось и следа, и по сей день вы и я - единственные, кто об этом знает ...
ETHproductions

Ответы:


8

GNU sed, 78% 100%

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

(49 байт)

Тестовая батарея довольно ограничена: мы можем посчитать, какие слова появляются первыми в каждой строке:

$ 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

В приветствий быть удалены начинаются с d, g, hили s(или в верхнем регистре его версий); не приветствия, начинающиеся с этих букв

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

Игнорирование строк, где они появляются в одиночку, это 220 ложных срабатываний. Итак, давайте просто удалим начальные слова, начинающиеся с любой из этих четырех букв.

Когда мы видим начальное слово, начинающееся с любого из этих ( / ^[dghs]\w*), без учета регистра ( /i) и сопровождаемое хотя бы одним несловарным символом ( \W\+), то его заменяют пустой строкой. Затем замените первый символ его заглавным эквивалентом ( s/./\U&/).

Это дает нам

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

Теперь мы можем немного уточнить это:

  • Самый большой набор ложноположительных результатов how, поэтому мы делаем замену условной, добавляя префикс с отрицательным тестом:

     /^[Hh]ow\b/!
  • Мы также можем фильтровать вторую букву, чтобы исключить g'd, speakи sweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • Это оставляет только goodложное срабатывание. Мы можем настроить префиксный тест, чтобы исключить слова, оканчивающиеся на wили d:

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

демонстрация

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

9

Сетчатка , 68% 72,8% (старая версия ), 74,8% 77,5% (новая тестовая батарея)

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

T`l`L`^.

Попробуйте онлайн! Изменить: Получил 4,8% (старый) 2,7% (новый) охват с помощью советов @ MartinEnder.


1
Я думаю, что вы можете сделать, [ ,]+ чтобы выжать еще несколько байтов. Вы также можете извлечь hиз чередования.
Мартин Эндер

не уверен, но i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+может сработать, означая, что у вас осталось 8 байтов
только ASCII

@ ASCII-only h?i?ничего не экономит, h?i|и это будет соответствовать hih(хотя я не знаю, есть ли это даже в тестовых случаях).
Мартин Эндер

На самом деле, он сохраняет байт, если вы делаете ih?i?|iya.
Мартин Эндер

Может быть, i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+тогда
ASCII-только

6

PHP, 60,6%

50 байт

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

Попробуйте онлайн!

PHP, 59,4%

49 байт

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

Попробуйте онлайн!

PHP, 58,4%

50 байт

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

Попробуйте онлайн!


1
60,1%:#^[gh]\w+.#
Манатворк

Эй, я перешел на новую тестовую батарею, можешь ли ты обновить свой ответ своим новым счетом? Спасибо
Beta Decay

@BetaDecay обновляется
Йорг Хюльсерманн

4

Vim, 55,4% 44,4%

df,<<vgU

Объяснение:

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

Эй, я перешел на новую тестовую батарею, можешь ли ты обновить свой ответ своим новым счетом? Спасибо
Beta Decay
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.