Комментарии 153
Почему-то вспомнились блок-схемы на уроках по программированию, которые я всегда рисовал уже по написанному коду :)
Где ты «ЛОГО» с черепашкой
Здесь msdn.microsoft.com/en-us/devlabs/cc950524.aspx. Это сайт Майкрософтовского Small Basic, в котором существует API для реализации функций Turtle Logo.
И здесь logo.codeplex.com/
И здесь logo.codeplex.com/
ЛОГО — мульти-парадигмальный язык, на котором можно обучать как императивному, так и функциональном программированию. А Basic…
«Практически невозможно научить хорошему стилю программирования студентов, которые раньше имели дело с Бейсиком; в качестве программистов они умственно покалечены без надежды на восстановление». Дейкстра.
«Практически невозможно научить хорошему стилю программирования студентов, которые раньше имели дело с Бейсиком; в качестве программистов они умственно покалечены без надежды на восстановление». Дейкстра.
Ха-ха. Надо выпускать пазлы для программистов. «От 2 до 4 лет опыта С/С++»
Авторы явно вдохновлялись языком Scratch
Еще, помнится, в начале 2k был такой игровой движок — Virtool. Позволял код писать как вручную, так и путем составления блоков. Какое-то время с ним баловался — забавная штука.
arduino.tw/wp-content/uploads/Image/0001-1280x998.png
arduino.tw/wp-content/uploads/Image/0001-1280x998.png
Выбрался из лабиринта!
А я так:
По всей видимости, мой вариант самый короткий)
Какой-то наприличный жест получился ;)
not убрать еще можно
Правда он в стену постоянно ходит :)
Если я ничего не путаю, то из представленных решений, при минимальном количестве элементов, по общепроходной эффективности он тре-тий(2), а для конкретно этого лабиринта — второй(2).
№1 дает — 63 хода на 8 элементов.
№2 дает(2) — 27 ходов на 6 элементов.
Мой (трансформированный alno) дает — 27 ходов на 8 элементов.
При этом все его проходят.
Так что баланс выдержан по фэн-шую)
з.ы. самый заточеный вроде этот — минимальные 15 ходов на 11 элементов.
№1 дает — 63 хода на 8 элементов.
№2 дает(2) — 27 ходов на 6 элементов.
Мой (трансформированный alno) дает — 27 ходов на 8 элементов.
При этом все его проходят.
Так что баланс выдержан по фэн-шую)
з.ы. самый заточеный вроде этот — минимальные 15 ходов на 11 элементов.
Поворот это ход?
тут сколько?
<img src="" alt=«image»/>
тут сколько?
<img src="" alt=«image»/>
Лучшим был бы вариант, имхо, который ни разу не «тыркнется» в стену и с минимальным числом ходов. Но в любом случае для универсального алгоритма обхода лабиринта не хватает списков, которые есть только в полной версии Blockly.
можно сделать минимальное количество ходов, НО в данном лабиринте, в другом этот же алгоритм покажет себя не лучшим образом и выиграет другой алгоритм. Все же я считаю что алгоритм должен быть универсальным.
Вот вам тогда гирляндочный вариант ;)
Кто сделает проще?) Минимальные 15 ходов на 8 элементов.
ps. Не смотря на то, что использовал 7 элементов, лично мне такой вариант не по душе.
Кажется, эффективнее уже некуда. Действительно. Вы отобрали первенство)
не универсальное решение… а если маршрут немного изменится…
Прочитайте, пожалуйста, этот комментарий.
и заработает наверное только на данном лабиринте?
вообще в идеале чтобы лабиринт генерить можно было бы рандомный
вообще в идеале чтобы лабиринт генерить можно было бы рандомный
Ух как вас занесло… На каком языке пишете?
НЛО прилетело и опубликовало эту надпись здесь
мой вариант
мои 3 варианта
Третий вариант особо суровый.
И пусть хоть кто-то скажет, что задача не решена :))
НЛО прилетело и опубликовало эту надпись здесь
А этот вариант не считается? ;)
Я так и сделал. Дизайнер, блин)
Наглядное представление различия в мышлении программиста и обычного человека. (Не сарказм )
Аналог:
: Р
: Р
выглядит, как будто в лабиринте человечек, дойдя до значка, вешается на нём)
интересно, что они этим хотели сказать
интересно, что они этим хотели сказать
не хавтает кармы на картинку
habrastorage.org/storage2/572/3db/c0a/5723dbc0a9e271b3e1c1fd5ea59a6d4f.png
habrastorage.org/storage2/572/3db/c0a/5723dbc0a9e271b3e1c1fd5ea59a6d4f.png
Алгоритм левой руки :)
Надеюсь, без ошибок. А вообще, неправильно они подошли к графическому представлению. В таком виде оно не сильно помогает понять ход программы.
Ох блин, ahead можно было поменять на to the left. Не догадался :)
Мне кажется моя интерпретация этого правила не так лаконична, но более правильна:
Или вот так, если хотим, чтобы наш герой не бился об стены:
Посмотрите внизу, у меня не бьётся, проходит любой лабиринт, меньше блоков… И правило всё то же.
Да говорю же, не знал о том что можно проверять стену по сторонам, поэтому пришлось извернуться :) Неочевидно сделали. turn left и turn right есть отдельными блоками, а wall только ahead.
Надо было сделать, чтобы после трех ударов головой об стену, к примеру, человечек погибал. Тогда было бы интереснее.
PS. это решение похоже на моё =).
PS. это решение похоже на моё =).
Интересно применять такое в образовании
НЛО прилетело и опубликовало эту надпись здесь
Предлагаю такой вариант:
Эээ… Ну, наверно, это должно быть интересно…
Но у меня, честно говоря, впечатление, что это недоGUI и недоСредаРазработки… Может быть, конечно, это дело привычки. Но программирование оно программирование же. Текст то бишь.
Есть, конечно, то же визуальное программирование в Robotics Developer Studio, но там это похоже скорее на блок-схему. А тут как-то слишком много картинок на квадратный пиксель. Ну и да, ядрёные цвета-то какие! :)
Но у меня, честно говоря, впечатление, что это недоGUI и недоСредаРазработки… Может быть, конечно, это дело привычки. Но программирование оно программирование же. Текст то бишь.
Есть, конечно, то же визуальное программирование в Robotics Developer Studio, но там это похоже скорее на блок-схему. А тут как-то слишком много картинок на квадратный пиксель. Ну и да, ядрёные цвета-то какие! :)
На хабре очень не любят эту картинку почему-то :)
Я так понимаю все предложенные выше варианты программы выходят из конкретно этого лабиринта?
Если его отразить зеркально (или в программе поменять left на right), то работать не будет?
Кто-то уже написал универсальный алгоритм? ;)
Если его отразить зеркально (или в программе поменять left на right), то работать не будет?
Кто-то уже написал универсальный алгоритм? ;)
Половина предложенных вариантов используют классический алгоритм обхода правой(левой) руки. Но не все лабиринты можно пройти подобным способом, можно попасть в бесконечный цикл. Поэтому, если наложить на лабинт некоторые ограничения, то можно считать эти решения универсальными.
Вот и я о том, что если поменять правило, то человечек погибнет с голоду в левом верхнем углу.
А рука для правила выбрана только глядя на лабиринт.
Т.е. если бы в ладиринте был такой же закоулок справа, то хана человечку. решения нет?
А рука для правила выбрана только глядя на лабиринт.
Т.е. если бы в ладиринте был такой же закоулок справа, то хана человечку. решения нет?
Выше писали алгоритм по «правилу левой руки». Для односвязных лабиринтов он универсален.
Почему не правой?
они одинаковы, берите любую)
Докажите ;)
Сравните
и
Во втором варианте человечек погибает…
Сравните
и
Во втором варианте человечек погибает…
НЛО прилетело и опубликовало эту надпись здесь
Объясните разницу в алгоритмах и дополнительный move forward?
НЛО прилетело и опубликовало эту надпись здесь
Да я знаю теорию. Вот только в Вашем алгоритме человечек, дойдя до в хода в кольцевую, разворачивается, а по правилу левой руки должен держаться стены и зайти в кольцевую…
НЛО прилетело и опубликовало эту надпись здесь
Перефразирую свой вопрос: у кого получилось вывести человечка из левого верхнего угла, если он туда попал?
Например, мой вариант подходит только для этого лабиринта. Но вместо универсальности, я выбрал скорость и простоту — человек идёт прямо к финишу за считанные секунды, не останавливаясь/поворачиваясь там где этого не нужно.
Но, если Вы хотите универсальный вариант, можно использовать правилу левой/правой руки. Однако, в таком случае быстро его (лабиринт) не пройти.
Но, если Вы хотите универсальный вариант, можно использовать правилу левой/правой руки. Однако, в таком случае быстро его (лабиринт) не пройти.
Это невозможно читать, никому
НЛО прилетело и опубликовало эту надпись здесь
Мой вариант не быстрее?
НЛО прилетело и опубликовало эту надпись здесь
Если убрать цветные блоки и оставить только текст, разве не будет понятнее? Даже для начинающих. Не будет ли их смущать это цветовая мельтешня?
А я вот так выбрался :)
Очевидно же, что это обучающий язык и предназначен для знакомства с программированием, а не для реальной разработки. Так что и цвета в тему и построение блоков :)
напомнило в школе кенгуренка. Он мог еще хвостом рисовать (опустить \ поднять хвост). И чем--то Логомиры на маке.
Здорово, на самом деле. Деткам должно понравится. Не понял только почему именно эти языки выбраны (js, dart и питон). Есл есть js, то с дартом понятно. Но питон… И почему не другие
Здорово, на самом деле. Деткам должно понравится. Не понял только почему именно эти языки выбраны (js, dart и питон). Есл есть js, то с дартом понятно. Но питон… И почему не другие
В Maze только один лабиринт? Интересно получилось, поигрался, порешал. Добротная почти полноценная игра получилась.
Бьсюь об заклад, что нормальный девелопер напишет кусок кода на своем языке в разы быстрее, чем дергать мышкой туда-сюда.
Так в чем же прикол?
P.S. Визуальное программирование годится только для того, что бы упростить процесс обучения программированию детей. Но, по-моему Scratch с этими целями весьма отлично справляется.
P.P.S. А для обмена языко-платформо-независимыми данными вполне отлично можно пользоваться такими вещами, как XML/JSON/What ever else.
Так в чем же прикол?
P.S. Визуальное программирование годится только для того, что бы упростить процесс обучения программированию детей. Но, по-моему Scratch с этими целями весьма отлично справляется.
P.P.S. А для обмена языко-платформо-независимыми данными вполне отлично можно пользоваться такими вещами, как XML/JSON/What ever else.
мой вариант поиска выхода из лабиринта:
Действительно интересная штуковина) Соглашусь с обучением, агитировал бы в школьную программу!
Было бы меньше прицепов в универах, которым приходилось построчно рассказывать что написано в коде.
зы: еще проснулась ностальгия по eJay (хоть и другая тема… но моторика перетаскивания блоков у меня зародилась именно там).
Было бы меньше прицепов в универах, которым приходилось построчно рассказывать что написано в коде.
зы: еще проснулась ностальгия по eJay (хоть и другая тема… но моторика перетаскивания блоков у меня зародилась именно там).
Меня одного смутил «экпортированный» js-код?
Выглядит очень интересно, но есть одно НО: очень похожая вещь (по крайней мере, похожая в основном функционале, не считая экспорт в JS и т.д.) давно уже существует: Scratch Programming Language, разработан в MIT: scratch.mit.edu/ и достаточно популярен на Западе, используется для обучения программированию в младших классах в школах. IDE программы — на локальном компьютере, но скомилированную программу можно конвертировать в нечто Java class — подобное, загрузить на веб-сайт проекта и запускать из браузера. Я бы посоветовал связаться с разработчиками Scratch и продолжать работать вместе с ними (MIT, как ни как).
А я вот создал AI для бойца прикрывающего отход отряда от догоняющих зомби. Передвигается всегда смотря назад, когда попадает в тупик, контратакует до ближайшего перекрёстка и затем опять возвращается в роль прикрывающего.
Что-то вроде этого получилось:
У вас алгоритм работает только в условиях конкретно данного лабиринта, по-правильному всегда нужно придерживаться одной стороны стены.
Видимо я чего то не понимаю… Если лабиринт поменять на другой до конца может не дойти ни у кого. Поправьте меня, если я ошибаюсь, но разве можно написать универсальный алгоритм прохода по лабиринту, без запоминания пройденного пути?
не знаю… но по сути это просто перебор всех вариантов и один из них явно будет выигрышным
Да, есть алгоритмы для решения этих задач, там выше давали ссылку на их описание. И я привёл пример реализации.
Вкратце — нужно идти по лабиринту так, чтобы правая (или левая) рука постоянно касалась стенки, тогда дойдя к кольцу вы пройдёте по нему и пойдёте дальше под противоположной стеной. Недостаток — не лучшее время решения задачи.
Вкратце — нужно идти по лабиринту так, чтобы правая (или левая) рука постоянно касалась стенки, тогда дойдя к кольцу вы пройдёте по нему и пойдёте дальше под противоположной стеной. Недостаток — не лучшее время решения задачи.
Есть подобное на русском?
НЛО прилетело и опубликовало эту надпись здесь
Ну примеры и в нем есть на русском
Там же пощелкайте по ссылкам:
Puzzle — Learn how blocks work while solving this simple country quiz.
Maze — Use Blockly to solve a maze.
Turtle — Drawing with Blockly.
Graph — Blockly's graphing calculator.
Code — Export a Blockly program into JavaScript, Python or XML.
у меня все открывались в русском языке(у всех был выбор языка).
Там же пощелкайте по ссылкам:
Puzzle — Learn how blocks work while solving this simple country quiz.
Maze — Use Blockly to solve a maze.
Turtle — Drawing with Blockly.
Graph — Blockly's graphing calculator.
Code — Export a Blockly program into JavaScript, Python or XML.
у меня все открывались в русском языке(у всех был выбор языка).
Не удержался и попробовал сделать свой вариант :)
Почему-то не подтянулась картинка…
bigdig.com.ua/files/code.png
bigdig.com.ua/files/code.png
Ох, как жаль, что я узнал об этом так поздно. Жена бы в школе заюзала на уроках информатики.
Через год, другой закроют эту «игрушку».
Правило правой руки:
Прочитав заголовок подумал: «LabVIEW от Google...» и ужаснулся т.к. до жути не любил его в университете, но эта штука будет по-интереснее…
Вот мой вариант прохождения:
Извините, никак не могу понять зачем это?, в скрипте (python, Java etc) это выглядяит гораздо читабельнее чем на этих блоках,
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Визуальный язык программирования Google Blockly