Desafío
Hola, dada una cadena como entrada, elimine cualquier saludo que se encuentre al comienzo de la cadena.
El programa que realiza las sustituciones más correctas en menos de 50 bytes gana.
Saludos
Hola, un saludo se define como una de las siguientes palabras:
- Hola
- Oye
- Hola
- querido
- saludos
- hai
- chicos
- Hola yo
- hola
- hola
- heno
- heya
- Hola
- hola
- saludos
La primera letra puede estar en mayúscula.
Siempre habrá una coma y / o un espacio único después del saludo que también debe eliminarse. La coma y el espacio pueden estar en cualquier orden ( ,<space>
o <space>,
) y ambos deben eliminarse.
El saludo y la siguiente palabra solo estarán separados por una coma y / o un espacio único.
Luego debe poner en mayúscula la primera letra de la palabra que habría seguido al saludo. Incluso si no se ha realizado ningún reemplazo, aún debe capitalizar la primera palabra de la salida.
Las mayúsculas solo se aplican a caracteres alfabéticos en minúsculas ( abcdefghijklmnopqrstuvwxyz
). Deberías dejar cualquier otro personaje como estaba.
El saludo siempre será al comienzo de la cadena. No debe reemplazar un saludo que no está al comienzo.
Puede que no siempre haya un saludo.
Su código debe tener menos de 50 bytes.
Ejemplos
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
Prueba de la batería
Hola, hay 1000 entradas diferentes en total:
La batería de prueba se puede encontrar aquí, donde cada entrada está separada por una nueva línea: https://github.com/beta-decay/Remove-Substitutions-Battery/blob/master/inputs.txt
Las salidas correctas correspondientes están aquí: https://github.com/beta-decay/Remove-Substitutions-Battery/blob/master/replaced.txt
Un comando Bash para recuperar tanto lo anterior es
wget https://raw.githubusercontent.com/beta-decay/Remove-Substitutions-Battery/master/{inputs,replaced}.txt
Victorioso
Hola, el programa con las sustituciones más correctas de las 1000 entradas anteriores gana.
Debe poner el porcentaje de las entradas que su programa maneja correctamente en su encabezado de la siguiente manera:
# Language Name, percentage%
No estoy completamente seguro de por qué Jeff hizo esto, pero sin embargo, es un buen desafío.
fuente
s=>System.Text.RegularExpressions.Regex.Replace();
50 bytes antes incluso de que se especifique un patrón, entonces eso es C #. (Con un enfoque regex, por supuesto)Respuestas:
GNU sed,
78%100%(49 bytes)
La batería de prueba es bastante limitada: podemos contar qué palabras aparecen primero en cada línea:
Los saludos que ser eliminado comienzan con
d
,g
,h
os
(o mayúsculas versiones de los mismos); los no saludos que comienzan con esas letras sonIgnorando las líneas donde aparecen solas, eso es 220 falsos positivos. Entonces, eliminemos las palabras iniciales que comienzan con cualquiera de esas cuatro letras.
Cuando vemos una palabra inicial que comienza con cualquiera de esos (
/ ^[dghs]\w*
), sin distinción entre mayúsculas y minúsculas (/i
), y seguida de al menos un carácter que no sea de palabra (\W\+
), luego reemplácelo con una cadena vacía. Luego, reemplace el primer carácter con su equivalente en mayúsculas (s/./\U&/
).Eso nos da
Ahora podemos refinar esto un poco:
El conjunto más grande de falsos positivos es
how
, por lo que hacemos la sustitución condicional al prefijar con una prueba negativa:También podemos filtrar en la segunda letra, para eliminar
g'd
,speak
ysweet
:Eso deja solo
good
como un falso positivo. Podemos ajustar la prueba de prefijo para eliminar las palabras que terminan enw
od
:Demostración
fuente
Retina ,
68%72.8% (antiguo)74.8%77.5% (batería de prueba nueva)Pruébalo en línea! Editar: Obtuve 4.8% (antiguo) 2.7% (nuevo) de cobertura con la ayuda de los consejos de @ MartinEnder.
fuente
[ ,]+
para exprimir algunos bytes más. También puede extraer elh
de la alternancia.i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+
podría funcionar, lo que significa que tiene 8 bytes de sobrah?i?
no guarda nadah?i|
y coincidiríahih
(aunque no sé si eso es incluso en los casos de prueba).ih?i?|iya
.i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+
entoncesPHP, 60,6%
50 bytes
Pruébalo en línea!
PHP, 59,4%
49 bytes
Pruébalo en línea!
PHP, 58,4%
50 bytes
Pruébalo en línea!
fuente
#^[gh]\w+.#
Vim,
55.4%44.4%Explicación:
fuente