Dada la entrada de una cadena que consiste en cualquier mensaje de la sala de chat de nuestro sitio tomado de la lista descrita y vinculada a continuación, genera un valor verdadero o falso que intenta predecir si ese mensaje fue destacado o no en 50 bytes o menos.
Puede usar cualquier valor verdadero o falso , pero deben ser idénticos (es decir, solo debe haber dos resultados posibles, uno verdadero y otro falso). La entrada se dará como HTML sin formato con nuevas líneas eliminadas, y puede contener caracteres Unicode que no sean ASCII. Si necesita una entrada en algo que no sea UTF-8, dígalo en su respuesta.
La presentación ganadora para este desafío será la que predice el porcentaje más alto de mensajes de chat correctamente, fuera de la lista vinculada a continuación. Si dos presentaciones dadas tienen la misma tasa de éxito, la presentación más corta ganará.
Proporcione instrucciones para ejecutar su código en todo el conjunto de mensajes y calcular el porcentaje correcto. Idealmente, esto debería ser un poco de código repetitivo (sin contar para sus 50 bytes) que recorre los casos de prueba positivos y genera cuántos de ellos su código se corrigió y luego hace lo mismo para los casos de prueba negativos. (La puntuación general se puede calcular manualmente a través de (correctPositive + correctNegative) / totalMessages
).
Para que su código sea razonablemente verificable, debe completarse en 5 minutos o menos para la lista completa de mensajes de chat en hardware razonable de hoy en día.
La lista completa de mensajes de chat se puede encontrar aquí , y consta de los 1000 últimos mensajes destacados como casos de prueba verdaderos y los 1000 últimos mensajes sin estrellas como casos de prueba falsos. Tenga en cuenta que hay dos archivos en la esencia; desplácese hasta la mitad hacia abajo para ver los mensajes sin estrellas
fuente
O2
Don'?t star
\^
Respuestas:
Retina , 50 bytes,
71.8%72.15%Probé un poco de golf regex a sugerencia de @ MartinBüttner. Esto coincide con 704 mensajes destacados y no coincide con 739 mensajes sin estrellas.
El
^.*( ... )
objetivo es asegurarse de que siempre haya 0 o 1 coincidencia, ya que Retina genera el número de coincidencias de forma predeterminada. Puede calificar el programa en los archivos de entrada anteponiendo elm`
modo multilínea y luego ejecutandoy del mismo modo para
unstarred.txt
.Análisis / explicación
Generé los fragmentos anteriores (y muchos más) usando un programa, luego seleccioné los que quería manualmente. Aquí hay una idea de por qué funcionan los fragmentos anteriores:
C
: PartidosPPCG
,@CᴏɴᴏʀO'Bʀɪᴇɴ
E
: Partidos@ETHproductions
,@El'endiaStarman
;
: Debido a que los casos de prueba son HTML, esto coincide<
y>
ಠ-ﭏ
: Coincide con una gama de caracteres Unicode, principalmente paraಠ_ಠ
y@Doorknob冰
tar
: Coincide con las variaciones destar
,@El'endiaStarman
(nuevamente) y tambiéngravatar
que aparece en los oneboxes publicados por nuevos botsol
: Coincidenciasrel="nofollow"
que se encuentran en muchos enlaces y oneboxesl.x
: Partidos@AlexA.
,@trichoplax
eo
: Principalmente coincidepeople
, pero también tres casos para@Geobits
a.u
: Principalmente partidosgraduation
,status
,feature
yabuse
pin
: Coincidenciasping
y palabras que terminan enping
. También coincide con algunas publicaciones en una discusión sobrepineapple
, como un ejemplo de sobreajuste.nu
: Coincide con una mezcla de palabras, la más común de las cuales esnumber
o.f
: Partidosgolf
,conf(irm|use)
"$
: Coincide con una comilla doble como último carácter, p. Ej.@phase He means "Jenga."
No
[
tiene nada de especial: solo me quedaba un personaje, así que pensé que podría usarlo para combinar un caso más.fuente
JavaScript ES6, 50 bytes, 71.10%
Identifica correctamente 670 destacados y 752 no destacados.
¡Ahora a través de la barrera del 70% y superando a todos excepto a Retina!
Devuelve
true
si el mensaje contiene alguna de estas cosas:D
,E
,R
, ov
;tar
(generalmentestar
);a
yu
con un char en el medio;l
yx
con un personaje intermedio (generalmentealex
);eo
ool
;C
, un punto y coma o aಠ
.Aquí hay algunas coincidencias más fructíferas que no parecen valer la pena deshacerse de otros:
nf
nu
yp
n.m
Esto se ha ido acercando cada vez más a la respuesta de Retina, pero he encontrado la mayoría de las mejoras por mi cuenta.
Pruébelo en la consola de una de estas páginas: textos en estrella , textos sin estrella
Aquí hay una versión alternativa.
/a/.test
es técnicamente una función, pero no cumple con nuestros criterios :Este puntaje es 71.90% (697 con estrella, 741 sin estrella).
He estado realizando algunos análisis en las listas para ver qué grupos de expresiones regulares coinciden con las publicaciones más destacadas y menos destacadas. Los análisis se pueden encontrar en este Gist . Hasta ahora, he comprobado
aa
ya.a
coincide.a.u
está en torno al # 50 con una puntuación de 28, pero es la combinación más eficiente de su formato ...fuente
/regexp/.test()
? Creo que es posible exprimir algunos casos más con eso.Pyth, 50 bytes, 67.9%
Esto divide la entrada en uno de los 322 depósitos y elige el valor booleano en función de ese depósito.
Tanteo
fuente
CJam, 45 bytes, 65.55%
Esto verifica si el primer carácter está en una lista específica o si la suma de todos los puntos de código es mayor que 8,672.
Tanteo
fuente
fold
comando, junto con la respuesta real.Matlab / Octave, 17 bytes 60.15%
Clasifica correctamente 490 mensajes como fijos, 713 mensajes como no fijos
Versión actual:
Solo comprobando la longitud.
Versión antigua:
Podría ser traducido a cualquier otro idioma. Simplemente comprueba si el mensaje contiene las palabras estrella o no.
score: 59/911/52.5%
Resultados para casos de prueba usando este código:
fuente
CJam, 32 bytes, puntaje general de 0.5605 (56%).
Identifica correctamente 428 mensajes destacados y 693 mensajes no destacados. La puntuación total es
(360+730)/2000=0.545
.Sin esperar ganar, veré cómo funciona. Arriba está el código para un solo mensaje, para ejecutar con uso múltiple esta versión modificada que devuelve la cantidad de mensajes destacados:
Simplemente pruébelo con STDIN como texto sin formato de cualquier archivo. Devuelve verdadero si el mensaje contiene "estrella" o si
length + 1 mod 4 = 0
.fuente
JavaScript ES6, 0.615 = 61.5%
342 correctamente identificados como destacados, 888 correctamente identificados como no destacados,
(342+888)/2000 = 0.615
Prueba así en esto o en esto :
¡TODAVÍA PUEDO OBTENERTE, MI BONITA!
fuente
Retina, 46 bytes, 68.55
679 estrellas: 692 sin estrellas
Cambió a Retina para obtener más expresiones regulares en ... Todavía no está hecho.
fuente
C # 6.0 (.NET Framework 4.6), 50 bytes, 63,60%
Programa que utilicé para fines de prueba:
fuente