Quelle est la prime sur Stackoverflow?

33

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 , donc le code le plus court gagne
Le docteur
la source
2
stackoverflow.com/?tab=featured . Toutes les questions en vedette sur 1 page.
Nzall
7
@NateKerkhofs, ce n'est pas tous. Faites défiler vers le bas. par exemple, lorsque je viens de le charger, il montrait 96 des 472 questions.
Bazzargh
Bounty API
half Half
@justhalf déjà été discuté ...
TheDoctor

Réponses:

23

JavaScript - 176 133 130 108 106

function f()(t+=$("[title~=an]").text(),u=$("[rel*=x]")[0])?$("html").load(u.href,f):alert(eval(t));f(t=0)

Edit 1: a coupé certains sélecteurs et utilisé la ?:suggestion du compilateur de fermeture de Google (via @Sirko - merci)

Edit 2: initialise sdedans det initialise tcomme 0au 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' .findappels et un sélecteur inutile (plus la variable le conservant)

Edit 4: placez l’ tinitialiseur 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):

38150 (in an alert dialog)

Explodé / commenté :

function f()
    //concat all the bounty labels to t (they take the format "+50")
    //happens to be elements with title attribute containing word 'an'
    (t+=$("[title~=an]").text(),
    //find the "next" (has rel=next attribute) button
    u = $("[rel*=x]")[0])       
        ?
        //if there is a next button, load it, and then recurse f again
        $("html").load(u.href,f)
        :
        //else eval the 0+a+b+...+z tally and alert the result
        alert(eval(t))
//kick off the initial scrape (and simultaneously init the total tally)
f(t=0)
Alconja
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é.
Sirko
8
Choix sournois de langue et de contexte pour contourner beaucoup des caractères requis! (Comme " stackoverflow.com/" ) J'aime ça!
AlexC
Je pense que vous devriez mentionner que cela est fait en utilisant le plugin jQuery. que je pense que ça devrait être .. :)
Mr_Green
Chrome génère une erreur de syntaxe. Ouvrir un corps de fonction avec un (paren, ça marche vraiment?
jeudi
@Mr_Green - J'ai déjà noté cela, mais je me suis engagé à attirer davantage l'attention ...
Alconja le
21

Python - 232, 231, 195, 183, 176, 174

Analyse le code HTML de https://stackoverflow.com/questions?sort=featured à l' aide d'expressions régulières.

La limite supérieure de rangedans la forboucle doit être number of pages + 1sinon le code va augmenter à HTTPErrorcause de 404s. Le nombre de résultats par page par défaut est de 15, ce que le code utilise (omettre ?pagesize=50les 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é :

import requests,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",requests.get("https://stackoverflow.com/questions?sort=featured&page=%u"%i).text)))for i in range(1,33))

Sortie (au moment de la publication):

37700

Non-golfé :

Voici une version quelque peu dépourvue de golf qui devrait être un peu plus facile à lire et à comprendre.

import requests, re

print sum(
          sum(
              map( int,
                   re.findall( r"<.*>\+(\d+)<.*>",
                               requests.get( "https://stackoverflow.com/questions?sort=featured&page=%u" % i).text
                   )
              )
          ) for i in range( 1, 33 )
      )
Tony Ellis
la source
1
Vous pouvez vous débarrasser de la forboucle 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))
Gabe
avoir une limite supérieure codée en dur rend le test un peu difficile
Einacio
2
oh
mon
6
@ Richard Oui, mais c'est du code golf , donc la brièveté l'emporte sur le fait de savoir si c'est une "bonne idée". Je veux dire, dans la vraie vie, ce n'est également pas une bonne idée d'écrire des one-liners épouvantables sans espace blanc ...
Tim Goodman
3
@Richard L'analyse du code HTML et l'extraction du code HTML sont des tâches assez différentes. Puisqu'un site Web n'est pas une API stable, rien n'est garanti pour ce type d'extraction. Bien que le code de Tony soit un peu sursauté, il échouera s'il existe une balise contenant un +suivi d'un nombre. Par exemple, un titre de question pourrait correspondre à ce format.
CodesInChaos
18

Rebol - 164 133 130 (139 avec 404 chèque)

Analyse le code HTML en utilisant le parsesous-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

>> s: 0 repeat n 20[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
== 23600

>> 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
Script: none Version: none Date: none
== 36050

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:

s: 0
repeat n 99 [
    parse read join http://stackoverflow.com/questions?sort=featured&page= n [
        ;-- match the enclosed pattern 15 times (the rule will fail politely when there are less entries)
        15 [
            ;-- seek the match position up THRU (and including) the string >+
            thru {>+}
            ;-- copy contents at the current position up TO (but not including) <
            copy x to {<}
            ;-- (Basically, run some non-dialected Rebol if this match point is reached) the do is a bit dangerous as it runs the string as code
            (s: s + do x)
        ]
    ]
]
;-- evaluator returns last value, we want the value in S
;-- (not the result of PARSE, that's a boolean on whether the end of input was reached)
s
johnk
la source
Bien ... J'ai ajouté une version formatée oridinary avec quelques commentaires, j'espère que ça ne vous dérange pas! C’est toujours un plaisir de voir à quel point Rebol soulève tant de problèmes liés à cette alphabétisation (le tout dans un exécutable multi-plateformes concédé sous licence Apache multi-plateformes, mais qui rend les choses comme REFORM comme une plaie de pouce. à ce mot-là et aller "Repousser et former être transformé en REFORME" est simplement moche . Obsédée, c'est très Hawthorne . Oh, et vous pourriez changer QUELQUE QUEL et raser un omble! :-)
Dr. Rebmu
Oups, devrait être 133.
rgchris
Remarque: vous devez utiliser une nvaleur 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.
Alconja
Merci Alconja. Facile d’accéder à 98 pages avant d’ajouter d’autres caractères à la solution. Je devrai refaire le test de chez moi ce soir
johnk
11

Ruby, 260

require'open-uri'
require'zlib'
i=b=0
d=''
until /"has_more":f/=~d
i+=1
d=Zlib::GzipReader.new(open("http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow&page=#{i}&pagesize=100")).read
b+=d.scan(/"bounty_amount":(\d+)/).map{|x|x[0].to_i}.reduce :+
end
p b

Utilise l'API Stack Exchange.

Sortie (au moment de la publication d'origine):

37200

Je ne compte pas le nombre &pagesize=100de 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).

Poignée de porte
la source
Bien, je ne l'ai eu que 275 en Python
Claudiu
mange plus de quota ??? Vous étiez censé utiliser SO et SO uniquement.
John Dvorak
@ JanDvorak ??? Je voulais dire quota d'API.
Poignée de porte
1
Le requires peut être remplacé par le -rdrapeau de ligne de commande.
Justin
8

Rebmu - 108 107

rtN99[parseRDrj[http://stackoverflow.com/questions?sort=featured&page=N][15[thru{>+}copyXto{<}(a+JdoX)]]]j

Test (à 19h05 AEST)

>> rebmu [rtN99[parseRDrj[http://stackoverflow.com/questions?sort=featured&page=N][15[thru{>+}copyXto{<}(a+JdoX)]]]j]
Script: none Version: none Date: none
== 79200

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.

rt n 99 [
    parse rd rj [
        http://stackoverflow.com/questions?sort=featured&page= n
    ][
        15 [
            thru {>+}
            copy x to {<}
            (a+ j do x)
        ]
    ]
]
j

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.

johnk
la source
ti(à entier!) serait plus sûr que dodans Rebmu sans changer la longueur du code.
Rgchris
6

Ruby - 197

Version courte:

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each{|p|Nokogiri::HTML(open("http://stackoverflow.com/questions?page=#{p}&sort=featured")).css('.bounty-indicator').each{|b|s+=b.content.to_i}}
p s

Version humaine:

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each do |p|
    Nokogiri::HTML(open("http://stackoverflow.com/questions?page=#{p}&sort=featured")).css('.bounty-indicator').each do |b|
        s += b.content.to_i
    end
end
puts s

Et répond - 39700

Ruby avec paramètres de script - 139

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each{|p|Nokogiri::HTML(open(ARGV[0]+p.to_s)).css(ARGV[1]).each{|b|s+=b.content.to_i}}
p s

Pour exécuter ceci à partir de bash, tapez simplement

ruby code_golf_stack_overflow2.rb http://stackoverflow.com/questions?sort=featured\&page= .bounty-indicator
cyriel
la source
Le requires peut être remplacé par le -rdrapeau de ligne de commande.
Justin
6

PHP - 121 octets

<?for(;preg_filter('/>\+(\d+)/e','$t+=\1',@file('http://stackoverflow.com/questions?sort=featured&page='.++$n)););echo$t;

Utiliser un modificateur regex 'eval', pour éviter d’utiliser array_sumou similaire. Semble être la solution la plus courte parmi les entrées valides.

primo
la source
4
le emodificateur est déconseillé depuis PHP 5.5, mais il reste néanmoins utile pour le golf.
Fabrício Matté
6

PHP, 134 , 131 , 127

while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;

Va parcourir toutes les pages, pagesizen'est pas configuré pour enregistrer des octets, donc plus GETs.

Très très sale, mais ... profitant des PHP"défauts"!

  • pas d'espace après echo
  • while s'arrête à la mission
  • la sortie après le RegExremplacement est une chaîne commençant par le montant de la prime
  • array_sum() ajoute des cordes
  • $net $ssont initialisés, mais à partir de rien est équivalent. à partir de zéro
  • etc...
CSᵠ
la source
5

Bash 206

optimisations possibles, trop paresseux

s=0;for i in `seq 1 11`;do for j in `wget -q -O - "http://stackoverflow.com/questions?pagesize=50&sort=featured&page=$i" | grep -o -E "bounty worth [0-9]*" | grep -o -E "[0-9]*"`;do s=$(($s+$j));done;done;echo $s

résultat:

39450
utilisateur19998
la source
4
Je peux me tromper, mais cela semble être très court avec quelques optimisations de qualité.
rickcnagy
seq 1 11peut être réduit à seq 11.
fedorqui
Vous devriez pouvoir vous débarrasser des espaces autour des tuyaux pour économiser quatre caractères, et ces deux greps peuvent certainement être fusionnés en un seul (voulez-vous dire "[0-9] +"?).
Desty
Aussi "grep -o -E" => "egrep -o".
Desty
Et vous pouvez changer: "egrep -o '[0-9] +'" => "cut -d '' -f3" :)
Desty le
5

Javascript - 129 119 110 107 caractères

EDIT: 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.

s="#mainbar";t="";eval("$(s).find('.bounty-indicator').each(function(){t+=this.innerHTML});alert(eval(t))")

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.

Nzall
la source
3

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.

import java.io.*;import java.net.*;public class B{public static void main(String[]A){String u="http://stackoverflow.com/questions",d;Long i,s=i=0L,n=i.parseLong(o(u).replaceAll("^.*b.>(\\d+).*$","$1"));while(i++<n){d=o(u+"?pagesize=1&sort=featured&page="+n).replaceAll("^.*ion.>.(\\d+).*$","$1");s+=d.matches(".*\\D.*")?0:n.parseLong(d);}System.out.print(s);}static String o(String s){String d="";try{BufferedReader r=new BufferedReader(new InputStreamReader(new URL(s).openStream()));while((s=r.readLine())!=null)d+=s;}finally{return d;}}}

Ma sortie était 23400, mais quand j'ai lancé le code de @ TonyH, je l'ai eu 37550. Mauvaises nouvelles.

Joli code:

import java.io.*;
import java.net.*;

public class StackOverflowBounty {

    public static void main(String[] args) {
        String u = "http://stackoverflow.com/questions", d;
        Long i, s = i = 0L, n = i.parseLong(o(u).replaceAll("^.*b.>(\\d+).*$", "$1"));
        while (i++ < n) {
            d = o(u + "?pagesize=1&sort=featured&page=" + n).replaceAll("^.*ion.>.(\\d+).*$", "$1");
            s += d.matches(".*\\D.*") ? 0 : n.parseLong(d);
        }
        System.out.print(s);
    }

    static String o(String s) {
        String d = "";
        try {
            BufferedReader r = new BufferedReader(new InputStreamReader(new URL(s).openStream()));
            while ((s = r.readLine()) != null) {
                d += s;
            }
        } finally {
            return d;
        }
    }
}

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 uniquement 1, nous les aurons toutes. La partie réputation correspondra toujours ion.>.(\\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?

Justin
la source
pagesize = 100 donne le grand nombre. Je pense que quelque chose de bizarre se passe parce que vous passez pageize = 1. Dans ma réponse, si je ne spécifiais pas 'pagesize', le résultat était proche de votre nombre.
Jzm
@ malik Ouais, j'ai réalisé que j'avais mal interprété votre commentaire, alors j'ai supprimé le mien :-). pagesize = 100 agit comme si pagesize = 50. Voulez-vous dire que vous avez exécuté mon code avec pagesize = 100?
Justin
2

C # - 407

class B{void Main(string[] a){var o=0;for(int i=1;i<11;i++){var r=((System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)))).GetResponse();if(r.ContentLength>0){using(var s=new StreamReader(r.GetResponseStream()))foreach(Match m in Regex.Matches(s.ReadToEnd(),"bounty worth (.+?) "))o+=int.Parse(m.Value.Substring(m.Value.IndexOf('h')+2));}}Console.Write(o);}}

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

> prog.exe http://stackoverflow.com/questions?pagesize=50&sort=featured
38150

Bizarrement, obtenir une valeur différente de celle indiquée ci-dessous.


C # - 496

Cela utilise api.stackexchange qui est gzippé et json.

using System.IO.Compression;class B{void Main(string[] a){var o=0;for(int i=1;i<11;i++){var r=((System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)))).GetResponse();if(r.ContentLength>0)using(var s=new StreamReader(new GZipStream(r.GetResponseStream(),CompressionMode.Decompress)))foreach(Match m in Regex.Matches(s.ReadToEnd(),@"bounty_amount"":(.+?),"))o+=int.Parse(m.Value.Substring(m.Value.IndexOf(':')+1).Replace(",",""));}Console.Write(o);}}

Non minée:

using System.IO.Compression;

class B
{
    void Main(string[] a)
    {
        var o = 0;
        for (int i=1; i<11; i++) {
            var w = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)));
            if(w.GetResponse().ContentLength > 0)
                using(var s = new StreamReader(new GZipStream(w.GetResponse().GetResponseStream(),CompressionMode.Decompress)))
                    foreach(Match m in Regex.Matches(s.ReadToEnd(), @"bounty_amount"":(.+?),"))
                        o += int.Parse(m.Value.Substring(m.Value.IndexOf(':')+1).Replace(",", ""));
        }
        Console.Write(o);
    }
}

Tester

Taille de page par défaut:

> prog.exe http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow
25300

Pagesize = 100:

> prog.exe "http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow&pagesize=100"
37400
jzm
la source
2

jQuery 191

i=0;function f(p){$.get('//api.stackexchange.com/2.2/questions/featured?site=stackoverflow&page='+p,function(d){for(x in d.items)i+=d.items[x].bounty_amount;d.has_more?f(p+1):alert(i)})};f(1)

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

Einacio
la source
jQuery est une bibliothèque, pas un langage. Je ne sais pas si c'est valide ou non ...
rickcnagy
@ br1ckb0t le prendre en javascript si vous le souhaitez. jQuery est déjà sur les sites stackexchange de toute façon, je venais juste d'être explicite sur le$
Einacio
Oui, cela a du sens! Beau code.
rickcnagy
2

PHP - 139

Golfé:

<?php
$a=file_get_contents('http://stackoverflow.com/?tab=featured');preg_match_all('/n">\+([0-9]+)<\/div>/',$a,$r);echo array_sum($r[1]);

Ungolfed - 147

Simple file_get_contents/ preg_match/array_sum

<?php
$a = file_get_contents('http://stackoverflow.com/?tab=featured');
preg_match_all('/n">\+([0-9]+)<\/div>/', $a, $r);
echo array_sum($r[1]);

Tester:

php run.php

10250

Aziz Saleh
la source
2

Bash 174

Basé sur https://codegolf.stackexchange.com/a/25180/7664 :

s=0;for i in {1..11};do for j in `wget -qO- "stackoverflow.com/questions?pagesize=50&sort=featured&page=$i"|cut -d' ' -f18|egrep '^[0-9]+$'`;do s=$(($s+$j));done;done;echo $s
thejh
la source
Vous pouvez vous en débarrasser pagesize=50&et simplement boucler davantage (je pense que la taille de page par défaut est de 15).
Alconja
@Alconja Hmm, oui, je pouvais donc ramener cela à 162 ... mais seulement avec l'inconvénient de générer davantage de demandes de spam sur le serveur.
jeudi
2

Python (174 caractères):

Développer la réponse python ci-dessus (ne pas avoir assez de karma pour commenter):

import requests,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",requests.get("http://stackoverflow.com/questions?sort=featured&page=%u"%i).text)))for i in range(1,33))

Les demandes à la place d'urllib réduisent 2 caractères.

utilisateur35581
la source
1

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:

require'open-uri';b=0;(1..29).each{|i|d=open("http://stackoverflow.com/questions?sort=featured&page=#{i}").read;b+=d.scan(/<.*>\+(\d+)<.*>/).map{|x|x[0].to_i}.reduce 0,:+};p b

m'a donné 35300 au moment de l'écriture.

photoionisé
la source