Loại bỏ các Salutations


11

Thử thách

Xin chào, được cung cấp một chuỗi làm đầu vào, loại bỏ bất kỳ lời chào nào được tìm thấy ở đầu chuỗi.

Chương trình thực hiện các thay thế chính xác nhất dưới 50 byte sẽ thắng.

Salutations

Này, một lời chào được định nghĩa là một trong những từ sau:

  • Chào
  • Chào
  • xin chào
  • kính thưa
  • lời chào hỏi
  • hai
  • các bạn
  • hii
  • hiya
  • hay
  • này
  • hola
  • chào
  • chào

Chữ cái đầu tiên có thể được viết hoa.

Sẽ luôn có một dấu phẩy và / hoặc một khoảng trắng sau lời chào cũng phải được loại bỏ. Dấu phẩy và dấu cách có thể theo bất kỳ thứ tự nào ( ,<space>hoặc <space>,) và cả hai nên được loại bỏ.

Lời chào và từ sau sẽ chỉ được phân tách bằng dấu phẩy và / hoặc dấu cách đơn.

Sau đó, bạn phải viết hoa chữ cái đầu tiên của từ đã theo sau lời chào. Ngay cả khi không có sự thay thế nào xảy ra, bạn vẫn nên viết hoa từ đầu tiên của đầu ra.

Viết hoa chỉ áp dụng cho các ký tự chữ cái viết thường ( abcdefghijklmnopqrstuvwxyz). Bạn nên để lại bất kỳ nhân vật khác như nó đã được.

Lời chào sẽ luôn ở đầu chuỗi. Bạn không nên thay thế một lời chào mà không phải lúc bắt đầu.

Có thể không phải lúc nào cũng có một lời chào.

Mã của bạn phải dưới 50 byte.

Ví dụ

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

Kiểm tra pin

Hola, có tổng cộng 1000 đầu vào khác nhau:

Lệnh Bash để lấy cả hai thứ trên là

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

Chiến thắng

Howdy, chương trình với sự thay thế chính xác nhất từ ​​1000 đầu vào ở trên sẽ thắng.

Bạn phải đặt tỷ lệ phần trăm đầu vào mà chương trình của bạn xử lý chính xác trong tiêu đề của bạn như sau:

# Language Name, percentage%

Tôi không hoàn toàn chắc chắn tại sao Jeff làm điều này, nhưng nó vẫn là một thử thách thú vị.


3
s=>System.Text.RegularExpressions.Regex.Replace();50 byte trước cả một mẫu được chỉ định, đó là C # out. (Với cách tiếp cận regex tất nhiên)
TheLethalCoder

1
Python cũng đã ra (với regex) :(
Gábor Fekete

Bạn luôn có thể trả về đầu vào đã cho với số điểm 31,3%.
Ian Miller

Mong muốn chỉnh sửa lời chào khi bắt đầu thử thách đang tăng. ;)
Draco18 không còn tin tưởng vào

2
Giai thoại thú vị: Ban đầu tôi đã bắt đầu bài đăng đầu tiên của mình trên PPCG với "Xin chào, thế giới! :)" nhưng nhận thấy ngay khi tôi đăng nó, SE đã xóa toàn bộ dòng đó ngoại trừ ":)". Tất nhiên tôi đã bị thế chấp rằng tôi đã làm điều gì đó sai và ngay lập tức loại bỏ nụ cười. Không một dấu vết nào được để lại trong lịch sử sửa đổi, và cho đến ngày nay, bạn và tôi là những người duy nhất biết về nó ...
ETHproductions

Câu trả lời:


8

GNU sed, 78% 100%

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

(49 byte)

Pin thử nghiệm khá hạn chế: chúng tôi có thể đếm từ nào xuất hiện đầu tiên trên mỗi dòng:

$ 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

Các lời chào để được gỡ bỏ bắt đầu với d, g, hhoặc s(hoặc chữ hoa phiên bản của chúng); những lời không bắt đầu bằng những chữ cái đó là

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

Bỏ qua các dòng mà chúng xuất hiện một mình, đó là 220 dương tính giả. Vì vậy, hãy loại bỏ các từ ban đầu bắt đầu bằng bất kỳ bốn chữ cái nào.

Khi chúng ta thấy một từ ban đầu bắt đầu bằng bất kỳ từ nào trong số đó ( / ^[dghs]\w*), không phân biệt chữ hoa chữ thường ( /i) và theo sau là ít nhất một ký tự không phải từ ( \W\+), sau đó thay thế bằng một chuỗi trống. Sau đó, thay thế ký tự đầu tiên bằng chữ hoa tương đương ( s/./\U&/).

Điều đó cho chúng ta

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

Bây giờ chúng ta có thể tinh chỉnh điều này một chút:

  • Tập hợp sai lớn nhất là how, vì vậy chúng tôi thực hiện thay thế có điều kiện bằng cách thêm tiền tố bằng một thử nghiệm âm tính:

     /^[Hh]ow\b/!
  • Chúng tôi cũng có thể lọc trên lá thư thứ hai, để loại bỏ g'd, speaksweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • Điều đó chỉ để lại goodmột dương tính giả. Chúng tôi có thể điều chỉnh kiểm tra tiền tố để loại bỏ các từ kết thúc bằng một trong hai whoặc d:

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

Trình diễn

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

9

Võng mạc , 68% 72,8% (cũ) 74,8% 77,5% (pin thử nghiệm mới)

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

T`l`L`^.

Hãy thử trực tuyến! Chỉnh sửa: Đạt được 4,8% (cũ) 2,7% (mới) với sự trợ giúp từ các mẹo của @ MartinEnder.


1
Tôi nghĩ bạn có thể làm [ ,]+ để vắt thêm một vài byte. Bạn cũng có thể trích xuất htừ xen kẽ.
Martin Ender

không chắc chắn nhưng i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+có thể hoạt động có nghĩa là bạn có 8 byte dự phòng
ASCII chỉ có

@ ASCII - chỉ h?i?tiết kiệm không có gì hơn h?i|và nó sẽ khớp hih(mặc dù tôi không biết liệu đó có phải trong các trường hợp thử nghiệm hay không).
Martin Ender

Trên thực tế, nó sẽ tiết kiệm một byte nếu bạn làm ih?i?|iya.
Martin Ender

Có lẽ i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+sau đó
ASCII-chỉ

6

PHP, 60,6%

50 byte

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

Hãy thử trực tuyến!

PHP, 59,4%

49 byte

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

Hãy thử trực tuyến!

PHP, 58,4%

50 byte

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

Hãy thử trực tuyến!


1
60,1%:#^[gh]\w+.#
thao tác

Này, tôi đã đổi sang pin thử nghiệm mới, bạn có thể cập nhật câu trả lời của mình với điểm số mới không? Cảm ơn
Beta Decay

@BetaDecay được cập nhật
Jörg Hülsermann

4

Vim, 55,4% 44,4%

df,<<vgU

Giải trình:

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

Này, tôi đã đổi sang pin thử nghiệm mới, bạn có thể cập nhật câu trả lời của mình với điểm số mới không? Cảm ơn
Beta Decay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.