Oprogramowanie do wyścigu na czas


11

Szukam oprogramowania do przeprowadzenia lokalnego wyścigu na czas. Będzie około 50 zawodników: wystarczająco dużych, aby przygotowanie wyników wyścigu gołym piórem i papierem było dość trudne i czasochłonne, ale zbyt małe, aby używać pełnoprawnych układów wyścigowych.

Zawodnicy wystartują z jednominutową przerwą, a na mecie pojawi się mężczyzna, który ogłosi operatorowi czas. Tak więc operator będzie musiał po prostu wprowadzić czas kierowcy do programu. Program powinien być w stanie wygenerować tabelę wyników w locie, gdy zawodnicy przekroczą linię.

Rozumiem, że tworzenie tego rodzaju oprogramowania nie jest takie trudne, ale miałem tylko nadzieję, że będą dostępne łatwo dostępne rozwiązania freeware, z których mógłbym skorzystać podczas mojego wydarzenia. Daj mi znać, jeśli kiedykolwiek coś o tym słyszałeś.


Za godzinę zrobię jedną w pythonie :)
Tim

Tak, racja, wiem, że stosunkowo łatwo jest to napisać samodzielnie. Ale kiedy zaczynam myśleć o wszystkich przydatnych funkcjach, które chciałbym tam mieć, takich jak edytowanie tabeli z wynikami (automatyczne przenoszenie wpisów w razie potrzeby), tworzenie wydruku przyjaznego dla drukarki, eksportowanie do programu Excel, filtrowanie wyników według powiedzmy typu roweru (rower szosowy vs aero) lub grupy wiekowe itp. Zdaję sobie sprawę, że łatwiej jest zainwestować w google :-)
krakovjak

4
Dlaczego nie skorzystać z arkusza kalkulacyjnego?
200_success

1
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ oprogramowanie dotyczące jazdy na rowerze jest nie na temat. Zapytaj na softwarerecs.stackexchange.com i użyj tagu do jazdy na rowerze.
Criggie

Odpowiedzi:


7

Będzie działał w Pythonie (tylko 3.X, a nie 2.7), darmowym języku programowania. Po prostu zapisz następujące jako zakończenie pliku .py- np timetrials.py. Następnie otwórz IDLE3 (menu Start) i otwórz plik ( Ctrl+ O). Na koniec naciśnij, F5aby rozpocząć.

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()

Kiedy wszyscy skończą, będzie to wyglądać mniej więcej tak:

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

3
Wszystko dobrze i dobrze, ale kupowanie pakietu komercyjnego daje przynajmniej kogoś do narzekania, gdy znajdziesz błąd.
PeteH

3
Możesz narzekać na mnie tutaj, jestem na tyle smutny, że zawsze jestem na SE!
Tim

2
Niezły wysiłek! Powinieneś jednak rozważyć uruchomienie tego poprzedniego codereview.stackexchange.com - nie jesteś w pełni zgodny z przewodnikiem po stylu i jest wiele powtórzeń (np. Rozważ dodanie funkcji def get_int_input(prompt, min_=None, max_=None):). Ponadto, strftimeby zaoszczędzić trochę pracy.
jonrsharpe

@jon właśnie to robi teraz ... To trudne ze względu na odmiany ... 15 minut;)
Tim

@jon W rzeczywistości, 13 minut później ... edycja ;-)
Tim

3

Jedną z opcji jest RaceSplitter . To aplikacja na iOS kosztuje 35 USD. Aby go uruchomić, potrzebujesz odpowiedniego iPada, iPhone'a lub iPoda Touch.

Możesz wcześniej wprowadzić listę startową. Następnie podczas wyścigu musisz tylko wpisać numer zawodnika, który przekroczy linię mety, a on zarejestruje ich czas. Następnie możesz opublikować wyniki na stronie internetowej i wyeksportować do Excela itp.

Sam tego nie próbowałem, ale widziałem, że jest używany na kilku lokalnych wyścigach. Wydaje się, że działa dobrze na czas, a wyniki są dostępne online wkrótce po wyścigu.


Wygląda dokładnie tak, jak potrzebuję! Dziękuję Ci!
krakovjak

1

Korzystaliśmy z aplikacji na telefony z systemem Android firmy Liuto. To było świetne, łatwe do nauczenia / użytkowania i tanie - tylko 1,11 USD. Zasadniczo, gdy każdy zawodnik wyjedzie według numeru startowego, stukniesz odpowiednią liczbę przy powrocie i obliczenie czasu w stosunku do całkowitego czasu, który upłynął, jest zakończone. Kłapnięcie!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.