Entfernen Sie die Anreden


11

Herausforderung

Hallo, wenn Sie eine Zeichenfolge als Eingabe angegeben haben, entfernen Sie alle am Anfang der Zeichenfolge gefundenen Anreden .

Das Programm, das die korrektesten Ersetzungen in weniger als 50 Bytes durchführt, gewinnt.

Grüße

Hey, eine Anrede wird als eines der folgenden Wörter definiert:

  • Hallo
  • Hallo
  • Hallo
  • sehr geehrter
  • Schöne Grüße
  • hai
  • Jungs
  • Hallo ich
  • Hallo
  • Hiya
  • Heu
  • heya
  • Hallo
  • Hihi
  • Grüße

Der erste Buchstabe kann groß geschrieben werden.

Nach der Anrede wird immer ein Komma und / oder ein einzelnes Leerzeichen stehen, das ebenfalls entfernt werden muss. Das Komma und das Leerzeichen können in beliebiger Reihenfolge ( ,<space>oder <space>,) stehen und beide sollten entfernt werden.

Die Begrüßung und das folgende Wort werden immer nur durch ein Komma und / oder ein einzelnes Leerzeichen getrennt.

Sie müssen dann den ersten Buchstaben des Wortes groß schreiben, der der Anrede gefolgt wäre. Auch wenn kein Ersatz stattgefunden hat, sollten Sie das erste Wort der Ausgabe groß schreiben.

Die Großschreibung gilt nur für alphabetische Kleinbuchstaben ( abcdefghijklmnopqrstuvwxyz). Sie sollten jeden anderen Charakter so lassen, wie er war.

Die Anrede steht immer am Anfang der Zeichenfolge. Sie sollten keine Anrede ersetzen, die nicht am Anfang steht.

Es kann sein, dass es nicht immer eine Anrede gibt.

Ihr Code muss unter 50 Byte liegen.

Beispiele

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

Batterie testen

Hola, es gibt insgesamt 1000 verschiedene Eingänge:

Ein Bash-Befehl zum Abrufen der beiden oben genannten Befehle lautet

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

Gewinnen

Grüß dich, das Programm mit den korrektesten Substitutionen aus den 1000 obigen Eingaben gewinnt.

Sie müssen den Prozentsatz der Eingaben, die Ihr Programm korrekt verarbeitet, wie folgt in Ihren Header einfügen:

# Language Name, percentage%

Ich bin mir nicht ganz sicher, warum Jeff das so gemacht hat, aber es ist trotzdem eine schöne Herausforderung.


3
s=>System.Text.RegularExpressions.Regex.Replace();50 Bytes, bevor auch nur ein Muster angegeben wird, das ist dann C # out. (Mit einem Regex-Ansatz natürlich)
TheLethalCoder

1
Python ist auch raus (mit Regex) :(
Gábor Fekete

Sie können die angegebene Eingabe jederzeit für eine Punktzahl von 31,3% zurückgeben.
Ian Miller

Drängen Sie darauf, die Anrede zu Beginn der anstehenden Herausforderung zu bearbeiten. ;)
Draco18s vertraut SE

2
Unterhaltsame Anekdote: Ich habe meinen ersten Beitrag auf PPCG ursprünglich mit "Hallo Welt! :)" begonnen, aber als ich ihn gepostet habe, habe ich festgestellt, dass SE die gesamte Zeile mit Ausnahme von ":)" entfernt hat. Ich war natürlich beschämt, dass ich etwas falsch gemacht hatte und entfernte sofort auch den Smiley. In der Revisionsgeschichte wurde keine Spur hinterlassen, und bis heute sind Sie und ich die einzigen, die davon wissen ...
ETHproductions

Antworten:


8

GNU sed, 78% 100%

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

(49 Bytes)

Die Testbatterie ist ziemlich begrenzt: Wir können zählen, welche Wörter in jeder Zeile zuerst erscheinen:

$ 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

Die Begrüßungen entfernt werden beginnen mit d, g, hoder s(oder Groß Versionen davon); Die Nichtgrüße, die mit diesen Buchstaben beginnen, sind

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

Wenn man Zeilen ignoriert, in denen sie alleine erscheinen, sind das 220 Fehlalarme. Entfernen wir also einfach die Anfangswörter, die mit einem dieser vier Buchstaben beginnen.

Wenn wir ein Anfangswort sehen, das mit einem dieser ( / ^[dghs]\w*) beginnt, ohne Berücksichtigung der Groß- und Kleinschreibung ( /i) und gefolgt von mindestens einem Nicht-Wort-Zeichen ( \W\+), ersetzen Sie es durch eine leere Zeichenfolge. Ersetzen Sie dann das erste Zeichen durch das entsprechende Großbuchstaben ( s/./\U&/).

Das gibt uns

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

Wir können dies jetzt ein wenig verfeinern:

  • Die größte Menge an falsch-positiven Ergebnissen ist how, daher machen wir die Substitution durch das Präfixieren eines negativen Tests bedingt:

     /^[Hh]ow\b/!
  • Wir können auch nach dem zweiten Buchstaben filtern, um zu eliminieren g'd, speakund sweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • Das bleibt nur goodals falsch positiv. Wir können den Präfix-Test anpassen, um Wörter zu entfernen, die entweder mit woder enden d:

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

Demonstration

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

9

Netzhaut , 68% 72,8% (alt) 74,8% 77,5% (neue Testbatterie)

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

T`l`L`^.

Probieren Sie es online aus! Bearbeiten: Mit Hilfe der Tipps von @ MartinEnder 4,8% (alt) 2,7% (neu) abgedeckt.


1
Ich denke, Sie können noch [ ,]+ ein paar Bytes herausdrücken. Sie können das auch haus dem Wechsel extrahieren .
Martin Ender

Ich i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+bin mir nicht sicher, könnte aber funktionieren, was bedeutet, dass Sie 8 Bytes übrig haben
ASCII - nur

@ ASCII-only h?i?spart nichts h?i|und es würde übereinstimmen hih(obwohl ich nicht weiß, ob das überhaupt in den Testfällen ist).
Martin Ender

Tatsächlich spart es ein Byte, wenn Sie dies tun ih?i?|iya.
Martin Ender

Vielleicht i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+dann
ASCII-nur

6

PHP 60,6%

50 Bytes

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

Probieren Sie es online aus!

PHP 59,4%

49 Bytes

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

Probieren Sie es online aus!

PHP 58,4%

50 Bytes

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

Probieren Sie es online aus!


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

Hey, ich habe auf eine neue Testbatterie umgestellt. Können Sie Ihre Antwort mit Ihrer neuen Punktzahl aktualisieren? Vielen Dank
Beta Decay

@BetaDecay wird aktualisiert
Jörg

4

Vim, 55,4%, 44,4%

df,<<vgU

Erläuterung:

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

Hey, ich habe auf eine neue Testbatterie umgestellt. Können Sie Ihre Antwort mit Ihrer neuen Punktzahl aktualisieren? Vielen Dank
Beta Decay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.