Програмне забезпечення для гоночного випробування


11

Я шукаю програмне забезпечення для проведення місцевої гонки з випробуваннями в часі. Буде близько 50 гонщиків: достатньо великих, щоб зробити роботу з підготовки результатів гонок голими ручками та папером досить важким та трудомістким, але занадто малим, щоб використовувати повноцінні системи гоночних фішок.

Вершники збираються стартувати з однохвилинним інтервалом, і на фінішній лінії буде людина, яка оголошує час оператору. Тож оператору просто потрібно буде ввести час програми для програми. Програма повинна бути спроможна скласти таблицю результатів на льоту, коли вершники перетинають лінію.

Я розумію, що створити подібне програмне забезпечення не так вже й складно, але я просто сподівався, що є доступні безкоштовні безкоштовні рішення, які я можу використовувати для своєї події. Будь ласка, дайте мені знати, якщо ви коли-небудь чули.


За 1 годину я зробив би її в пітон :)
Тім

Так, правда, я знаю, що написати це відносно легко. Але коли я починаю думати про всі корисні функції, які я хотів би мати там, як-от редагування таблиці з результатами (автоматично переміщення записів, якщо це потрібно), створення дружнього виводу для принтера, експорт до excel, фільтрація результатів відповідно до типу велосипеда (дорожній велосипед проти аерографа) або вікові групи тощо. Я розумію, що може бути простіше інвестувати гроші в
гуглінг

4
Чому б просто не використовувати електронну таблицю?
200_успіх

1
Я голосую, щоб закрити це питання поза темою, оскільки програмне забезпечення про їзду на велосипеді поза темою. Запитайте на softwarerecs.stackexchange.com та використовуйте тег для їзди на велосипеді.
Criggie

Відповіді:


7

Це буде працювати в python (лише 3.X, а не 2.7), вільній для встановлення мові програмування. Просто збережіть наступне як закінчення файлу .py- наприклад timetrials.py. Потім відкрийте IDLE3 (меню запуску) та відкрийте файл ( Ctrl+ O). Нарешті, натисніть F5для запуску.

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

Коли всі закінчать, це буде виглядати приблизно так:

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

3
Все добре і добре, але придбання комерційного пакету принаймні дає вам когось стогнати, коли ви знайдете помилку.
PeteH

3
Не соромтесь стогнати на мене тут, мені досить сумно, щоб завжди бути на SE!
Тім

2
Приємних зусиль! Ви повинні розглянути можливість запуску цього минулого codereview.stackexchange.com , однак - ви не повністю сумісні з посібником зі стилів і є багато повторень (наприклад, розглянути можливість додавання функції def get_int_input(prompt, min_=None, max_=None):). Крім того, strftimeви заощадите на роботі.
jonrsharpe

@jon щойно це роблю зараз ... Це складно через зміни ... 15 хвилин;)
Тім

@jon Насправді, через 13 хвилин ... редагування ;-)
Тім

3

Один з варіантів - RaceSplitter . Це додаток для iOS, коштує 35 доларів. Для його роботи вам знадобиться відповідний iPad, iPhone або iPod Touch.

Ви можете заздалегідь внести стартовий список. Тоді під час гонки вам просто потрібно ввести номер вершника, коли вони перетнуть фінішну лінію, і він запише їх час. Потім можна опублікувати результати на веб-сайті та експортувати в Excel тощо.

Я сам цього не пробував, але бачив це в застосуванні на кількох місцевих перегонах. Схоже, це добре працює на час, і вони отримали результати в Інтернеті незабаром після гонки.


Це виглядає як саме те, що мені потрібно! Дякую!
krakovjak

1

Ми використовували додаток для андроїд-телефонів, виготовлене Liuto. Це було чудово, легко вивчити / використовувати та дешево - лише 1,11 долара. В основному, коли кожен вершник відправляється за стартовим номером, ви натискаєте його відповідне число, коли повертаєтесь, і підрахунок їх часу проти загального минулого часу завершено. Оснастка!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.