• Как вы выбираете из множества решений то, которое в итоге реализуете?

    @FD4A
    Второй/Третий способ обычно более читабельный,

    Любой способ должен быть читабельным. Почитайте Макконела Совершенный Код например.
    По каким критериям оцениваете вы?

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

    Стоит знать лучшие реализации типовых задач. Хоть они как правило и берутся из библиотек, но если вдруг библиотеки нет, то всё равно вы уже знаете что делать. Не типовые задачи разбивайте на типовые. Для совсем-совсем не типовых задач получите работающее решение, назовите его прототипом и исследуйте на соответствие предъявляемым критериям.