Page 1 of 2

Wiwis d'Or: (dépouillement et stats auto)

Posted: Wed Jul 16, 2008 5:25 pm
by Gamall
Ce programme automatise autant que faire se peut le premier tour de la célèbre cérémonie des Wiwis d'Or. (Enfin, ça automatise le dépouillement pour les coloriés: faut quand même que les gens votent, hein :langue )

VERSION OBSOLETE! VOIR DERNIER POST
Wiwidor.zip
(edit 27/09/2008: Windows EXE:
wiwidor.exe.tar.gz
)

Mode d'emploi:
[plus totalement à jour; la syntaxe a été considérablement assouplie]
Spoiler: Reveal
Pour les Wiwilandais:

Contrairement à un dépouilleur humain, le système est très bête et n'a pas le sens de l'humour. Les bulletins doivent donc être remplis très sérieusement, et les noms des personnes pour lesquelles vous votez doivent être orthographiés exactement. Si les noms sont compliqués, faire un copier-coller n'est pas une mauvaise idée.

Les bulletins sont présentés selon un format simple, que le programme peut lire facilement: pour commencer, il faut préciser votre nom, en l'écrivant à la ligne directement en dessous de l'entête "VOTEUR". Par exemple, pour moi

Code: Select all

*VOTEUR
  Gamall
(Note: les espace avant ou après un nom sont ignorés. Les espaces au milieu d'un nom comptent.)

Après cela, il ne reste plus qu'à voter. Chaque catégorie se présente sous cette forme:

Code: Select all

+identifiant_de_catégorie
  Nom1
  Nom2
  Nom3
(éventuellement des lignes blanches)
+autre_catégorie
  etc...
Si vous voulez voter blanc (part), laissez une ligne blanche à la place d'un des noms. Attention:

Code: Select all

+identifiant_de_catégorie
  Tartempion

+autre_catégorie

est incorrect: ce sera interprété comme un vote pour "Tartempion", un vote blanc, et un vote pour un gars appelé "+autre_catégorie", inconnu au bataillon. Cette erreur obligerait la personne en charge des votes à corriger manuellement votre bulletin. Pas bien.

Un bulletin prêt à l'emploi est normalement fourni par le colorié en charge des votes.

Pour le colorié en charge des votes

-> créer un bulletin vierge: pour creer vers un fichier appelé "bulletin":

Code: Select all

$ ./wiwidor -generate-ballot bulletin

** Ze Wiwi d'Or
** by Gamall Wednesday Ida
** email : gamall.ida@gmail.com
** web   : gamall-ida.com

Generating white ballot 'bulletin'...
Ballot generated successfully.
Si le fichier existe il est écrasé...

Normalement vous obtenez ce fichier:

Code: Select all

# Les Wiwis d'Or: Premier tour


*VOTEUR
  Votre pseudo Wiwiland
  

+annee





+sadique





+drole





+cool





+raleur





+flooder





+serviable





+plume





+rpiste





+journaliste





+fou





+sage





+bel_avatar





+moche_avatar





+signature





+dessinateur







* THE END
-> stocker les bulletins: un bulletin est un fichier texte. Tous les bulletins correspondant à la même session des Wiwis d'Or doivent être stockés dans le même dossier (défaut: le dossier "votes", dans le répertoire courant.). Assurez-vous qu'il n'y a aucun autre fichier dans ce dossier.

-> Vérifier les noms: pour que le programme puisse déterminer si "Tartempion" existe réellement, il lui faut la liste des utilisateurs du forum, présentée dans un fichier texte contenant un nom par ligne, et rien d'autre. (défaut: users.list).

-> Dépouiller: pour dépouiller, si les votes et la liste des utilisateurs sont aux emplacements par défaut, il suffit de lancer le programme sans options: exemple sur quelques votes de test

Code: Select all

$ ./wiwidor

** Ze Wiwi d'Or
** by Gamall Wednesday Ida
** email : gamall.ida@gmail.com
** web   : gamall-ida.com

Building usernames table... 5 names recorded.
Loading vote files... < kafou > < bulletin > < gamall >


Main results :


Voters: Gamall, isa, Kafou


Ze Wiwilandais de l'ann�e

  2   Gamall
  1   isa
  1   Isa
  1   Kafou

Wiwi d'Or du plus sadique

  3   Gamall

Wiwi d'Or du plus dr�le

  1   Kafou

Wiwi d'Or du plus cool

  1   Gamall
  1   Kafou

Wiwi d'Or du plus r�leur

  2   Gamall
  1   ida
  1   Kafou

Wiwi d'Or du plus floodeur

  1   Kafou

Wiwi d'Or du plus serviable

  1   ida
Les résultats sont affichés par catégories, et triés par nombre de voix, puis par ordre alphabétique pour les ex aequos. La liste des voteurs est triée par ordre alphabétique.

-> Changer les défauts: pour plus d'infos, voir

Code: Select all

$ ./wiwidor --help
Ze Wiwi d'Or HELP

wiwidor [-votes-dir <votes>] [-users-list <users.list>]

-> Make stats using votes in directory <votes>, validating
   usernames against file <users.list>.

wiwidor -generate-ballot <path>

-> Generate a white, ready-to-use ballot.

wiwidor --help

-> Display this help page.

-> Infos sur le dépouillement:

Les votes multiples pour une même personne dans une même catégorie ne sont pris en compte qu'une seule fois.

Code: Select all

+cat
Gamall
Gamall
Gamall
équivaut à un vote pour Gamall et deux votes blancs. Ceci n'est pas considéré comme une erreur.

Une personne peut voter pour elle-même.

Une personne ne peut utiliser qu'un seul bulletin. Un double bulletin provoque une erreur et interrompt le dépouillement.

Une personne (voteurs et candidats) doit avoir un nom d'utilisateur valide (ie. dans la liste). Un nom invalide provoque une erreur.
-> Autres infos:

Les sources sont fournies sous la GPL. (OCaml. J'utilise v. 3.09.2)

Les sources sont documentées: voir le dossier ./doc

L'exécutable fourni est compilé sur un Linux (K)ubuntu 7.10. Si ça ne vous va pas, il faut soit compiler vous-même, soit me demander.

La complexité asymptotique du dépouillement est en O(n*log n), où n est le nombre de votes.

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Wed Jul 16, 2008 6:16 pm
by Kafou
Gamall wrote:Commencé cette nuit, pour cause d'insomnie.

Sera probablement terminé la prochaine fois que j'aurai des troubles du sommeil :haha
ROFL :love

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Thu Jul 17, 2008 8:50 pm
by Gamall
Gamall wrote:Commencé cette nuit, pour cause d'insomnie.

Sera probablement terminé la prochaine fois que j'aurai des troubles du sommeil :haha
Bon ben voilà, la prochaine fois est arrivée :hum Je ne peux pas m'endormir avant 6h du matin, il semble...

Il reste à écrire un petit mode d'emploi. :zzz

edit: et voilà :)

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Tue Jan 06, 2009 4:39 pm
by Gamall
Mise à jour:

La syntaxe d'entrée est maintenant beacoup plus flexible:

Code: Select all

+  cat

X

Y

Z

+         cat
+othercat
sont maintenant valides;

*THE END est maintenant un commentaire : #THE END

Ajout d'une fonction permettant de détecter les gens votant pour eux-mêmes: exemple de sortie

Code: Select all

Building usernames table... 5 names recorded.
Loading vote files... < kafou > < bulletin > < gamall >
The following people have voted for themselves:

              Gamall  <--->  sadique
              Gamall  <--->  raleur
                 isa  <--->  sage
Et voilà :)
Wiwidor.tar.gz
edit: corrigé typo, ajouté exécutable windows

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Wed Jan 07, 2009 12:31 am
by Gamall
Importé la vraie liste d'utilisateurs

Les noms sont maintenant insensibles à la casse.

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Wed Jan 07, 2009 1:05 am
by Gamall
Et l'exécutable windows

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Wed Jan 07, 2009 4:04 am
by Gamall
changement de catégories;

correction d'un "cheat" potentiel :P

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Wed Jan 07, 2009 8:06 pm
by Gamall
Version finale (je l'espère)

exécutables linux et windows; + sources
Wiwidor.tar.gz
(306.14 KiB) Downloaded 632 times
wiwidor.exe.gz
(138.75 KiB) Downloaded 656 times
edit: on me fait remarquer dans les coulisses du trombone que j'aurais pu nettoyer les fichiers temporaires autour des sources si je n'avais pas été une grosse feignasse.

Je réponds fi!; voilà :langue

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 3:29 am
by Gamall
Divers machins ajoutés à la demande de Kafou (stats + flag -hide-details)

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 3:56 am
by Gamall
Maj. -hide-details n'affiche que les 3 premiers nominés.

Cas particuliers: ne pas afficher noms ayant moins de 1 vote ; en cas d'ex-aequo, on peut afficher plus de trois noms (autant de noms qu'il faut pour avoir trois scores distincts, s'il y en a assez)

[sauf erreur de ma part, je n'ai pas de jeu de test pour vérifier]

le code concerné est

Code: Select all

if not !hide_details then
    let f = function name, count -> pf "%3s   %s\n" (soi count) name 
    in List.iter f res; pnl ()
  else
    let rec disp n last = function
      | (name, num) :: l ->
        if n > 0 && num > 1 then begin
          pf "  %s\n" name; 
          disp (if num <> last then succ n else n) num l 
        end
      | [] -> ()
    in disp 3 0 res

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 6:16 am
by Gamall
Tiens, je relis le machin, et je me rends compte que
if num <> last then succ n else n
ne risque pas de marcher... remplacer succ par pred ;)

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 4:21 pm
by Gamall
Hop;

corrections:

- -hide-details dans le --help
- retour chariot après le dernier nom de chaque catégorie dans la version hide-details
- liste des "votees" avec le nombre de votes classée par ordre du nombre de votes (puis par ordre alphabétique à nb de votes égal, bien sûr)

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 4:25 pm
by Kafou
Gamall wrote:Hop;

corrections:
- retour chariot après le dernier nom de chaque catégorie dans la version hide-details
Hihi maintenant c'est dans la version "normale" qu'il manque le retour :green

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 4:28 pm
by Gamall
Je viens de voir à l'instant. :banghead

Re: Wiwis d'Or: (dépouillement et stats auto)

Posted: Fri Jan 09, 2009 4:30 pm
by Gamall
patch: un begin end autour du else

Code: Select all

else begin
    let rec disp n last = function
      | (name, num) :: l ->
        if n > 0 && num > 1 then begin
          pf "  %s\n" name; 
          disp (if num <> last then pred n else n) num l 
        end
      | [] -> pnl ()
    in disp 3 0 res; 
  end; pnl ()
je vois pas pourquoi mais bon :?