Ноя
10

Java




  • Заметка о счастье)))))))))))

  • Чем примечательна зима в Японии-1


  • Поскольку играть по вечерам в LoL мне на разрешают, потому что я, видите ли, очень громко закликиваю противников, пришлось искать новое развлечение. А почему бы не поучиться программировать на JAVA, подумалось тут мне. Из запасов литературы на винчестере была извлечена "Философия JAVA" Брюса Эккеля, и каждый вечер, придя с работы, я стал почитывать по главке. <lj-cut>
    Естественно, где-то к сотой странице, когда было прочитано про типы данных и операторы ветвления, руки стали чесаться чего-нибудь наваять. Только вот что? На это уже тоже был готов ответ: http://acm.timus.ru/ - архив задач с различных соревнований по спортивному программированию с системой автоматической проверки присланных решений. Взял себе первую попавшуюся задачу, условие которой сумел понять ;). Это оказалась задача 1811. Сел писать решение. Eclipse когда-то давно уже был поставлен на компьютер, пришлось только посмотреть обучающий ролик, что там и как. Дело двигалось споро, и за вечер работающая программа была написана. Депонировал её на сервер, ииии...., па-бам!
    Memory limit exceeded!
    Ну понятно, алгоритм был самый простой и жрал кучу памяти. Провозился до ночи, но полностью его переписал. Депонирование, ииии.... Time limit exceeded. Чёрт! Хотя ожидаемо. На работу программы проверяющая система выделяет ровно две секунды. Если программа за это время не выдает решения, процесс прибивается. Написав алгоритм, который жрёт мало памяти, я совсем не позаботился о скорости выполнения.
    День второй, оптимизация всего, что только можно - Time limit exceeded. Придумывание нового алгоритма - Time limit exceeded. Курение мануалов на тему что быстрее ArrayList или LinkedList - Time limit exceeded. Забивание на встроенные списки и реализация их самостоятельно - Time limit exceeded. Вбивание в код каких-то костылей, которые должны ускорить выполнение в некоторых частных случаях - Time limit exceeded.
    К четвёртому дню я исчерпался. Идеи закончились. Тогда я решил посмотреть, решал ли вообще кто-то эту задачу на Java. Дело в том, что даже в официальном FAQ написано, что решения на Java почти всегда работают достаточно большое время и требуют много памяти по сравнению с другими языками независимо от сложности задачи. Такова особенность этого языка. Читаю список решивших задачу с указанием на каком языке и за какое время отработала программа: C++, C++, C, Pascal, C++ ... И всё времена по 0.2 секунды, 0.4 секунды. Вот, блин, думаю. Где-то на четвертой странице списка попадается единственный чел, решивший задачу на JAVA. Со временем выполнения 1.964 секунды. Фига-се, игра на гране фола. Лезу в профиль этого чела, и выясняю, что в рейтинге этого сервера он занимает третье место из 52000 участников. Зашибись. Тут-то я окончательно приуныл. Но с другой стороны появился вызов. Я уже ночи не сплю, обдумываю этот проклятый алгоритм. Отправка решения на сервер уже не фунт изюма. Каждый раз с замиранием ждёшь, когда же в окошечке появится ответ. Аж руки трясутся. Почти также круто, как делать triple kill Мордекайзером.
    И всю дорогу меня не покидает ощущение, что я чего-то не догоняю, и должно быть какое-то простое элегантное решение.
    И вот, эврика, одним вечером это решение найдено! Немедленно сажусь писать, и пока пишу, таки в вспоминаю поговорку, что любая задача имеет красивое, элегантное, простое, и при этом абсолютно неверное решение :) Решение придумано прикольное, но в нём большая дыра, оно даёт неправильный ответ :).
    Еще ночь без сна, и под утро готов новый алгоритм. Программирование, отладка. Не работает. Пора ехать на работу. Долгая дорога на работу и обратно способствует утрясанию всяческих идей. Решение отшлифовано и чётко ложится в код.
    Ловля нескольких багов в коде. Иии...
    Accepted!!!

    В итоге, получил массу эмоций, здорово повысил свои практические навыки по Javа: пока решал задачу пришлось разобраться в массе разных нюансов, которые при прочтении книги были не очевидны. Пожалуй продолжу это развлечение, если только не заленюсь.
    И да, как они это за час решают?! Всё таки совсем уже мозги жиром заплыли.</lj-cut>













  • Заметка о счастье)))))))))))

  • Чем примечательна зима в Японии-1



  • Социальные сети

    Рубрики

    Последние записи