Software per la gara a cronometro


11

Sto cercando un software per condurre una gara a cronometro locale. Ci saranno circa 50 ciclisti: abbastanza grandi da rendere il lavoro di preparazione dei risultati di gara con carta e penna nudi piuttosto difficili e dispendiosi in termini di tempo, ma troppo piccoli per utilizzare i sistemi di chip da gara a tutti gli effetti.

I ciclisti inizieranno con un intervallo di un minuto e sul traguardo ci sarà un uomo che annuncia il tempo all'operatore. Quindi l'operatore dovrà solo inserire l'ora del pilota nel programma. Il programma dovrebbe essere in grado di produrre la tabella dei risultati al volo mentre i corridori attraversano la linea.

Capisco che creare questo tipo di software non sia così difficile, ma speravo solo che ci fossero soluzioni freeware prontamente disponibili che potrei usare per il mio evento. Per favore fatemi sapere se ne avete mai sentito parlare.


Tra 1 ora ne avrò realizzato uno in pitone :)
Tim

Sì, giusto, so che è relativamente facile scriverlo da solo. Ma quando inizio a pensare a tutte le funzionalità utili che mi piacerebbe avere lì, come la modifica della tabella con i risultati (spostamento automatico delle voci se necessario), la creazione di output compatibili con la stampante, l'esportazione in Excel, il filtraggio dei risultati in base al tipo di bicicletta (bici da strada vs aero) o fasce di età, ecc. Mi rendo conto che potrebbe essere più semplice investire in google invece :-)
krakovjak

4
Perché non usare solo un foglio di calcolo?
200_successo

1
Sto votando per chiudere questa domanda come fuori tema perché il software sul ciclismo è fuori tema. Si prega di chiedere su softwarerecs.stackexchange.com e utilizzare il tag per il ciclismo.
Criggie

Risposte:


7

Questo verrà eseguito in Python (solo 3.X, non 2.7), un linguaggio di programmazione gratuito da installare. Basta salvare quanto segue come file finale .py- ad es timetrials.py. Quindi apri IDLE3 (menu di avvio) e apri il file ( Ctrl+ O). Infine, premere F5per avviarlo.

import datetime
from operator import itemgetter

def get_int_input(prompt, min_=0, max_=None):
    """Get a valid integer input."""
    while True:
        try:
            i = int(input(prompt))
        except ValueError:
            print("Please enter an integer.")
        else:
            if min_ is not None and i < min_:
                print("Must be at least {0}.".format(min_))
                continue
            elif max_ is not None and i > max_:
                print("Must be at most {0}.".format(max_))
                continue
            return i

def get_time():
    """"Get a time input as a datetime.time object."""
    h = get_int_input("Hours (0-23): ", max_=23)
    m = get_int_input("Minutes (0-59): ", max_=59)
    s = get_int_input("Seconds (0-59): ", max_=59)
    ms = get_int_input("Milliseconds (0-999): ", max_=999)
    return datetime.time(h, m, s, ms*1000)

def get_results(competitors):
    """Get a dict of finishing times for all competitors."""
    results = {}
    for _ in range(competitors):
        while True:
            competitor = get_int_input("Enter competitor number: ", min_=1, max_=competitors+1)
            if competitor not in results:
                results[competitor] = get_time()
                break
            print("Time already entered.")
        print_results(results)
    return results

def print_results(results):
    """Display the race results in a table, fastest first."""
    linet = '┌' + "─" * 12 + '┬' + '─' * 17 + '┐'
    linec = '├' + "─" * 12 + '┼' + '─' * 17 + '┤'
    lineb = '└' + "─" * 12 + '┴' + '─' * 17 + '┘'
    print(linet)
    print("│ Competitor │ Time (H:M:S)    │")
    for n, t in sorted(results.items(), key=itemgetter(1)):
        print(linec)
        print("│ {0:<10d} │ {1!s:<15} │".format(n, t))
    print(lineb)

def race():
    """Handle race times for a user-specified number of competitors."""
    n = get_int_input("Enter number of competitors (2-): ", min_=2)
    results = get_results(n)

if __name__ == "__main__":
    race()

Quando tutti avranno finito, sarà simile a questo:

┌──────────────┬───────────────┐  
│  Con Num     │ Time H:M:S    │  
├──────────────┼───────────────┤  
│  1           │ 5:4:3.2       │  
├──────────────┼───────────────┤  
│  2           │ 8:7:6.5       │  
├──────────────┼───────────────┤  
│  3           │ 2:2:2.2       │  
└──────────────┴───────────────┘  

3
Tutto bene, ma l'acquisto di un pacchetto commerciale ti dà almeno qualcuno a cui lamentarti quando trovi un bug.
PeteH,

3
Sentiti libero di lamentarmi con me qui, sono abbastanza triste per essere sempre su SE!
Tim

2
Bel lavoro! Dovresti prendere in considerazione l'esecuzione di codereview.stackexchange.com , tuttavia, non sei del tutto conforme alla guida di stile e c'è molta ripetizione (ad esempio, considera l'aggiunta di una funzione def get_int_input(prompt, min_=None, max_=None):). Inoltre, ti strftimefarebbe risparmiare un po 'di lavoro.
jonrsharpe,

@jon lo sto facendo ora ... È difficile a causa delle variazioni ... 15 minuti;)
Tim

@jon In effetti, 13 minuti dopo ... editing ;-)
Tim

3

Un'opzione è RaceSplitter . Questa è un'app iOS, costa $ 35. Avrai bisogno di un iPad, iPhone o iPod Touch adatto per eseguirlo.

È possibile inserire un elenco di partenza in anticipo. Quindi durante la gara, devi solo inserire il numero del pilota mentre attraversano il traguardo e registrerà il loro tempo. È quindi possibile pubblicare i risultati sul sito Web ed esportare in Excel ecc.

Non ho provato questo, ma l'ho visto in uso in alcune gare locali. Sembra funzionare bene per il tempismo e hanno ottenuto i risultati online poco dopo la gara.


Sembra esattamente quello di cui ho bisogno! Grazie!
krakovjak,

1

Abbiamo usato un'app per telefoni Android creata da Liuto. È stato fantastico, facile da imparare / usare ed economico - solo $ 1,11. Fondamentalmente, quando ogni ciclista si spegne in base al numero iniziale, si tocca il numero corrispondente al loro ritorno e il calcolo del loro tempo rispetto al tempo totale trascorso è completo. Snap!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.