Desafio
Oi, dada uma string como entrada, remova qualquer saudação encontrada no início da string.
O programa que executa as substituições mais corretas em menos de 50 bytes ganha.
Saudações
Ei, uma saudação é definida como uma das seguintes palavras:
- Oi
- Ei
- Olá
- caro
- saudações
- hai
- rapazes
- Olá eu
- Olá
- oi
- feno
- heya
- hola
- oi
- saudações
A primeira letra pode ser maiúscula.
Sempre haverá uma vírgula e / ou um espaço único após a saudação, que também deve ser removida. A vírgula e o espaço podem estar em qualquer ordem ( ,<space>
ou <space>,
) e ambos devem ser removidos.
A saudação e a palavra a seguir serão separadas apenas por vírgula e / ou espaço único.
Você deve colocar em maiúscula a primeira letra da palavra que teria seguido a saudação. Mesmo que nenhuma substituição tenha ocorrido, você ainda deve capitalizar a primeira palavra da saída.
Letras maiúsculas se aplicam somente a caracteres alfabéticos minúsculos ( abcdefghijklmnopqrstuvwxyz
). Você deve deixar qualquer outro personagem como estava.
A saudação será sempre no início da string. Você não deve substituir uma saudação que não esteja no início.
Nem sempre pode haver uma saudação.
Seu código deve ter menos de 50 bytes.
Exemplos
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
Bateria de teste
Olá, existem 1000 entradas diferentes no total:
A bateria de teste pode ser encontrada aqui, onde cada entrada é separada por uma nova linha: https://github.com/beta-decay/Remove-Substitutions-Battery/blob/master/inputs.txt
As saídas corretas correspondentes estão aqui: https://github.com/beta-decay/Remove-Substitutions-Battery/blob/master/replaced.txt
Um comando Bash para recuperar os itens acima é
wget https://raw.githubusercontent.com/beta-decay/Remove-Substitutions-Battery/master/{inputs,replaced}.txt
Ganhando
Olá, o programa com as substituições mais corretas das 1000 entradas acima vence.
Você deve colocar a porcentagem das entradas que seu programa manipula corretamente no cabeçalho da seguinte maneira:
# Language Name, percentage%
Não sei ao certo por que Jeff fez isso, mas faz um bom desafio.
fonte
s=>System.Text.RegularExpressions.Regex.Replace();
50 bytes antes que um padrão seja especificado, isso é C # então. (Com uma abordagem regex é claro)Respostas:
GNU sed,
78%100%(49 bytes)
A bateria de teste é bastante limitada: podemos contar quais palavras aparecem primeiro em cada linha:
Os saudações a ser removidos começar com
d
,g
,h
ous
(em maiúsculas ou versões dos mesmos); as não-saudações que começam com essas letras sãoIgnorar as linhas onde elas aparecem sozinhas, são 220 falsos positivos. Então, vamos remover as palavras iniciais que começam com qualquer uma dessas quatro letras.
Quando vemos uma palavra inicial começando com qualquer um desses (
/ ^[dghs]\w*
), sem distinção entre maiúsculas e minúsculas (/i
) e seguida de pelo menos um caractere que não seja da palavra (\W\+
), substitua-a por uma sequência vazia. Em seguida, substitua o primeiro caractere pelo seu equivalente em maiúscula (s/./\U&/
).Isso nos dá
Agora podemos refinar isso um pouco:
O maior conjunto de falsos positivos é
how
, então tornamos a substituição condicional prefixando com um teste negativo:Também pode filtrar a segunda letra, para eliminar
g'd
,speak
esweet
:Isso sai apenas
good
como um falso positivo. Podemos ajustar o teste prefixo para eliminar palavras que terminam em qualquerw
oud
:Demonstração
fonte
Retina ,
68%72,8% (antiga)74,8%77,5% (nova bateria de teste)Experimente online! Edit: Obteve 4,8% (antigo) 2,7% (novo) de cobertura com a ajuda das dicas do @ MartinEnder.
fonte
[ ,]+
para extrair mais alguns bytes. Você também pode extrair oh
da alternância.i`^h(a[iy]|eya?|i(h?i?|ya))[ ,]+
o trabalho poder seja, você tem 8 bytes de sobrah?i?
não economiza nadah?i|
e seria compatívelhih
(embora eu não saiba se isso é mesmo nos casos de teste).ih?i?|iya
.i`^h(a[iy]|eya?|ih?i|iya|ola|ello)[ ,]+
entãoPHP, 60,6%
50 bytes
Experimente online!
PHP, 59,4%
49 bytes
Experimente online!
PHP, 58,4%
50 bytes
Experimente online!
fonte
#^[gh]\w+.#
Vim,
55,4%44,4%Explicação:
fonte