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

Miscellaneous programs and scripts, opensource or not, and sometimes, random mathematical stuff.
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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.
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Kafou
Poulidor Gnomonique
Posts: 1526
Joined: Sun Aug 19, 2007 7:17 pm
Location: dans son labo
Contact:

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

Post 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
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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à :)
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post by Gamall »

Importé la vraie liste d'utilisateurs

Les noms sont maintenant insensibles à la casse.
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post by Gamall »

Et l'exécutable windows
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post by Gamall »

changement de catégories;

correction d'un "cheat" potentiel :P
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post by Gamall »

Version finale (je l'espère)

exécutables linux et windows; + sources
Wiwidor.tar.gz
(306.14 KiB) Downloaded 1197 times
wiwidor.exe.gz
(138.75 KiB) Downloaded 1213 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
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post by Gamall »

Divers machins ajoutés à la demande de Kafou (stats + flag -hide-details)
Attachments
wiwidor.ml
v7
(12.29 KiB) Downloaded 1062 times
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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
Attachments
wiwidor.ml
v9
(12.47 KiB) Downloaded 1098 times
Last edited by Gamall on Fri Jan 09, 2009 4:13 am, edited 1 time in total.
Reason: corrigé bug idiot et évident
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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 ;)
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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)
Attachments
wiwidor.ml
v pi/2
(12.88 KiB) Downloaded 1078 times
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Kafou
Poulidor Gnomonique
Posts: 1526
Joined: Sun Aug 19, 2007 7:17 pm
Location: dans son labo
Contact:

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

Post 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
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post by Gamall »

Je viens de voir à l'instant. :banghead
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Gamall
Hic sunt dracones
Posts: 4174
Joined: Fri May 26, 2006 11:09 pm
Contact:

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

Post 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 :?
{<§ Gamall Wednesday Ida §>}
{ Mods and Programs - Mods TES-IV Oblivion }
Post Reply

Who is online

Users browsing this forum: Google [Bot] and 255 guests