Tâche:
Vous êtes un programmeur extraordinaire et un répondeur Stackoverflow, et vous décidez de répondre à chaque question avec une prime sur Stackoverflow. Vous êtes si bon que vous parvenez à obtenir toutes les primes dans toutes les questions. Pendant que vous attendez que le représentant afflue, vous écrivez un programme qui détecte le montant total de la représentation dans toutes ces primes.
Règles:
- Quand couru,
- Votre programme naviguera dans l'onglet présenté dans le débordement de pile.
- Il va gratter la valeur de chaque prime,
- Ensuite, il va ajouter et afficher le total
- Il doit télécharger des données de n'importe où sur le SO (et seulement le SO), mais je recommanderais d'utiliser https://stackoverflow.com/questions?pagesize=50&sort=featured , car il ne s'agit que d'une dizaine de pages.
- C'est le code-golf , donc le code le plus court gagne
Réponses:
JavaScript -
176133130108106Edit 1: a coupé certains sélecteurs et utilisé la
?:
suggestion du compilateur de fermeture de Google (via @Sirko - merci)Edit 2: initialise
s
dedansd
et initialiset
comme0
au lieu de""
Edit 3: réalisé que je n'ai pas réellement besoin de cibler un conteneur spécifique et que je peux balayer tout le document, ce qui supprime un tas d'
.find
appels et un sélecteur inutile (plus la variable le conservant)Edit 4: placez l’
t
initialiseur dans l’appel de la fonction pour éviter un;
(de toute façon, il sera hissé au sommet) et réduisez la fonction à une instruction (combinez deux instructions en une seule dans la condition d’instruction ternaire) pour supprimer{}
Remarque : Je ne suis pas sûr que ce soit une triche, mais cela doit être exécuté à partir de la fenêtre de la console d'un navigateur pointant déjà sur
http://stackoverflow.com/questions?page=1&sort=featured
. Il repose sur le fait que jQuery et les liens de pagination appropriés sont disponibles sur la page elle-même. En outre, cela ne semble fonctionner que dans Firefox et non dans IE ou Chrome.Sortie (au moment de la publication):
Explodé / commenté :
la source
s=" #mainbar";d=$(s);t="";function a(){d.find(".bounty-indicator").each(function(){t+=this.innerHTML});(u=d.find("[rel=next]")[0])?d.load(u.href+s,a):alert(eval(t))}a();
169 - Compilateur Google Closure utilisé.(
paren, ça marche vraiment?Python -
232,231,195,183,176, 174Analyse le code HTML de https://stackoverflow.com/questions?sort=featured à l' aide d'expressions régulières.
La limite supérieure de
range
dans lafor
boucle doit êtrenumber of pages + 1
sinon le code va augmenter àHTTPError
cause de 404s. Le nombre de résultats par page par défaut est de 15, ce que le code utilise (omettre?pagesize=50
les caractères enregistre et est tout aussi efficace).Merci à @Gabe pour son conseil sur la réduction encore plus du nombre de caractères.
Golfé :
Sortie (au moment de la publication):
Non-golfé :
Voici une version quelque peu dépourvue de golf qui devrait être un peu plus facile à lire et à comprendre.
la source
for
boucle explicite et la réduire à 176:import urllib,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",urllib.urlopen("http://stackoverflow.com/questions?sort=featured&page=%u"%i).read())))for i in range(1,33))
+
suivi d'un nombre. Par exemple, un titre de question pourrait correspondre à ce format.Rebol -
164133130 (139 avec 404 chèque)Analyse le code HTML en utilisant le
parse
sous-langage de Rebol. Vérifie les 98 premières pages. J'ai réalisé que j'avais la même contrainte que la solution python: trop de répétitions ont touché des erreurs 404 et interrompu l'exécution. Merci à @rgchris pour de nombreuses améliorations! Mise à jour pour vérifier jusqu'à 98 pages.s: 0 repeat n 99[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
Avec erreur de vérification pour 404s (139):
s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s
Tester
Explication
Rebol ignore les espaces, par conséquent, vous pouvez le mettre sur une seule ligne si vous le souhaitez. PARSE prend deux entrées et le premier argument (
read join ...
) est assez explicite. Mais voici quelques commentaires sur les instructions de dialecte parse, dans une indentation plus traditionnelle:la source
n
valeur supérieure pour la boucle . Il existe actuellement 28 pages de primes (pour le format 15). Cela n'aura pas d'impact sur votre nombre d'ombles.Ruby, 260
Utilise l'API Stack Exchange.
Sortie (au moment de la publication d'origine):
Je ne compte pas le nombre
&pagesize=100
de caractères, car cela fonctionne sans cela, mais je l'ai simplement ajouté pour des raisons de commodité lors des tests. Si vous supprimez cela, il fait la même chose (sauf qu'il mange plus de quota et prend un peu plus longtemps).la source
require
s peut être remplacé par le-r
drapeau de ligne de commande.Rebmu -
108107Test (à 19h05 AEST)
Rebmu semble plutôt cryptique, mais il est assez lisible une fois que vous avez compris le principe. Commençons par la dissiper et l’établir correctement.
Rebmu est un dialecte de Rebol afin que vous puissiez voir les similitudes dans la solution. Rebmu ne peut pas encore réduire la taille de chaque énoncé, mais c'est un langage en évolution. Merci encore à @rgchris pour les améliorations apportées à ma première tentative.
la source
ti
(à entier!) serait plus sûr quedo
dans Rebmu sans changer la longueur du code.Ruby - 197
Version courte:
Version humaine:
Et répond -
39700
Ruby avec paramètres de script - 139
Pour exécuter ceci à partir de bash, tapez simplement
la source
require
s peut être remplacé par le-r
drapeau de ligne de commande.PHP - 121 octets
Utiliser un modificateur regex 'eval', pour éviter d’utiliser
array_sum
ou similaire. Semble être la solution la plus courte parmi les entrées valides.la source
e
modificateur est déconseillé depuis PHP 5.5, mais il reste néanmoins utile pour le golf.PHP,
134,131, 127while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;
Va parcourir toutes les pages,
pagesize
n'est pas configuré pour enregistrer des octets, donc plusGET
s.Très très sale, mais ... profitant des
PHP
"défauts"!echo
while
s'arrête à la missionRegEx
remplacement est une chaîne commençant par le montant de la primearray_sum()
ajoute des cordes$n
et$s
sont initialisés, mais à partir de rien est équivalent. à partir de zérola source
Bash 206
optimisations possibles, trop paresseux
résultat:
la source
seq 1 11
peut être réduit àseq 11
.Javascript -
129119110107 caractèresEDIT: RÉPONSE INVALIDE! Cela ne traite que les "questions les plus regardées", qui n'en ont qu'une fraction. La réponse d'Alconja est plus valable.
Exécutez-le sur https://stackoverflow.com/?tab=featured dans une fenêtre de console. Basé sur la solution d'Alconja.
Golfé un peu plus en supprimant les espaces blancs inutiles.
Utilisé eval pour supprimer l'appel de fonction, en effaçant 9 autres caractères.
débarrassé de certains espaces inutiles.
la source
Java, 540 caractères
Attention: le nombre de primes actives est de ~ 470. Ce code accédera à une page sur stackoverflow autant de fois. Vous pourriez avoir des problèmes avec eux pour faire autant de demandes de données.
Ma sortie était
23400
, mais quand j'ai lancé le code de @ TonyH, je l'ai eu37550
. Mauvaises nouvelles.Joli code:
La façon dont cela fonctionne est simple. Il lit à partir de l'URL
http://stackoverflow.com/questions"
pour déterminer le nombre de questions comportant des primes (remarque: si le nombre augmente, le programme échoue, mais s'il tombe, il fonctionne correctement). Il recherche ce numéro en utilisant l'expression rationnelle:b.>(\\d+)
. Cela a fonctionné dans tous les tests à ce jour, mais si quelqu'un posait une question qui correspond à cette expression régulière, cela pourrait ne pas fonctionner.Ensuite, nous ouvrons l’URL
http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+current question #
. En d'autres termes, nous ouvrons une nouvelle page pour chaque question sélectionnée et forçons le nombre de questions à être uniquement1
, nous les aurons toutes. La partie réputation correspondra toujoursion.>.(\\d+)
, alors je l'utilise pour la trouver. Je divisai l'opération en deux parties afin de pouvoir vérifier à moindre coût si le nombre de questions était réduit (c'est-à-dire que la chaîne renvoyée n'était pas un entier).Ensuite, nous résumons toute la réputation et l’imprimons.
Cela a pris environ 3 minutes et 20 secondes pour fonctionner sur ma machine.
Est-ce que quelqu'un sait pourquoi il n'imprime pas le bon nombre?
la source
C # - 407
Utilisation de Stackoverflow.com. Comme ci-dessous, sauf qu'il n'y a pas de décompression Gzip et une expression rationnelle différente.
Tester
Bizarrement, obtenir une valeur différente de celle indiquée ci-dessous.
C # - 496
Cela utilise api.stackexchange qui est gzippé et json.
Non minée:
Tester
Taille de page par défaut:
Pagesize = 100:
la source
jQuery 191
Cela fonctionne à partir de n’importe où dans stackexchange (et dans beaucoup d’autres sites), inutile d’être dans une page spécifique comme dans les réponses @ Alconja / @ NateKerkhofs
la source
$
PHP - 139
Golfé:
Ungolfed - 147
Simple
file_get_contents
/preg_match
/array_sum
Tester:
la source
Bash 174
Basé sur https://codegolf.stackexchange.com/a/25180/7664 :
la source
pagesize=50&
et simplement boucler davantage (je pense que la taille de page par défaut est de 15).Python (174 caractères):
Développer la réponse python ci-dessus (ne pas avoir assez de karma pour commenter):
Les demandes à la place d'urllib réduisent 2 caractères.
la source
Ruby (176 caractères):
En suivant l'exemple de Tony H. d'utiliser des numéros de page codés en dur, voici ce que j'ai obtenu:
m'a donné 35300 au moment de l'écriture.
la source