Comme beaucoup de geeks peuvent connaître la plupart des pages (95% je pense) sur wikipedia, elles mènent finalement à une philosophie comme celle-ci:
Cliquez sur le premier lien non italique ou entre parenthèses qui renvoie à un autre article normal: (c'est-à-dire pas Fichier: ou Spécial:, mais des choses comme Wikipedia: sont OK) et répétez sur celui-ci jusqu'à ce que vous atteigniez la philosophie.
Le script doit:
- Prendre une première page en entrée
- Imprimez le nom de chaque article auquel il parvient
- Et imprimez le nombre d'articles qu'il a fallu pour arriver à la philosophie, et s'il ne l'a pas dit.
Vous commencez avec 1000 points, et perdez un pour chaque personnage du code, des points bonus pour:
Détection d'articles en boucle et arrêt: +50
Détecter les articles en boucle et demander si l'utilisateur doit aller au lien suivant sur l'article: +170
Autoriser une valeur par défaut sur l'ancien contrôle comme argument de ligne de commande ou similaire: +140
Le score le plus élevé l'emporte.
la source
Réponses:
Rubis, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 caractères =697701713797928931Je suis sûr qu'il y a de nombreuses améliorations à apporter.
(Cela nécessite Nokogiri)
Exemple d'exécution:
Échantillon un où je devais aller à un lien différent
Astuces que j'ai utilisées:
p a
pour obtenir uniquement des liens non italiques, car tous les liens dans l'article réel qui ne sont pas en italique sont toujours dans les éléments de paragraphe de Wikipedia.la source
"BASH " - (Si vous ne vous trompez pas: 1000 - 397 + 170 + 140 = 913 points)"BASH" - (Si vous ne vous trompez pas: 1000 - 386 + 170 + 140 = 924 points)"BASH" - (Si vous ne vous trompez pas: 1000 - 381 + 170 + 140 = 929 points)
BASH est délibérément entre guillemets car il s'agit d'un mélange d'outils utilisés dans les shells * nix mais enveloppés dans un script bash.
Modifier 1:
http://
parcurl
défaut.href=
correspondance des ancres avecf=
as<a>
n'a pas d'autres attributs normaux se terminant parf
. (C'est une possibilité de balises personnalisées. Je n'en ai pas vu jusqu'à présent.)!Phil
lieu deNoPhil
. Celui - ci est un peu bizarre comme on pourrait dire aussi , par exemple!
,0
,N
,!P
ou similaire.-s
oncurl
pourrait être supprimé pour réduire de trois octets supplémentaires, mais cela produirait une sortie désordonnée. Je ne sais pas si c'est un problème.En utilisant des excentricités, le code se retrouverait à 379 octets, 931 points.
Je pourrais également implémenter @plannapus l' utilisation de la boîte de navigation correspondante (espérons-le) en
(p|ul).*?<(\1)
ajoutant six octets (en soustrayant six points).Modifier 2:
Permet
${#c[@]}
d'imprimer les degrés de séparation au lieu du$i
compteur.En utilisant des excentricités, le code se retrouverait à 374 octets, 936 points.
J'invoque Cthulhu et opte pour une solution regexp + bash / shell / * nix.
Volé:
<p>
astuce de @Doorknob of Snow .Mis en œuvre:
Exigences:
bash
v.?grep
avec prise en charge-P
(PCRE).sed
curl
cut
Usage:
Code en ligne. Copiez dans un fichier.
chmod +x filename
. Géré par le./script /wiki/…
shell bash.Code développé et expliqué:
la source
JavaScript 726 (444 caractères [556] + 170)
Maintenant, j'apprécie que cela ne soit peut-être pas valide en tant que bookmarklet, mais j'ai quand même aimé le bricoler.
Utilisation: accédez à la page à partir de laquelle vous souhaitez démarrer et exécutez les éléments suivants dans la console:
Pour JavaScript, la sortie est la suivante:
Cette solution supposera que vous souhaitez passer au lien suivant sur une boucle en cours de détection, mais si vous modifiez le
true
à la fin,false
une boîte de confirmation apparaîtra à la place (assez ennuyeux ...) vous ne savez pas si cela remplit les conditions requises pour le bonus secondaire ou non. Je suppose que non.Dentelé:
J'ai donc manqué à l'origine la partie sur l'ignorance des éléments dans les parens, ajoutant que cela le rendait beaucoup plus verbeux, donc j'espère jouer au bas de cette fonction de filtrage (ou, espérons-le, la remplacer entièrement).
Fonctionne à la fois dans Chrome et Firefox (testé dans Firefox 26)
la source
C # - 813 caractères
Score: 1000-813 + 50 + 170 + 140 = 547 :(
Pas de bibliothèques externes. Détection de boucle .
Le premier argument est l'article source, le deuxième est l'article cible.
Version golfée:
Version intelligible:
Exemple d'exécution, de "Sky" à "Philosophy":
la source
Scala (294 caractères => 1000-294 + 140 = 846 points)
La solution mise à jour qui prend automatiquement le lien suivant si celui-ci a déjà été consommé. Merci pour les 140 points bonus.
Logique: récupérez le premier lien "/ wiki" qui ne contient pas de ":" (il ignore donc les liens "Fichier:"). Rincer et répéter avec récursivité en retournant le compte + 1 à chaque fois. Je garde une liste de toutes les sorties précédentes à portée de main afin que le programme ne passe pas dans une boucle infinie.
Expression régulière: J'ai 2 formes d'expression régulière.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
qui trouve des liens dans les<p>
balises"p>.*?/wiki/([^:]*?)\""
qui est une balise légèrement plus expérimentale qui a fait ses preuves mais qui donne des résultats différents car elle récupère parfois des liens dans la barre d'informations de droite. Ce sont des articles réguliers donc je pense qu'il est toujours valable. S'il est décidé de ne pas l'être, l'OP (ou quelqu'un d'autre) peut me laisser un commentaire et je peux mettre à jour ma solution pour un meilleur reg-ex.Je vais utiliser la deuxième expression régulière jusqu'à ce que je trouve un cas de test où cela ne fonctionne pas ou que l'OP mentionne que la récupération de liens dans la barre latérale n'est pas autorisée (à mon avis, les barres d'informations font toujours partie de l'article lui-même; plutôt un résumé).
Source minifiée:
Source lisible:
Exemple de sortie:
Contribution
Sortie
la source
args(0)
pour obtenir le premier argument, se débarrasser de vosobject
etmain
définitions, et je pense que vous pouvez supprimer le:Int
trop. pastebin.com/YqywKcG8: Int
. Je ne savais pas que vous faisiez un appel récursif. De plus, mon pastebin a été tiré de votre ancienne source lisible, mais les mêmes concepts s'appliquent.:Int
là. Plus tard dans la journée, j'ajouterai également une forme lisible de la solution 333 car j'ai. Merci pour les suggestions @KChalouxobject Q extends App { ... }
est totalement inutile si vous exécutez le code avec l'interpréteur plutôt que de le compiler avec scalac. Il suffit de courir avecscala <filename> [args..]
R, 379 caractères; 1000-379 + 170 = 791 points
Version demandant aux utilisateurs comment procéder lors de la détection d'une boucle
Avec indentations et commentaires:
Exemple d'exécution:
R, 325 caractères; ??? points
Version qui, par défaut, prend le premier lien non redondant (c'est-à-dire sans boucle).
la source