Dada a entrada de uma string que consiste em qualquer mensagem da sala de bate-papo do site, extraída da lista descrita e vinculada abaixo, gera um valor verdadeiro ou falso, tentando prever se essa mensagem foi estrelada ou não em 50 bytes ou menos.
Você pode usar quaisquer valores de verdade ou falsidade , mas eles devem ser idênticos (ou seja, deve haver apenas duas saídas possíveis, uma verdade e uma falsidade). A entrada será fornecida como HTML bruto com as novas linhas removidas e pode conter caracteres Unicode não ASCII. Se você precisar de algo diferente de UTF-8, diga-o na sua resposta.
A submissão vencedora a este desafio será a que prevê a maior porcentagem de mensagens de bate-papo corretamente, fora da lista vinculada abaixo. Se dois envios dados tiverem a mesma taxa de sucesso, o envio mais curto vencerá.
Forneça instruções para executar seu código em todo o conjunto de mensagens e calcular a porcentagem correta. Idealmente, esse deve ser um pouco de código padrão (não contado em seus 50 bytes) que percorre os casos de teste positivos e gera quantos deles seu código ficou correto e, em seguida, faz o mesmo para os casos de teste negativos. (A pontuação geral pode ser calculada manualmente via (correctPositive + correctNegative) / totalMessages
.)
Para que seu código seja razoavelmente testável, ele deve ser concluído em 5 minutos ou menos para toda a lista de mensagens de bate-papo em um hardware moderno razoável.
A lista completa de mensagens de bate-papo pode ser encontrada aqui e consiste nas 1000 últimas mensagens com estrela como casos de teste de verdade e nas 1000 últimas mensagens sem estrela como casos de teste de falsificação. Observe que existem dois arquivos na lista principal; role até a metade para as mensagens não marcadas com estrela.
fonte
O2
Don'?t star
\^
Respostas:
Retina , 50 bytes,
71,8%72,15%Tentei jogar golfe regex por sugestão de @ MartinBüttner. Corresponde a 704 mensagens com estrela e não a 739 mensagens com estrela.
A
^.*( ... )
é para se certificar de que há sempre 0 ou 1 jogo, já que Retina emite o número de correspondências por padrão. Você pode pontuar o programa nos arquivos de entrada, acrescentando om`
modo multilinha e executandoe da mesma forma para
unstarred.txt
.Análise / explicação
Gerei os trechos acima (e muitos mais) usando um programa, depois selecionei os que eu queria manualmente. Aqui estão algumas intuições sobre o funcionamento dos trechos acima:
C
: JogosPPCG
,@CᴏɴᴏʀO'Bʀɪᴇɴ
E
: Jogos@ETHproductions
,@El'endiaStarman
;
: Como os casos de teste são HTML, isso corresponde<
e>
ಠ-ﭏ
: Corresponde a um intervalo de caracteres Unicode, com destaque paraಠ_ಠ
e@Doorknob冰
tar
: Jogos variaçõesstar
,@El'endiaStarman
(novamente) e tambémgravatar
o que aparece nos oneboxes enviadas por novas mensagens botsol
: Corresponderel="nofollow"
a vários links e oneboxesl.x
: Jogos@AlexA.
,@trichoplax
eo
: Corresponde principalmentepeople
, mas também três casos para@Geobits
a.u
: Principalmente correspondegraduation
,status
,feature
eabuse
pin
: Correspondênciasping
e palavras terminadas emping
. Também corresponde a algumas postagens em uma discussão sobrepineapple
, como um exemplo de ajuste excessivo.nu
: Corresponde a um conjunto misto de palavras, a mais comum delasnumber
o.f
: Jogosgolf
,conf(irm|use)
"$
: Corresponde a aspas duplas como último caractere, por exemplo@phase He means "Jenga."
Não
[
há nada de especial - eu só tinha um personagem sobrando, então achei que poderia usá-lo para combinar com mais um caso.fonte
JavaScript ES6, 50 bytes, 71,10%
Identifica corretamente 670 com estrela e 752 sem estrela.
Agora, atravessando a barreira dos 70% e derrotando todos, exceto a Retina!
Retorna
true
se a mensagem contiver uma destas coisas:D
,E
,R
, ouv
;tar
(geralmentestar
);a
eu
com um caractere no meio;l
ex
com um caractere no meio (geralmentealex
);eo
ouol
;C
, ponto-e-vírgula ou aಠ
.Aqui estão mais algumas partidas frutíferas que parecem não valer a pena se livrar de outras pessoas:
nf
nu
yp
n.m
Isso vem se aproximando cada vez mais da resposta da Retina, mas eu mesmo encontrei a maioria das melhorias.
Teste-o no console de uma dessas páginas: textos em estrela , textos sem estrela
Aqui está uma versão alternativa.
/a/.test
é tecnicamente uma função, mas não atende aos nossos critérios :A pontuação é de 71,90% (697 com estrela e 741 sem estrela).
Fiz algumas análises nas listas para ver quais grupos de expressões regulares correspondem às postagens mais estreladas e menos estreladas. As análises podem ser encontradas nesta lista . Até agora, eu verifiquei
aa
ea.a
correspondências.a.u
caiu em torno de # 50 com uma pontuação de 28, mas é a combinação mais eficiente de seu formato ...fonte
/regexp/.test()
? Eu acho que é possível apertar mais alguns casos com isso.Pitão, 50 bytes, 67,9%
Isso faz o hash da entrada em um dos 322 buckets e escolhe o Booleano, dependendo desse bucket.
Pontuação
fonte
CJam, 45 bytes, 65,55%
Isso verifica se o primeiro caractere está em uma lista específica ou se a soma de todos os pontos de código é maior que 8.672.
Pontuação
fonte
fold
comando, junto com a resposta real.Matlab / Oitava, 17 bytes 60,15%
Classifica corretamente 490 mensagens como iniciadas, 713 mensagens como iniciadas
Versão Atual:
Apenas verificando o comprimento.
Versão antiga:
Pode ser traduzido para qualquer outro idioma. Apenas verifica se a mensagem contém as palavras com estrela ou não.
score: 59/911/52.5%
Resultados para casos de teste usando este código:
fonte
CJam, 32 bytes, pontuação geral de 0,5605 (56%).
Identifica corretamente 428 mensagens com estrela e 693 mensagens sem estrela. A pontuação total é
(360+730)/2000=0.545
.Não esperando ganhar, vou ver como ele funciona. Acima está o código para uma única mensagem, para executar com uso múltiplo nesta versão modificada que retorna a quantidade de mensagens com estrela:
Apenas teste-o com STDIN, sendo o texto bruto de qualquer arquivo. Retorna true se a mensagem contiver "estrela" ou se
length + 1 mod 4 = 0
.fonte
JavaScript ES6, 0,615 = 61,5%
342 corretamente identificados como com estrela, 888 corretamente identificados como com estrela,
(342+888)/2000 = 0.615
Teste como este sobre este ou esta :
AINDA POSSO OBTER VOCÊ, MINHA BONITA!
fonte
Retina, 46 bytes, 68,55
679 estrela: 692 estrela
Mudei para Retina para obter mais algumas expressões regulares ... Ainda não foi feito.
fonte
C # 6.0 (.NET Framework 4.6), 50 bytes, 63,60%
Programa que eu usei para fins de teste:
fonte