Étant donné l'entrée d'une chaîne composée de tout message provenant de la salle de discussion de notre site, tirée de la liste décrite ci-dessous, renvoie une valeur de vérité ou une valeur de fausseté tentant de prédire si ce message a été marqué ou non sur 50 octets ou moins.
Vous pouvez utiliser n'importe quelle valeur de vérité ou de fausseté , mais elles doivent être identiques (autrement dit, il ne devrait y avoir que deux sorties possibles, une vérité et une fausseté). L'entrée sera donnée sous forme de code HTML brut avec les nouvelles lignes supprimées et peut contenir des caractères Unicode non-ASCII. Si vous avez besoin d'informations autres que UTF-8, veuillez l'indiquer dans votre réponse.
La soumission gagnante à ce défi sera celle qui prédit correctement le pourcentage le plus élevé de messages de discussion en dehors de la liste liée ci-dessous. Si deux soumissions données ont le même taux de réussite, la soumission la plus courte l'emportera.
Veuillez fournir des instructions pour exécuter votre code sur l’ensemble des messages et calculer le pourcentage correct. Idéalement, il devrait s'agir d'un peu de code passe-partout (non compté dans vos 50 octets) qui parcourt les cas de test positifs et en indique le nombre de fois que votre code est correct, puis fait de même pour les cas de test négatifs. (Le score global peut ensuite être calculé manuellement via (correctPositive + correctNegative) / totalMessages
.)
Pour que votre code soit raisonnablement vérifiable, il doit être terminé en 5 minutes ou moins pour la liste complète des messages de discussion sur du matériel moderne raisonnable.
La liste complète des messages de discussion peut être trouvée ici , et elle comprend les 1000 derniers messages marqués comme cas de test de véracité et les 1000 derniers messages non marqués comme cas de test faussement. Notez qu'il y a deux fichiers dans l'essentiel; faites défiler à mi-chemin pour les messages sans étoile.
la source
O2
Don'?t star
\^
Réponses:
Rétine , 50 octets,
71,8%72,15%J'ai essayé de jouer au regex sur la suggestion de @ MartinBüttner. Cela correspond à 704 messages suivis et à 739 messages non suivis.
Il
^.*( ... )
faut s’assurer qu’il y a toujours 0 ou 1 correspondance, car Retina affiche le nombre de correspondances par défaut. Vous pouvez marquer le programme sur les fichiers d’entrée en ajoutant le nombrem`
de caractères en mode multiligne, puis en exécutantet pareillement pour
unstarred.txt
.Analyse / explication
J'ai généré les extraits ci-dessus (et beaucoup d'autres) à l'aide d'un programme, puis j'ai sélectionné ceux que je voulais manuellement. Voici un aperçu de la raison pour laquelle les extraits ci-dessus fonctionnent:
C
: AllumettesPPCG
,@CᴏɴᴏʀO'Bʀɪᴇɴ
E
: Allumettes@ETHproductions
,@El'endiaStarman
;
: Comme les tests sont au format HTML, cela correspond<
et>
ಠ-ﭏ
: Correspond à une plage de caractères Unicode, en particulier pourಠ_ಠ
et@Doorknob冰
tar
: Correspond aux variations destar
,@El'endiaStarman
(encore) etgravatar
qui apparaît également dans les onebox postés par les nouveaux messages botsol
: Correspondrel="nofollow"
à beaucoup de liens et de oneboxl.x
: Allumettes@AlexA.
,@trichoplax
eo
: Principalement des matchespeople
, mais aussi trois cas pour@Geobits
a.u
: Correspond principalementgraduation
,status
,feature
etabuse
pin
: Correspondancesping
et mots se terminant parping
. Correspond également à quelques messages dans une discussion surpineapple
, à titre d'exemple de surajustement.nu
: Correspond à un mélange de mots, le plus commun étantnumber
o.f
: Allumettesgolf
,conf(irm|use)
"$
: Correspond à une citation double comme dernier caractère, par exemple@phase He means "Jenga."
Il
[
n'y a rien de spécial - il me reste un personnage, alors je me suis dit que je pourrais l'utiliser pour faire correspondre un cas de plus.la source
JavaScript ES6, 50 octets, 71,10%
Identifie correctement 670 vedettes et 752 non-vedettes.
Maintenant, à travers la barrière des 70%, et battre tout le monde sauf Retina!
Renvoie
true
si le message contient l'une de ces choses:D
,E
,R
ouv
;tar
(généralementstar
);a
etu
avec un caractère entre les deux;l
etx
avec un caractère entre (généralementalex
);eo
ouol
;C
, un point-virgule ou unಠ
.Voici quelques autres matchs fructueux qui ne semblent pas valoir la peine de se débarrasser des autres:
nf
nu
yp
n.m
Cela s'est rapproché de plus en plus de la réponse de Retina, mais j'ai trouvé la plupart des améliorations moi-même.
Testez - le dans la console d'une de ces pages: textes étoiles , textes sans étoile
Voici une version alternative.
/a/.test
est techniquement une fonction, mais ne répond pas à nos critères :Cela a donné 71,90% (697 étoiles, 741 étoiles).
J'ai effectué des analyses sur les listes pour voir quels groupes de regex correspondent aux messages les plus suivis et les moins non marqués. Les analyses peuvent être trouvées dans ce Gist . Jusqu'à présent, j'ai vérifié
aa
eta.a
correspond.a.u
est en baisse autour de 50 avec un score de 28, mais c'est le match le plus efficace de son format ...la source
/regexp/.test()
? Je pense qu'il est possible de faire pression dans quelques cas de plus avec cela.Pyth, 50 octets, 67,9%
Cela hache l'entrée dans l'un des 322 compartiments et choisit la valeur booléenne en fonction de ce compartiment.
Notation
la source
CJam, 45 octets, 65,55%
Ceci vérifie si le premier caractère est dans une liste spécifique ou si la somme de tous les points de code est supérieure à 8 672.
Notation
la source
fold
commande, avec la réponse réelle.Matlab / Octave, 17 octets 60,15%
Classifie correctement 490 messages comme étant en attente, 713 messages comme étant non stared
Version actuelle:
Je vérifie juste la longueur.
Ancienne version:
Pourrait être traduit dans une autre langue. Il vérifie simplement si le message contient les mots étoile ou non.
score: 59/911/52.5%
Résultats pour les cas de test utilisant ce code:
la source
CJam, 32 octets, score global de 0,5605 (56%).
Identifie correctement 428 messages suivis et 693 messages non suivis. Le score total est
(360+730)/2000=0.545
.Ne m'attendant pas à gagner, je vais voir comment ça se passe. Ci-dessus, le code d'un seul message, à exécuter avec plusieurs, utilisez cette version modifiée qui renvoie le nombre de messages suivis:
Testez-le avec STDIN comme texte brut de l'un ou l'autre fichier. Retourne vrai si le message contient "étoile" ou si
length + 1 mod 4 = 0
.la source
JavaScript ES6, 0,615 = 61,5%
342 correctement identifiés comme suivis, 888 correctement identifiés comme non suivis,
(342+888)/2000 = 0.615
Testez comme ceci sur ceci ou sur ceci :
Je pourrais encore vous, mon joli!
la source
Retina, 46 octets, 68,55
679 étoiles: 692 unstar
Basculé vers Retina pour obtenir plus de regex dans ... Pas encore fait.
la source
C # 6.0 (.NET Framework 4.6), 50 octets, 63,60%
Programme utilisé à des fins de test:
la source