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


11

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

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

Я понимаю, что создание такого рода программного обеспечения не так сложно, но я просто надеялся, что есть легкодоступные бесплатные решения, которые я мог бы использовать для своего мероприятия. Пожалуйста, дайте мне знать, если вы когда-нибудь слышали о них.


Через 1 час я сделаю один на питоне :)
Тим

Да, верно, я знаю, что это относительно легко написать самому. Но когда я начинаю думать обо всех полезных функциях, которые мне хотелось бы иметь, таких как редактирование таблицы с результатами (автоматическое перемещение записей при необходимости), создание вывода на печать, экспорт в Excel, фильтрация результатов в соответствии, скажем, с типом велосипеда. (road-bike vs aero) или возрастные группы и т. д. Я понимаю, что вместо этого можно было бы проще инвестировать в поиск в Google :-)
krakovjak

4
Почему бы просто не использовать электронную таблицу?
200_success

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сэкономил бы вам немного работы.
Джоншарп

@ jon просто делаю это сейчас ... Это сложно из-за различий ... 15 минут;)
Тим

@jon Фактически, 13 минут спустя ... редактирование ;-)
Тим

3

Одним из вариантов является RaceSplitter . Это приложение для iOS, стоит 35 долларов. Вам понадобится подходящий iPad, iPhone или iPod Touch, чтобы запустить его.

Вы можете войти в стартовый список заранее. Затем во время гонки вам просто нужно ввести номер гонщика, когда он пересечет финишную черту, и он запишет их время. Затем вы можете опубликовать результаты на веб-сайте, а также экспортировать в Excel и т. Д.

Я не пробовал это сам, но я видел это в нескольких местных гонках. Кажется, он отлично работает по времени, и вскоре после гонки они получили результаты онлайн.


Это выглядит как раз то, что мне нужно! Спасибо!
Краковяк

1

Мы использовали приложение для телефонов Android от Liuto. Это было здорово, легко учиться / использовать и дешево - всего 1,11 доллара. По сути, когда каждый гонщик уходит по стартовому номеру, вы нажимаете на соответствующий номер при его возвращении, и вычисление его времени по сравнению с общим истекшим временем завершено. Щелчок!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.