Разработка на коленке

"тут должна быть красивая цитата о программировании"

Решение задач на checkio.org

2015-05-06 15:40
Чайка

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

Начало

Зарегистрировавшись там два года назад, я успешно забыл о ресурсе, с головой уйдя только в работу над проектами. Несколько месяцев назад мне снова стало интересно заниматься решением задач по программированию. Первым делом перерешал всё, что нашёл в Elementary, потом взялся за Home. Первые задачи решал одну за одной, просто потому, что они были очень простыми. В Home делал всё ровно тоже самое, пока не взялся за задачу с пирамидой. Не скажу, что она была сложной, но она мне понравилась. Потом был лабиринт. И вот на этой задаче я остановился надолго.

Другой подход

Начав заниматься на checkio, я никогда не ставил себе цель обогнать всех или перерешать все задачи в кратчайшие сроки. Моими целями были развлечение и самообразование. Решать задачи одну за одной, не ковыряясь с ними, было не очень весело, а самообразованием это тоже сложно назвать. Поэтому, взявшись за лабиринт, я не стал искать сравнение алгоритмов поиска в графе и выбирать один из них, чтобы затем быстро его реализовать. Вместо этого взял с полки "Искусственный интеллект" Питера Норвига и стал не спеша читать главу про неинформированный поиск. Потом уже выбрал двунаправленный поиск, просто потому что мне он показался интересным и достаточно оптимальным (хотя о какой оптимальности можно говорить при лабиринте 10 на 10 клеток). Но и тут я не стал сразу же писать код. Где-то 4 дня (все майские праздники) просто в свободное время делал в блокноте наброске о способе обхода дерева, прикидывал, как хранить переферию и в какие структуры данных положить граф. Набрал 4 разных способа реализации. Было интересно. Ну а вчера вечером уже доделал решение в коде, а сегодня, перечитав его, опубликовал. Вот это было интересно. Когда только прочёл задание, то просто хотел взять A* и по-быстрому накидать решение, хорошо, что сделал иначе.

Решение

Решение доступно только тем, кто сам уже решил эту задачу. Мой код доступен по ссылке - Open Labyrinth.

Ищу новую площадку с задачами по программированию

2013-02-01 13:52

Пробую силы в решении олимпиадных задач. Начал свои попытки с архива задач Online соревнование по программированию в МФТИ. Сама идея выполнения таких заданий показалась интересной, хоть и непривычной. Но вот эта площадка меня не устраивает, потому что на сервере код проверяется python 2.1.3, который совсем старый и забытый. Для того, чтобы у меня код прошёл проверку по задаче 027, мне пришлось модифицировать вот такой код

def search_odd_number(count_of_numbers, numbers):
    i = 0
    while i < count_of_numbers - 1:
        if numbers[i] ^ numbers[i + 1] != 0:
            break
        i += 2

    return numbers[i]

print(search_odd_number(int(input()), sorted(map(int, input().split(' ')))))

в такой:

# >>>> for python 2.1.3

from string import split

def sorted(s):
    s.sort()
    return s

def search_odd_number(count_of_numbers, numbers):
    i = 0
    while i < count_of_numbers - 1:
        if numbers[i] ^ numbers[i + 1] != 0:
            break
        i += 2

    return numbers[i]

print(search_odd_number(int(raw_input()), sorted(map(int, split(raw_input())))))

Тратить время на адаптацию кода под старый python мне не хочется, поэтому поищу новую площадку для развлечений.

Заодно открыл доступ к репозиторию с решениями (вроде бы это не запрещено) - ссылка на bitbucket.

  • 1 / 1