Gabarits PDF disponibles en téléchargement pour cette version.
poule_unique_06eq.pdf poule_unique_07eq.pdf
poule_A.pdf poule_B.pdf poule_C.pdf poule_C_11eq.pdf poule_D.pdf poule_E.pdf poule_F.pdf poule_G.pdf poule_H.pdf
finales_06-10eq.pdf finales_11-15eq.pdf finales_16-19eq.pdf finales_20_21_22_23_25eq.pdf finales_24_26_27_29_30eq.pdf finales_28_31eq.pdf finales_huitieme_32eq.pdf finales_quart_32eq.pdf
Générer les documents nécessaires à l’organisation d’une compétition de pétanque avec phase de poules suivie d’une phase finale.
| Terme | Définition |
|---|---|
| Document | Document complet utilisé par les organisateurs. Composé d’une ou plusieurs feuilles. |
| Feuille | Document de base imprimé au format A4. Brique élémentaire d’un document. |
| Poule | Ensemble d’équipes dont les matches préliminaires servent à établir la feuille de matches finale. |
| Feuille de poule | Feuille permettant d’inscrire les résultats des matches d’une poule. |
| Feuille de matches | Document couvrant la phase finale, des 16es de finale jusqu’à la finale (tableau à élimination directe). |
| Feuille d’inscription | Document permettant d’enregistrer les équipes participantes et le paiement de leur inscription. |
| Paramètre | Valeur | Emplacement |
|---|---|---|
| Nombre min d’équipes | 6 | TEAMS_MIN dans le Makefile |
| Nombre max d’équipes | 32 | TEAMS_MAX dans le Makefile |
| Taille de base des poules | 4 équipes | POOL_BASE dans le Makefile |
Deux logos sont utilisés sur tous les documents imprimés.
| Fichier | Rôle | Format |
|---|---|---|
logo_COF_montlaur_rose.png |
Logo principal — Comité des fêtes de Montlaur | PNG |
logo_petanque.png |
Logo secondaire — scène de boules réaliste | PNG |
Disposition — Documents PDF : logo principal calé en haut à droite ; logo secondaire superposé en bas à gauche du logo principal, affiché à 1/3 de la taille du logo principal (hauteur et largeur divisées par 3, ratio conservé). Première page uniquement pour les documents multi-pages.
Disposition — Site de documentation
(index.html) : les logos sont affichés à droite de
la page, au même niveau que la table des matières (conteneur flex : TOC
à gauche, logos à droite). Logo principal à hauteur LOGO_H
; logo secondaire superposé en bas à gauche du logo principal, à 1/3 de
la taille du logo principal (mêmes règles qu’en PDF).
Hauteur d’affichage : paramètre LOGO_H
dans le Makefile (défaut 3,5 cm).
| Fichier | Origine | Fonction |
|---|---|---|
logo.yaml |
make logo |
Cache JSON des chemins et ratios d’aspect des logos. Évite de relire
les fichiers image à chaque génération de document. Persistant : non
supprimé par make clean. |
Ce fichier est produit par la commande
compute_logo_yaml.py : si absent ou périmé, il est régénéré
par make logo.
Chaque poule se voit attribuer une couleur distincte pour faciliter l’identification visuelle. Les noms des poules sont des lettres (A, B, C…) ; les couleurs n’ont qu’un rôle visuel.
| Poule | Lettre | Couleur | Code hex |
|---|---|---|---|
| 1 | A | Rouge | #E53935 |
| 2 | B | Bleu | #1E88E5 |
| 3 | C | Vert | #43A047 |
| 4 | D | Orange | #FB8C00 |
| 5 | E | Violet | #8E24AA |
| 6 | F | Cyan | #00ACC1 |
| 7 | G | Rose | #D81B60 |
| 8 | H | Brun | #6D4C41 |
| … | … | … | … |
| 16 | P | Indigo | #4527A0 |
| Fichier | Description |
|---|---|
guide_organisateur.pdf |
Guide de l’organisateur — procédure étape par étape |
feuille_inscription.pdf |
Feuille d’inscription des équipes |
pboule.pdf |
Transcription PDF de ce fichier |
poule_A.pdf … poule_H.pdf |
Gabarits poules A–H — 2 pages : POOL_BASE équipes +
POOL_BASE+1 équipes |
poule_unique_{N:02d}eq.pdf |
Poule UNIQUE pour chaque N non décomposable (ex. 6, 7 avec
POOL_BASE=4) |
poule_{lettre}_{N:02d}eq.pdf |
Feuille spéciale : répartition + feuille de la dernière poule (ex.
poule_C_11eq.pdf pour N=11, base=4 → A=4, B=4, C=3) |
| Colonne | Contenu |
|---|---|
| N° | Numéro d’équipe, pré-rempli de 1 à TEAMS_MAX |
| Nom d’équipe | Nom de l’équipe (zone de saisie) |
| Noms des membres | Noms et prénoms des membres (1 à 3 par équipe) |
| Paiement | Case à cocher par membre (état du paiement de l’inscription) |
Chaque équipe occupe 3 sous-lignes (une par membre potentiel). Le numéro et le nom d’équipe sont fusionnés sur les 3 sous-lignes.
| Colonne | Contenu |
|---|---|
| Équipe | Numéro dans la poule (Équipe 1, 2…) |
| N° inscription | Numéro de la feuille d’inscription |
| Noms – Prénoms | Noms des membres ou nom d’équipe |
C(N, 2) lignes de matches pour N équipes dans la poule.
| Colonne | Contenu |
|---|---|
| Matchs | Identifiant du match (ex. « 1 – 3 ») |
| Résultats | Score (points), rempli par l’arbitre |
| Éq. 1 … Éq. N | Case libre si l’équipe joue ce match (0 ou 1), case noire sinon |
| (ligne TOTAL) | TOTAL sur 2 colonnes ; cases = nombre de matches gagnés |
| Colonne | Contenu |
|---|---|
| Classement | Rang ordinal (1er, 2e…) |
| Équipe | Équipe classée (remplie après les matches) |
| Points | Score réel du match : score réel pour le gagnant (≥ 13, dépassement inclus) et pour le perdant |
Les équipes sont classées selon les critères suivants, appliqués dans l’ordre strict :
POOL_BASE équipes (défaut 4)POOL_BASE si N est
divisible par POOL_BASE, y compris si N est aussi
divisible par POOL_BASE+1 (ex. POOL_BASE=4, N=20 →
5 poules de 4, pas 4 poules de 5)POOL_BASE+1 si N est
divisible par POOL_BASE+1POOL_BASE en tête, poules de POOL_BASE+1 en
fin| N | Répartition | Ordre des poules | Poules |
|---|---|---|---|
| 8 | 2 × 4 | A=4, B=4 | A–B |
| 9 | 1 × 4 + 1 × 5 | A=4, B=5 | A–B |
| 10 | 2 × 5 | A=5, B=5 | A–B |
| 12 | 3 × 4 | A=4, B=4, C=4 | A–C |
| 13 | 2 × 4 + 1 × 5 | A=4, B=4, C=5 | A–C |
| 14 | 1 × 4 + 2 × 5 | A=4, B=5, C=5 | A–C |
| 15 | 3 × 5 | A=5, B=5, C=5 | A–C |
| 16 | 4 × 4 | A=4, B=4, C=4, D=4 | A–D |
| 17 | 3 × 4 + 1 × 5 | A=4, B=4, C=4, D=5 | A–D |
| 18 | 2 × 4 + 2 × 5 | A=4, B=4, C=5, D=5 | A–D |
| 19 | 1 × 4 + 3 × 5 | A=4, B=5, C=5, D=5 | A–D |
| 20 | 5 × 4 | A=4, B=4, C=4, D=4, E=4 | A–E |
| 21 | 4 × 4 + 1 × 5 | A=4, B=4, C=4, D=4, E=5 | A–E |
| 22 | 3 × 4 + 2 × 5 | A=4, B=4, C=4, D=5, E=5 | A–E |
| 23 | 2 × 4 + 3 × 5 | A=4, B=4, C=5, D=5, E=5 | A–E |
| 24 | 6 × 4 | A=4, …, F=4 | A–F |
| 25 | 5 × 5 | A=5, …, E=5 | A–E |
| 26 | 4 × 4 + 2 × 5 | A=4, B=4, C=4, D=4, E=5, F=5 | A–F |
| 27 | 3 × 4 + 3 × 5 | A=4, B=4, C=4, D=5, E=5, F=5 | A–F |
| 28 | 7 × 4 | A=4, …, G=4 | A–G |
| 29 | 1 × 4 + 5 × 5 | A=4, B=5, C=5, D=5, E=5, F=5 | A–F |
| 30 | 6 × 5 | A=5, …, F=5 | A–F |
| 31 | 4 × 4 + 3 × 5 | A=4, B=4, C=4, D=4, E=5, F=5, G=5 | A–G |
| 32 | 8 × 4 | A=4, …, H=4 | A–H |
Cas particuliers avec POOL_BASE = 4 : - N = 6, 7 : non décomposables en poules de 4 ou 5. Une feuille Poule UNIQUE de N équipes est générée. - N = 11 : réparti en 3 poules (A=4, B=4, C=3). Une feuille spéciale
poule_C_11eq.pdfest générée, contenant la répartition des 3 poules et la feuille de poule C (3 équipes).
Qualifiés par poule : 2 (1er et 2e). Pour P poules → 2P qualifiés en phase finale.
Pour chaque poule, les 2 premiers (1er et 2e) se qualifient pour la phase finale. Pour P poules, cela donne 2P qualifiés.
Tableau à élimination directe pour 2P équipes qualifiées. Soit q la puissance de 2 immédiatement inférieure ou égale à 2P, et r = 2P − q :
Il n’y a pas de cases bye : toutes les équipes jouent un match dès le départ.
Noms des tours selon le nombre d’équipes engagées :
| Équipes dans le tour | Nom du tour |
|---|---|
| 64 | 32es de finale |
| 32 | 16es de finale |
| 16 | 8es de finale |
| 8 | Quarts de finale |
| 4 | Demi-finales |
| 2 | Finale |
Les 2P équipes sont regroupées en P paires (case haute, case basse) :
Paire i (i = 0 … P−1) : - Case haute : 1er de la poule i+1 (A1, B1, C1…) - Case basse : 2e de la poule ((i + P//2) mod P) + 1
Selon la valeur de r = 2P − q : - Paires 0 … r−1 → matches préliminaires (colonne « Prél. ») - Paires r … P−1 → entrées directes en round 1 (si r = 0 : toutes les paires)
Exemple P = 4, r = 0 (N = 16, 17, 18, 19 — toutes entrées directes) :
| Paire | Case haute | Case basse |
|---|---|---|
| 0 | A1 | C2 |
| 1 | B1 | D2 |
| 2 | C1 | A2 |
| 3 | D1 | B2 |
→ A1 et A2 sont dans des moitiés de tableau opposées (ne peuvent se rencontrer qu’en finale).
Exemple P = 5, r = 2 (N = 20, 21, 22, 23, 25 — 2 matches préliminaires) :
| Paire | Case haute | Case basse | Rôle |
|---|---|---|---|
| 0 | A1 | C2 | Match préliminaire |
| 1 | B1 | D2 | Match préliminaire |
| 2 | C1 | E2 | Entrée directe round 1 |
| 3 | D1 | A2 | Entrée directe round 1 |
| 4 | E1 | B2 | Entrée directe round 1 |
A1,
B2) : pré-rempli, fond coloré de la couleur de la
poule.Les valeurs de N qui donnent le même nombre de poules P génèrent un document identique ; un seul fichier est donc produit par valeur de P.
Quand 2P >= 16 (les 8es de finale sont possibles), deux fichiers sont générés à la place d’un :
| Fichier | Contenu |
|---|---|
finales_huitieme_{NS}eq.pdf |
8es de finale : cases pré-remplies (poule + rang) + colonne « Quarts de finale → » vide |
finales_quart_{NS}eq.pdf |
Quarts de finale → demi-finales → finale + match pour la 3e place (tout vide) |
Quand 2P < 16, un seul fichier est produit :
| Nommage | Condition | Exemple (TEAMS_MIN=6, TEAMS_MAX=32, POOL_BASE=4) |
|---|---|---|
finales_{NN}eq.pdf |
une seule valeur de N pour ce P | finales_06-10eq.pdf (N=6–10 → P=2) |
finales_{N1}-{N2}eq.pdf |
plage de N consécutifs pour ce P | finales_16-19eq.pdf (N=16–19 → P=4) |
finales_{N1}_{N2}_...eq.pdf |
valeurs de N non consécutives | finales_20_21_22_23_25eq.pdf (N=20–23, 25 → P=5) |
Avec les paramètres par défaut (TEAMS_MIN=6, TEAMS_MAX=32,
POOL_BASE=4), seul N=32 (P=8, 2P=16) déclenche la génération des
fichiers finales_huitieme_32eq.pdf et
finales_quart_32eq.pdf.
Exemple : feuille d’inscription pour 32 équipes → 2 pages A4 portrait.
logo_petanque.pngLe fichier est généré par l’IA générative d’images venice.ai :
Trois boules de pétanque réalistes sur fond transparent :
1ère boule : acier brossé avec gravures géométriques (losanges).
2ème boule : bronze/cuivre avec numéros gravés (3 et 8).
3ème boule : noir mat avec symboles de trèfle gravés.
1 petit cochonet peint en orange fluo mat.
Les boules et le cochonet reposent sur un sol sablonneux.
L'arrière plan est découpé en forme d'ellipse englobant le sol, le cochonet et les boules.
Complètement blanc en dehors de l'ellipse.
Les boules et le cochonet occupent un maximum de la place dans l'ellipse.
La largeur de l'ellipse occupe toute la largeur de l'image.
L'ellipse est centrée dans l'image finale.
Ombres réalistes sous les boules, finition professionnelle, rendu 3D, photographie réaliste.
La bordure blanche autour de l’ellipse est rendue transparente avec GIMP :
Calque →
Ajouter un canal alpha.Fichier
→ Écraser.Tous les changements notables de ce projet sont documentés ici. Ce projet suit le versionnage sémantique.
PBOULE.md et GUIDE_ORGANISATEUR.md.GUIDE_ORGANISATEUR.md : guide de
l’organisateur étape par étape (inscription, phase de poules avec
tableau de répartition N=6–32 et instruction impression recto-verso,
phase finale) ; compilé en guide_organisateur.pdf via
make guide-pdf et intégré dans make all,
make pages et le site de documentation GitHub Pages.python/pboule/ : package partagé
(poules.py, palette.py, logos.py,
utils.py) ; tous les scripts de génération importent depuis
ce package.guide-pdf et
pages-site ; paramètres de compétition en ?=
pour autoriser la surcharge par variable d’environnement ou ligne de
commande ; aide mise à jour.ci.yml) : le job
generate appelle make all et le job
pages appelle make pages-site au lieu de
dupliquer les appels Python. Ajouter un nouveau document n’implique
désormais que de modifier le Makefile. Correctif : génération des phases
finales et assets finales_*.pdf dans la release absents
depuis v0.3.0.PBOULE.md :
guide_organisateur.pdf ajouté aux documents produits.README.md : noms de fichiers de poules
corrigés (poule_A.pdf au lieu de
poule_A_04eq.pdf) ; section paramètres enrichie (trois
modes de surcharge) ; dépendances des cibles all et
pages mises à jour ; guide_organisateur.pdf
ajouté au site Pages.CLAUDE.md : reformulation concise
(mêmes directives, moins de tokens).python/generate_phases_finales.py :
nouveau script générant les feuilles de phases finales (tableau à
élimination directe, sans bye, avec matches préliminaires si
nécessaire). Un fichier par groupe de N équipes partageant le même
nombre de poules P. Page d’instructions incluse. Mode A3 automatique si
les cases sont trop petites.phases-finales et
dépendance dans all et pages.POOL_BASE et POOL_BASE+1 équipes) sont
désormais regroupées dans un seul PDF par lettre de poule
(poule_A.pdf, poule_B.pdf…) au lieu de deux
fichiers séparés (poule_A_04eq.pdf /
poule_A_05eq.pdf).python/generate_pages.py : section «
Feuilles de poule » adaptée au nouveau nommage ; section « Phases
finales » ajoutée.PBOULE.md : table des documents mise à
jour (nouveau nommage poule_{lettre}.pdf) ; tableau de
répartition en poules étendu à toutes les valeurs N de
TEAMS_MIN à TEAMS_MAX (24 lignes au lieu de 9)
; section « Règles de la phase finale » complétée ; spécifications
allégées (suppression des redondances).bump-major,
bump-minor, bump-patch pour incrémenter la
version dans pyproject.toml et préparer
CHANGELOG.md.python/bump_version.py : script
sous-jacent aux cibles bump-*.README.md : table complète des cibles
Makefile (avec dépendances) et section Pipeline CI/CD (jobs, workflow de
release, structure pages/).PBOULE.md : recentré sur les
spécifications du domaine — sections « Structure des fichiers », «
Cibles Makefile » et « Pipeline CI/CD » déplacées vers
README.md. Correction de l’en-tête LaTeX pour
pboule.pdf (hauteurs et superposition des logos conformes à
la spec).CLAUDE.md : ajout de
README.md dans les fichiers de référence à maintenir ;
règle canal conda (uniquement conda-forge, jamais
defaults).environment.yml : ajout de
nodefaults dans les canaux.conda-remove-defaults: "true" sur
les 4 jobs ; arguments --logo-yaml et
--logo-creation-md ajoutés au job pages (logos
absents de index.html sur GitHub Pages).compute_logo_yaml.py, logos.py et
generate_pages.py — erreur explicite si le fichier PNG est
absent (au lieu d’un fallback silencieux).pyproject.toml : version portée à
0.2.0 (oubli lors de la v0.2.0) ; scripts/
retiré de src (dossier supprimé).PETANQUE.md → PBOULE.md.scripts/extract_changelog.py et
scripts/generate_pages.py déplacés dans
python/.logo_petanque.png) ; CI et
compute_logo_yaml.py mis à jour.generate_pages.py : réécriture
complète — TOC et logos côte à côte (flex), CSS enrichi, section «
Documents créés » avec sous-groupes (inscription, poules uniques, poules
standard par taille).PBOULE.md — en-tête LaTeX : correction
du positionnement et des tailles des logos dans pboule.pdf
(\rlap pour la superposition, hauteurs 3,5 cm et 1,167 cm
conformes à la spec).README.md : présentation du projet,
liens GitHub et GitHub Pages, instructions d’installation et de
génération.creation_logo_petanque.md :
documentation de la création du logo.index.html) — logos à droite de la page au même niveau que
la table des matières.pip + apt-get vers
conda-incubator/setup-miniconda avec
environment.yml dans tous les jobs. pycairo
(dépendance transitive de svglib) est désormais fourni par
conda-forge (wheel binaire), ce qui supprime la compilation depuis les
sources et l’erreur « Dependency “cairo” not found ».branches: ["**"]) afin que lint et
generate s’exécutent systématiquement, pas seulement sur
main.POOL_BASE=4).compute_logo_yaml.py calcule les ratios d’aspect, rasterise
le SVG pétanque en PNG (cairosvg 150 dpi) et écrit
logo.yaml (cache JSON persistant). Logo COF en haut à
droite ; logo pétanque superposé en bas-gauche à 1/3 de la taille du
logo principal, première page uniquement.all,
logo, feuilles-poules,
feuille-inscription, petanque-pdf,
pages, lint, install-hooks,
env, check, init,
clean, clean-all. Paramètres affichés dans
make help.make pages) : python/generate_pages.py
combine les spécifications, les liens vers les PDF et le changelog en un
index.html avec table des matières (pandoc), copie les PDF
dans pages/..github/workflows/ci.yml) :
lint (push, PR) : pre-commit ruff sur tous les
fichiers.generate (push, PR) : génération des PDF, archivage
artefact.release (tag vX.Y.Z) : GitHub Release
avec ZIP + PDF individuels, notes extraites depuis
CHANGELOG.md via
python/extract_changelog.py.pages (tag vX.Y.Z) : déploiement
GitHub Pages.trailing-whitespace, end-of-file-fixer,
check-yaml, check-added-large-files,
check-merge-conflict, ruff lint, ruff format.pyproject.toml : nom
pboule, version, licence MIT, métadonnées, dépendances
runtime et dev.LICENSES : licence MIT complète du
projet et tableau des licences de tous les outils tiers (Python,
ReportLab, cairosvg, svglib, PyYAML, pandoc, tectonic, ruff, pre-commit,
gh).CHANGELOG.md,
PETANQUE.md (spécifications complètes),
CLAUDE.md (instructions de travail),
environment.yml.