ลบคำทักทาย


11

ท้าทาย

สวัสดีให้สตริงเป็นอินพุตลบคำทักทายใด ๆ ที่พบในตอนเริ่มต้นของสตริง

โปรแกรมที่จะทำการแทนที่ที่ถูกต้องที่สุดในเวลาไม่ถึง 50 ไบต์จะชนะ

Memorial ~

เฮ้คำทักทายถูกกำหนดเป็นหนึ่งในคำต่อไปนี้:

  • สวัสดี
  • เฮ้
  • สวัสดี
  • ที่รัก
  • ทักทาย
  • ไห่
  • ผู้ชาย
  • Hii
  • หมอตำแย
  • Hiya
  • หญ้าแห้ง
  • Heya
  • hola
  • hihi
  • คำขึ้นต้นจดหมาย

อักษรตัวแรกอาจเป็นตัวพิมพ์ใหญ่

จะมีเครื่องหมายจุลภาคและ / หรือเว้นวรรคเดียวตามหลังคำทักทายซึ่งจะต้องถูกลบด้วย เครื่องหมายจุลภาคและพื้นที่อาจอยู่ในลำดับใด ๆ ( ,<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

ทดสอบแบตเตอรี่

Hola มีอินพุตทั้งหมด 1,000 อินพุต:

คำสั่ง Bash เพื่อดึงทั้งสองข้างต้นคือ

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

การชนะ

Howdy โปรแกรมที่มีการเปลี่ยนตัวที่ถูกต้องที่สุดจาก 1,000 อินพุตด้านบนชนะ

คุณต้องใส่เปอร์เซ็นต์ของอินพุตที่โปรแกรมของคุณจัดการอย่างถูกต้องในส่วนหัวของคุณดังนี้:

# Language Name, percentage%

ฉันไม่แน่ใจอย่างสมบูรณ์ว่าทำไมเจฟฟ์ทำสิ่งนี้ แต่มันก็เป็นความท้าทายที่ดี


3
s=>System.Text.RegularExpressions.Regex.Replace();50 ไบต์ก่อนถึงแม้จะมีการระบุรูปแบบนั่นคือ C # จากนั้น (ด้วยวิธีการ regex แน่นอน)
TheLethalCoder

1
Python ออกมาพร้อมกับ regex :(
Gábor Fekete

คุณสามารถส่งคืนอินพุตที่กำหนดได้ตลอดเวลาด้วยคะแนน 31.3%
เอียนมิลเลอร์

กระตุ้นให้แก้ไขคำทักทายเมื่อเริ่มต้นการท้าทายที่เพิ่มขึ้น ;)
Draco18s ไม่ไว้วางใจ SE

2
เรื่องเล็ก ๆ น้อย ๆ สนุก: ฉันเริ่มโพสต์ครั้งแรกของฉันใน PPCGด้วย "สวัสดีโลก! :)" แต่สังเกตเห็นทันทีที่ฉันโพสต์มันว่า SE ลบทั้งหมดของบรรทัดนั้นยกเว้น ":)" แน่นอนว่าฉันเสียใจที่ฉันทำสิ่งผิดปกติและลบรอยยิ้มออกทันทีเช่นกัน ไม่มีร่องรอยเหลืออยู่ในประวัติศาสตร์การแก้ไขและจนถึงวันนี้คุณและฉันเป็นคนเดียวที่รู้เกี่ยวกับมัน ...
ETHproductions

คำตอบ:


8

รุ่น GNU, 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จากการสลับ
Martin Ender

ไม่แน่ใจ แต่i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+อาจใช้งานได้หมายความว่าคุณมีอะไหล่ 8 ไบต์
ASCII-only

@ ASCII- h?i?บันทึกอย่างเดียวไม่ได้h?i|และมันจะจับคู่hih(แม้ว่าฉันจะไม่รู้ว่าอยู่ในกรณีทดสอบหรือไม่)
Martin Ender

ih?i?|iyaที่จริงมันไม่ประหยัดไบต์ถ้าคุณทำ
Martin Ender

อาจเป็นเช่น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 อัพเดทแล้ว
JörgHülsermann

4

เป็นกลุ่ม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.