Supprimer les salutations


11

Défi

Salut, étant donné une chaîne en entrée, supprimez toutes les salutations trouvées au début de la chaîne.

Le programme qui effectue les substitutions les plus correctes en moins de 50 octets gagne.

Salutations

Hé, une salutation est définie comme l'un des mots suivants:

  • salut
  • Hey
  • Bonjour
  • cher
  • salutations
  • hai
  • les gars
  • salut
  • salut
  • hiya
  • foins
  • heya
  • hola
  • hihi
  • salutations

La première lettre peut être en majuscule.

Il y aura toujours une virgule et / ou un seul espace après la salutation qui devra également être supprimé. La virgule et l'espace peuvent être dans n'importe quel ordre ( ,<space>ou <space>,) et les deux doivent être supprimés.

Le message d'accueil et le mot suivant ne seront séparés que par une virgule et / ou un seul espace.

Vous devez alors mettre en majuscule la première lettre du mot qui aurait suivi la salutation. Même si aucun remplacement n'a eu lieu, vous devez toujours mettre en majuscule le premier mot de la sortie.

La mise en majuscule s'applique uniquement aux caractères alphabétiques en minuscules ( abcdefghijklmnopqrstuvwxyz). Vous devez laisser tout autre personnage tel quel.

La salutation sera toujours au début de la chaîne. Vous ne devez pas remplacer une salutation qui n'est pas au début.

Il n'y a pas toujours de salut.

Votre code doit être inférieur à 50 octets.

Exemples

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

Test de la batterie

Hola, il y a 1000 entrées différentes au total:

Une commande Bash pour récupérer les deux ci-dessus est

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

Gagnant

Howdy, le programme avec les substitutions les plus correctes des 1000 entrées ci-dessus gagne.

Vous devez mettre le pourcentage des entrées que votre programme gère correctement dans votre en-tête comme ceci:

# Language Name, percentage%

Je ne sais pas vraiment pourquoi Jeff en a fait une chose, mais cela représente quand même un beau défi.


3
s=>System.Text.RegularExpressions.Regex.Replace();50 octets avant même qu'un modèle ne soit spécifié, c'est alors C # out. (Avec une approche regex bien sûr)
TheLethalCoder

1
Python est également sorti (avec regex) :(
Gábor Fekete

Vous pouvez toujours retourner l'entrée donnée pour un score de 31,3%.
Ian Miller

Exhortez à éditer la salutation au début de la montée du défi. ;)
Draco18s ne fait plus confiance au SE

2
Anecdote amusante: à l'origine, j'ai commencé mon premier post sur PPCG avec "Hello, world! :)" mais j'ai remarqué dès que je l'ai posté que SE a supprimé l'intégralité de cette ligne à l'exception du ":)". J'étais bien sûr mortifié d'avoir fait quelque chose de mal et j'ai immédiatement retiré le smiley également. Aucune trace n'a été laissée dans l'historique des révisions, et à ce jour vous et moi sommes les seuls à le savoir ...
ETHproductions

Réponses:


8

GNU sed, 78% 100%

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

(49 octets)

La batterie de test est assez limitée: on peut compter quels mots apparaissent en premier sur chaque ligne:

$ 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

Les saluts à enlever commencent par d, g, hou s(ou majuscule versions de celui - ci); les non-salutations commençant par ces lettres sont

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

Ignorer les lignes où elles apparaissent seules, c'est 220 faux positifs. Supprimons donc les premiers mots commençant par l'une de ces quatre lettres.

Lorsque nous voyons un mot initial commençant par l'un de ceux ( / ^[dghs]\w*), insensible à la casse ( /i), et suivi d'au moins un caractère non-mot ( \W\+), remplacez-le par une chaîne vide. Ensuite, remplacez le premier caractère par son équivalent majuscule ( s/./\U&/).

Cela nous donne

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

Nous pouvons maintenant affiner un peu ceci:

  • Le plus grand ensemble de faux positifs est howdonc nous conditionnons la substitution en préfixant avec un test négatif:

     /^[Hh]ow\b/!
  • Nous pouvons également filtrer sur la deuxième lettre, pour éliminer g'd, speaket sweet:

    s/^[dghs][eruaio]\w*\W\+//i
  • Cela ne laisse qu'un goodfaux positif. Nous pouvons ajuster le test de préfixe pour éliminer les mots se terminant par wou d:

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

Manifestation

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

9

Rétine , 68% 72,8% (ancienne) 74,8% 77,5% (nouvelle batterie de test)

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

T`l`L`^.

Essayez-le en ligne! Edit: Gain de 4,8% (ancien) 2,7% (nouveau) couverture avec l'aide des conseils de @ MartinEnder.


1
Je pense que vous pouvez faire [ ,]+ pour extraire quelques octets de plus. Vous pouvez également extraire le hde l'alternance.
Martin Ender

Je ne sais pas, mais cela i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+pourrait fonctionner, ce qui signifie que vous avez 8 octets de rechange
ASCII uniquement

@ ASCII uniquement ne h?i?sauvegarde rien h?i|et cela correspondrait hih(même si je ne sais pas si c'est même dans les cas de test).
Martin Ender

En fait, il enregistre un octet si vous le faites ih?i?|iya.
Martin Ender

Peut-être i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+alors
uniquement ASCII

6

PHP, 60,6%

50 octets

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

Essayez-le en ligne!

PHP, 59,4%

49 octets

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

Essayez-le en ligne!

PHP, 58,4%

50 octets

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

Essayez-le en ligne!


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

Hé, j'ai changé pour une nouvelle batterie de test, pouvez-vous mettre à jour votre réponse avec votre nouveau score? Merci
Beta Decay

@BetaDecay est mis à jour
Jörg Hülsermann

4

Vim, 55,4% 44,4%

df,<<vgU

Explication:

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

Hé, j'ai changé pour une nouvelle batterie de test, pouvez-vous mettre à jour votre réponse avec votre nouveau score? Merci
Beta Decay
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.