인사말을 제거


11

도전

안녕하세요, 문자열을 입력으로 받으면 문자열 의 시작 부분에서 찾은 인사말을 제거하십시오 .

50 바이트 미만에서 가장 정확한 대체를 수행하는 프로그램이 승리합니다.

인사말

인사말은 다음 단어 중 하나로 정의됩니다.

  • 안녕
  • 안녕하세요
  • 소중한
  • 인사말
  • 하이
  • 얘들 아
  • 유이
  • Howdy
  • 히야
  • 건초
  • 헤야
  • 홀라
  • 히히
  • 인사말

첫 글자는 대문자 일 수 있습니다.

경례 뒤에는 반드시 쉼표 및 / 또는 단일 공백이 있어야하며이 공백도 제거해야합니다. 쉼표와 공백은 임의의 순서 ( ,<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

승리

Howdy, 위의 1000 입력에서 가장 정확한 대체 프로그램이 승리합니다.

다음과 같이 프로그램이 입력하는 비율을 헤더에 올바르게 입력해야합니다.

# Language Name, percentage%

나는 왜 Jeff가 이것을 이것을 만들 었는지 확실하지 않지만 그럼에도 불구하고 좋은 도전을합니다.


3
s=>System.Text.RegularExpressions.Regex.Replace();심지어 패턴이 지정되기 전에 50 바이트, 즉 C #입니다. (물론 정규식 접근)
TheLethalCoder

1
파이썬도 나왔습니다 (정규식으로) :(
Gábor Fekete

항상 31.3 %의 점수에 대해 주어진 입력을 반환 할 수 있습니다.
Ian Miller

도전이 시작될 때 경례를 편집하도록 촉구하십시오. ;)
Draco18s는 더 이상 17:02에 SE

2
재미있는 일화 : 나는 원래 "Hello, world! :)"로 PPCG에 대한 첫 번째 게시물을 시작 했지만 게시 한 즉시 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, speaksweet:

    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 % (old) 74.8 % 77.5 % (새로운 테스트 배터리)

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

T`l`L`^.

온라인으로 사용해보십시오! 편집 : @ MartinEnder의 도움으로 4.8 % (이전) 2.7 % (신규) 범위를 얻었습니다.


1
[ ,]+ 몇 바이트를 더 짜낼 수 있다고 생각합니다 . h교번에서를 추출 할 수도 있습니다 .
마틴 엔더

확실하지 않지만 i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+작동 할 수 있음 8 바이트를 절약 할 수 있음
ASCII 전용

@ASCII 전용 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+.#
manatwork 12

안녕하세요, 새 테스트 배터리로 교체했습니다. 새 점수로 답변을 업데이트 할 수 있습니까? 감사합니다
Beta Decay

@BetaDecay가 업데이트됩니다
요 르그 Hülsermann을

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.