Блог пользователя RodionGork

Автор RodionGork, 13 лет назад, По-русски
По мотивам поста о программировании и искусстве - вспомните, пожалуйста, случалось ли вам из чистого собственного любопытства писать (или хотя бы пытаться писать) программы (или части программ) такие бесполезные, что даже коллегам не всегда легко объяснить "зачем". Программы, создание которых просто радовало/забавляло вас. Программы, не предназначенные  (и не предполагаемые) ни для бытового/коммерческого применения, ни для соревнований и т.п.

Ну правда не включая вещи типа "когда я только учился, я написал программу складывающую числа от 1 до 100" - не потому, что это не относится, а потому что через подобное все прошли... Впрочем границу между "учебными" и "бесполезными" или "бесполезными" и "научными" программами трудно провести точно... Также не ясна граница со случаями когда мы пишем программы, которые будут неприменимы из-за того, что уже есть более качественные аналоги... ;-)

Примеры:

1) Как-то раз прочёл в журнале (или ещё где-то) статью о самообучающихся алгоритмах для несложных игр - и к ней письмо читателя, который утверждал что то ли он, то ли его коллега, пробовал заставить два самообучающихся алгоритма играть друг с другом и они, якобы, ничему не научились (мол, дурак дурака не научит). Мне это показалось полной туфтой (ну да не будем это обсуждать) - и я довольно много времени убил на самообучающиеся крестики-нолики или ещё что-то, правда в силу неопытности до конца так и не довёл.

2) Однажды нужно было писать какой-то курсовик с квази-БД про студентов и прочую ерунду - и было мне так скучно, этим заниматься, что я попытался создать механизм для не-реляционной БД (хотя знаний у меня подходящих не было). Попытался я делать это на Лиспе, т.к. "базу" я хотел представить в виде дерева с довольно произвольными связями между объектами, их свойствами и другими объектами. И тут я понял что у меня могут быть циклические связи, а имевшиеся у меня интерпретаторы либо не давали замкнуть списки в кольцо, либо висли при попытке обработки такой структуры. Ну и в общем я засел за создание интерпретатора пусть примитивного, но умеющего и создавать и работать не только со списками (деревьями) но и с произвольными графами вообще.
Ага, закончил за три дня до сдачи курсовика и понял что сам-то курсовик с места не сдвинулся. В общем на скорую руку написал "Студенческую БД" на своём интерпретаторе и сдал - правда по разочарованному лицу преподавателя я понял что он даже читать не стал, т.к. отчёт больше инструкцию напоминал... ;-)
  • Проголосовать: нравится
  • +15
  • Проголосовать: не нравится

13 лет назад, # |
Rev. 3   Проголосовать: нравится +2 Проголосовать: не нравится

Как-то решил познакомиться с языком логического программирования "Пролог", первым делом попробовал решить на нём т.н. "загадку Эйнштейна". Был приятно удивлён тем, насколько простым и элегантным получилось решение! Тем не менее, к сожалению, на практике больше его использовать не приходилось - процедурные языки, всё-таки, привычнее...
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    М-да... Когда я Пролог пытался выучить и через некоторое время спросил людей "а зачем он вообще нужен" - мне как раз и сказали что один из примеров - решение "логических" задачек где есть 8 человек, 8 имён, 8 специальностей и т.п.

    Т.е. на нём очень удобно описывать "тупо переборные" задачи... Как мне показалось... Спасибо, кстати, за идею... Надо самому попробовать эту задачу решить... ;-)
13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
Я как то прочитал про парадокс Монти-Холла, не поверил в него и написал программу, которая, к моему удивлению, подтвердила его справедливость :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Она задавала тебе вопросы ? Просто не совсем понимаю, как прога эмулировала работу.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Сперва размещал приз в одной из шкатулок,   выбирал произвольную шкатулку, затем ведущий открывал какую-либо из пустых шкатулок. После этого эмулировал сразу оба случая - если поменяю решение и если нет.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Совсем недавно писал интерпретатор какого-нибудь языка программирования по заданию в универе, в качестве языка был выбран лисп. Львиную долю времени и сил убил на изучение\создание возможности подключения С-шных динамических библиотек. Хотя куда-нибудь применить это дело в итоговой программе (программируемый бот для одной простенькой игры) так и не удалось =)
13 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится
Что-то внутри меня подсказывает, что я очень часто пишу бесполезные программы, т.к. увлекаюсь олимпиадным программированием. Несмотря на то, что этот пункт попадает под указанную тобой категорию "программы для соревнований" :-)

По теме: пару лет назад пытался применить знания программирования в полезное русло. Написал 2 простеньких бота:

1) Для игры в "Diablo II LOD" на battle.net. Как известно, при убийстве крутых боссов выпадают вещи, по цвету названия которых можно судить об их качестве. Но реакция человека-обыкновенного (не путать с человеком-корейским) не позволяет успеть нажать на них быстрее конкурентов, дабы подобрать :)) Так вот, простенькая программа на java по мере сил устраняла рассовую дискриминацию...

2) Что-то в духе 1 для "PokerStars". Анализ вероятностей покерных комбинаций "на лету".

Не скажу, что в обоих случаях преуспел, но фан и определенную пользу извлекать получалось...
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А можно поподробнее по второму пункту?
    В каком виде реализовывал и насколько полезным оказалось?
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

      Можно. Все было очень тривиально. Области экрана, где отображались иконки карт, программа захватывала и распознавала. С учетом этой информации рассчитывались вероятности карточных комбинаций у игроков. Еще писал бота, который это анализировал и кликал соответствующие кнопочки "фолд", "райз" и др. С использованием java.awt.Robot. В идеале, хорошо написанный ИИ может зарабатывать деньги. Но мой был тривиальный, писался ради фана, да и покером я не очень увлекаюсь. Но не исключаю, что хороший покерист-алгоритмист сможет на этом заработать :)
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Если только бан
        • 13 лет назад, # ^ |
            Проголосовать: нравится +3 Проголосовать: не нравится
          Да, идея не нова. Однако, при аккуратном (рандомизированном?) подходе, достаточно тяжело различить. ИМХО. В особенности, если при написании программы хорошо помнить и понимать перспективу бана...
          • 13 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится
            Можно "разбавлять" своей реальной игрой периодически... Сам часто задумываюсь о написании чего-то подобного просто для оценки своих шансов. Хотя, смысла в этом большого нет, так как при наличии опыта- вижу сам свои шансы прекрасно.
            Другое дело- интеллектуальный обучаемый бот:) С какой-нибудь нейронкой для принятия решений и другими плюшками. Так и правда, наверное, деньги может зарабатывать.
13 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Летом после первого курса написала программу, которая рисовала 3D-тела с точечной подсветкой, с вычислением освещенности каждой точки отдельно. Это, пожалуй, было единственной программой, которую я писала из чистого интереса и никуда не пристроила - а так я люблю все написанное использовать, в идеале не по одному разу :-)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А кто нибудь может без бумажки решить "загадку Эйнштейна", опираясь на свой прокачанный или данный от природы мозг?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +20 Проголосовать: не нравится
    Пока я писал это сообщение, он решил её.
    Дважды.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +14 Проголосовать: не нравится
    Прочитал твою запись, попробовал:)
    Смог за 45 минут! Это было весело, особенно кричать на всю квартиру "Так! А немец где живет?" и т.п.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Без бумажки в уме? Что-то мне подсказывает, что это нелегко...
      На бумажке решал в школе, примерно за это же время.

      upd: посмотрел ссылку, казалось там больше параметров. Нет, пожалуй на бумажке гораздо быстрее. Но в уме по прежнему гемор :)
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Да)
        Просто надо по несколько раз повторять те сведения, которые тебе кажутся значимыми. Иначе все забудешь:) В самом конце цвета домиков, их номера и национальности жителей у меня переводились друг в друга моментально)))
        И не сдаваться:)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    IMHO эта задача/загадка по большому счёту не стоит того чтобы её решать на бумажке или без, тем более что как минимум половина формулировок малость неточны...  Я её помнится решал (с бумажкой, конечно) минут 20, но восторга от ответа не получил, потому что само условие слишком длинно описывается и я уже начал забывать "кто кого побил и когда" (с) Лем... ;-)

    Вот для экспериментов с прологом - это да, отличный материал...
13 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Самая первая написанная мною программа выводила тип треугольника по заданной длине сторон. В дальнейшем я часто писал вещи, которые были подчинены сиюминутному интересу: ботов для простых игр, проверку уже упоминавшегося здесь парадокса Монти Холла, игру "Жизнь". Всё это, правда, писалось давно, ещё на Бейсике.
Однажды где-то услышал, что 13 число в григорианском календаре чаще всего выпадает на пятницу. Проверил.

13 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Писал шахматный движок для Winboard, пока он не стал меня регулярно обыгрывать.