Logo de kxs.frCours d'informatique pour le lycée et la prépa

Machine de vote (truquée)

Prérequis

Introduction

Vous allez concevoir une machine de vote truquée. C'est à dire que c'est vous qui allez choisir le résultat du vote. Mais attention ! Il y aura un audit avant le vote pour vérifier que votre machine n'est pas truquée.

Ce projet a été inspiré par la vidéo ci-dessous (en anglais, mais les sous-titres français sont disponibles) :

Nous allons seulement effleurer l'ensemble des possibilités de fraude avec un système basé sur les machines à voter. Nous nous intéressons simplement au code de la machine.

Présentation

Situation

Nous sommes en 2036 et les législateurs ont autorisé le vote électronique pour toutes les élections. Vous êtes chargé de concevoir une machine de vote pour les élections présidentielles de 2037. Vous êtes quelqu'un d'honnête mais on vous a proposé 50 milions d'euros pour faire gagner un candidat, dur de résister ! Vous allez donc devoir créer une machine de vote truquée qui va faire gagner un candidat précis. Mais bien sur, la machine ne devra tricher que pour le véritable vote, pas pour les tests qui le précéderont.

Le paysage politique ayant changé dans les années 2030, voici la liste des candidats :

Vous devez faire gagner Norman.

La date de l'audit vous sera donnée par le professeur et la date de l'élection égalmement.

La machine

Nous n'avons pas de véritable machine physique à notre disposition, nous allons utiliser l'ordinateur et limiter son utilisation à quelques touches.

Vous dispposez donc des 9 touches de 1 à 9 du pavé numérique, de la touche « entrée » et de la touche « m » accessible seulement aux opérateurs pour accéder au menu (elle correspond par exemple à un bouton avec une clé qui ne peut pas être activé par les votants). Voici l'ensemble des touches sur la machine :

1 2 3 4 5 6 7 8 9 m entrée

L'appui sur un bouton est donc équivalent à la saisie d'un chiffre ou de « m » au clavier et de l'appui sur la touche entrée.

La machine dispose également d'un écran modélisé par le terminal Python.

Fonctionnement

Nous n'allons pas aborder l'identification du votant, nous supposerons donc que les votants se succèdent et votent normalement.

La machine dispose de deux modes de fonctionnement :

Le menu d'administration pourra ressembler à ceci :

### Administration ###

 1 - Chargement des choix
 2 - Voir les résultats
 3 - Mise à zéro
 4 - Passer en mode vote

Et le mode vote :

### Vote ###

 1 - Squeezie
 2 - Cyprien
 3 - Natoo
 4 - Michou
 5 - Norman
 6 - Amixem

Voici quelques précisions sur le fonctionnement :

Tableau du barème

Voilà le barème complet sur 20 pour ce projet.

Tâche Barème
fonctionnement du menu administration 1 point
chargement des candidats depuis un ficher 2 points
fonctionnement du menu vote 1 point
respect des dates 1 point
augmentation des compteurs dans le fichier résultats.txt lors d'un vote 2 points
passage du menu administration au menu vote 1 point
passage de l'audit, fonctionnement global de la machine 2 points
trucage effectif 2 points
trucage intelligent (pas 100% des votes…) 2 points
qualité du trucage, discrétion du trucage dans le code, résistance à un audit du code 2 points
code optimisé 1.5 point
commentaires 1 point
code propre 1.5 point
Total 20

Aides

Lire et écrire dans un fichier

Pour stocker et lire les votes vous aurez besoin d'écrire et lire dans un fichier :

# Écriture
f = open("fichier.txt", "w") # Ouvre un fichier ou le crée et efface le contenu du fichier
f.write("Une ligne\n") # Écrit dans le fichier et va à la ligne (avec le « \n »)
f.close() # Ferme le fichier (important pour ne pas perdre des infos)

f = open("fichier.txt", "a") # Ouvre un fichier ou le crée et se place à la fin
f.write("Une ligne\n") # Écrit dans le fichier et va à la ligne (avec le « \n »)
f.close() # Ferme le fichier (important pour ne pas perdre des infos)

# Lecture
f = open("fichier.txt", "r") # Ouvre en lecture le fichier
for line in f: # Parcourt toute les lignes
    print(line,end="") # Affiche chaque ligne