par Pronosticbien » Lun Août 18, 2025 16:42
ici en prgramme python (réalisé par pronosticbien horse corporation)
phaseur bip gong dông bong pour suivre n'importe quel cheval à suivre , bien comprendre le prgramme d'abord , allez sur le compiler online gdb , c'est du luxe
#!/usr/bin/env python3
"""
Timer cyclique et vérification de bip avant les courses (en minutes).
Phases A,B,C,D,E avec durées par défaut:
A=120, B=240, C=110, D=70, E=180
Cycle total = 720 minutes
Algorithm:
- offsets = [A, A+B, A+B+C, A+B+C+D, A+B+C+D+E] = [120, 360, 470, 540, 720]
- t_in_cycle = t % cycle_len
- Trouver le premier s dans offsets tel que t_in_cycle < s
-> bip = s - t_in_cycle
- Bip valide si 1 <= bip <= window (par défaut 10)
"""
import math
def cumulate_offsets(durations):
"""Renvoie les offsets finaux des phases dans le cycle (en minutes)."""
offsets = []
total = 0
for d in durations:
total += int(d)
offsets.append(total)
return offsets # dernier offset = cycle total
def compute_bip_from_t_in_cycle(t, offsets):
"""Calcule le bip (en minutes) pour un temps t exprimé en minutes depuis l'ancrage."""
cycle_len = offsets[-1]
if cycle_len <= 0:
return 0
t_in_cycle = int(t) % int(cycle_len)
for s in offsets:
if t_in_cycle < s:
return int(s - t_in_cycle)
return 0 # ne devrait pas arriver
def main():
print("Timer cyclique et vérification de bip avant les courses (10 minutes).")
# 1) Durées des phases
default_durations = [120, 240, 110, 70, 180] # A, B, C, D, E
print("Durées par défaut des phases (en minutes): A=120, B=240, C=110, D=70, E=180 (cycle total 720).")
use_custom = input("Souhaitez-vous changer les durées des phases ? (oui/non) [défaut: non] ").strip().lower()
if use_custom == "oui":
dur_input = input("Entrez les durées des phases en minutes, séparées par des espaces (5 valeurs): ").strip()
if dur_input:
try:
durations = [int(x) for x in dur_input.split()]
if len(durations) != 5:
print("Nombre de valeurs invalide (nécéssite 5). On utilise les valeurs par défaut.")
durations = default_durations
except Exception:
print("Erreur de parsing. On utilise les valeurs par défaut.")
durations = default_durations
else:
durations = default_durations
else:
durations = default_durations
offsets = cumulate_offsets(durations)
cycle_len = offsets[-1]
# 2) Ancrage du cycle
anchor_str = input("Entrez l'ancrage du cycle en minutes (0 pour le début, par exemple 0): ").strip()
try:
anchor_min = int(anchor_str)
except:
anchor_min = 0
# 3) Courses
n_input = input("Combien de courses souhaitez-vous évaluer ? (nombre entier) ").strip()
try:
n_races = int(n_input)
except:
print("Nombre invalide. On considére 0 course.")
n_races = 0
courses = []
for i in range(n_races):
t_str = input(f"Temps en minutes depuis l'ancrage pour la course #{i+1} (ex: 115): ").strip()
try:
t = int(t_str)
except:
print("Temps invalide; on ignore cette course.")
continue
courses.append({"idx": i+1, "t": t})
# 4) Fenêtre (par défaut 10 minutes)
window_min = 10
w_in = input(f"Fenêtre avant la course en minutes (par défaut {window_min}): ").strip()
if w_in:
try:
window_min = int(w_in)
except:
print("Valeur invalide; on garde 10 minutes.")
# 5) Calcul et affichage
print("\nRésultats:")
if not courses:
print("Aucune course à évaluer.")
return
for c in courses:
t = c["t"] # minutes depuis l'ancrage
bip = compute_bip_from_t_in_cycle(t, offsets) # minutes restantes dans la phase courante
# Vérification de la fenêtre
if 1 <= bip <= window_min:
# Déterminer la phase courante pour information
t_mod = int(t) % int(cycle_len)
phase_names = ["A", "B", "C", "D", "E"]
phase_idx = 0
for idx, s in enumerate(offsets):
if t_mod < s:
phase_idx = idx
break
phase_name = phase_names[phase_idx]
print(f"- Course à t={t} min: bip de {int(bip)} min dans la phase {phase_name} (reste {int(bip)} min).")
else:
print(f"- Course à t={t} min: aucun bip dans les {window_min} minutes précédentes (bip={int(bip)}).")
print("\nConseil: si aucun bip ne tombe dans la fenêtre souhaitée, ajustez soit l'ancrage, soit les durées des phases et relancez le calcul.")
if __name__ == "__main__":
main()
https://www.icone-gif.com/gif/voiliers006.gif