Pull to refresh

Comments 152

Почему-то вспомнились блок-схемы на уроках по программированию, которые я всегда рисовал уже по написанному коду :)
Где ты «ЛОГО» с черепашкой
ЛОГО — мульти-парадигмальный язык, на котором можно обучать как императивному, так и функциональном программированию. А Basic…

«Практически невозможно научить хорошему стилю программирования студентов, которые раньше имели дело с Бейсиком; в качестве программистов они умственно покалечены без надежды на восстановление». Дейкстра.
Scratch куда более занятная (чем какой-то там Basic) вещь.
Ха-ха. Надо выпускать пазлы для программистов. «От 2 до 4 лет опыта С/С++»
Кто возьмется писать синтаксический анализатор с компилятором под андроид/iOS/WP7? Чтобы фотографировать пазл и дебажить его :}
Со страницы Stencil:

Our drag-and-drop gameplay designer pays homage to the successful MIT Scratch project. We extend Scratch's simple block-snapping interface with new functionality and hundreds of ready-to-use blocks, including special blocks for native iOS features.
Еще, помнится, в начале 2k был такой игровой движок — Virtool. Позволял код писать как вручную, так и путем составления блоков. Какое-то время с ним баловался — забавная штука.
arduino.tw/wp-content/uploads/Image/0001-1280x998.png
По всей видимости, мой вариант самый короткий)
image
Какой-то наприличный жест получился ;)
not убрать еще можно
Разве он в кольце не зациклится?
Я про трансформацию

if not A then B else C == if A then C else B


Правда он в стену постоянно ходит :)
Если я ничего не путаю, то из представленных решений, при минимальном количестве элементов, по общепроходной эффективности он тре-тий(2), а для конкретно этого лабиринта — второй(2).
№1 дает — 63 хода на 8 элементов.
№2 дает(2) — 27 ходов на 6 элементов.
Мой (трансформированный alno) дает — 27 ходов на 8 элементов.
При этом все его проходят.
Так что баланс выдержан по фэн-шую)
з.ы. самый заточеный вроде этот — минимальные 15 ходов на 11 элементов.
Поворот это ход?
тут сколько?
<img src="" alt=«image»/>
Конечно, отдельное действие. 39.
Лучшим был бы вариант, имхо, который ни разу не «тыркнется» в стену и с минимальным числом ходов. Но в любом случае для универсального алгоритма обхода лабиринта не хватает списков, которые есть только в полной версии Blockly.
Ну вот я ведь вам уже ответил. Этот ни разу не тыркается, минимальное число ходов, а проще этого, похоже, вообще не придумать.
можно сделать минимальное количество ходов, НО в данном лабиринте, в другом этот же алгоритм покажет себя не лучшим образом и выиграет другой алгоритм. Все же я считаю что алгоритм должен быть универсальным.
Так речь и не идет о минимуме ходов, главное в стену не пытаться идти :)
А для универсального алгоритма нужна поддержка списков.
Вот вам тогда гирляндочный вариант ;)
image
а зачем два раза ходить вперед? так же можно пропустить поворот
Да блин, это конкретная реализация под данный лабиринт.
Кто сделает проще?) Минимальные 15 ходов на 8 элементов.
image


ps. Не смотря на то, что использовал 7 элементов, лично мне такой вариант не по душе.
Кажется, эффективнее уже некуда. Действительно. Вы отобрали первенство)
Еще можно repeat убрать.
Ай, нельзя точно, бес попутал (
Читать, читать, проверять, потом только писать (
не универсальное решение… а если маршрут немного изменится…
и заработает наверное только на данном лабиринте?
вообще в идеале чтобы лабиринт генерить можно было бы рандомный
Ух как вас занесло… На каком языке пишете?
UFO just landed and posted this here
Третий вариант особо суровый.
И пусть хоть кто-то скажет, что задача не решена :))
UFO just landed and posted this here
UFO just landed and posted this here
Извините, но учитывая, что Вы написали „ни одного лишнего движения”, я не понимаю — причём тут условия и циклы? Ведь изначально Вы имели ввиду „скорости прохождения лабиринта”, а не „скорости выполнения кода”.
Я так и сделал. Дизайнер, блин)
Наглядное представление различия в мышлении программиста и обычного человека. (Не сарказм )
>и обычного человека
Ну конечно, какой уж тут сарказм. Это пафос называется :} Малаца)
выглядит, как будто в лабиринте человечек, дойдя до значка, вешается на нём)
интересно, что они этим хотели сказать

Алгоритм левой руки :)
Надеюсь, без ошибок. А вообще, неправильно они подошли к графическому представлению. В таком виде оно не сильно помогает понять ход программы.
Ох блин, ahead можно было поменять на to the left. Не догадался :)
Мне кажется моя интерпретация этого правила не так лаконична, но более правильна:
Или вот так, если хотим, чтобы наш герой не бился об стены:
Посмотрите внизу, у меня не бьётся, проходит любой лабиринт, меньше блоков… И правило всё то же.
Да, уже увидел. Красиво.
Да говорю же, не знал о том что можно проверять стену по сторонам, поэтому пришлось извернуться :) Неочевидно сделали. turn left и turn right есть отдельными блоками, а wall только ahead.
Надо было сделать, чтобы после трех ударов головой об стену, к примеру, человечек погибал. Тогда было бы интереснее.
PS. это решение похоже на моё =).
UFO just landed and posted this here
Эээ… Ну, наверно, это должно быть интересно…
Но у меня, честно говоря, впечатление, что это недоGUI и недоСредаРазработки… Может быть, конечно, это дело привычки. Но программирование оно программирование же. Текст то бишь.
Есть, конечно, то же визуальное программирование в Robotics Developer Studio, но там это похоже скорее на блок-схему. А тут как-то слишком много картинок на квадратный пиксель. Ну и да, ядрёные цвета-то какие! :)
На хабре очень не любят эту картинку почему-то :)
Из-за фразы после многоточия. Как это ЗАЧЕМ? Затем что это интересно :3 (я не конкретно про троллейбус, а про сборку различных вундервафль из подручных материалов)
Троллейбус из подручных материалов — это тоже интересно
Потому что ее вставляют где ни попадя ;)
Да задолбала эта картинка уже.
Я так понимаю все предложенные выше варианты программы выходят из конкретно этого лабиринта?
Если его отразить зеркально (или в программе поменять left на right), то работать не будет?
Кто-то уже написал универсальный алгоритм? ;)
Половина предложенных вариантов используют классический алгоритм обхода правой(левой) руки. Но не все лабиринты можно пройти подобным способом, можно попасть в бесконечный цикл. Поэтому, если наложить на лабинт некоторые ограничения, то можно считать эти решения универсальными.
Вот и я о том, что если поменять правило, то человечек погибнет с голоду в левом верхнем углу.
А рука для правила выбрана только глядя на лабиринт.
Т.е. если бы в ладиринте был такой же закоулок справа, то хана человечку. решения нет?
Выше писали алгоритм по «правилу левой руки». Для односвязных лабиринтов он универсален.
они одинаковы, берите любую)
Докажите ;)
Сравните
image
и

Во втором варианте человечек погибает…
UFO just landed and posted this here
Объясните разницу в алгоритмах и дополнительный move forward?
UFO just landed and posted this here
Да я знаю теорию. Вот только в Вашем алгоритме человечек, дойдя до в хода в кольцевую, разворачивается, а по правилу левой руки должен держаться стены и зайти в кольцевую…
UFO just landed and posted this here
Действительно.
Даже скопипастить не смог %(
Еще бы можно было делать ссылки на «программы»…
UFO just landed and posted this here
Перефразирую свой вопрос: у кого получилось вывести человечка из левого верхнего угла, если он туда попал?
У меня, смотрите ниже мой комментарий.
Спасибо! Это именно оно.
Например, мой вариант подходит только для этого лабиринта. Но вместо универсальности, я выбрал скорость и простоту — человек идёт прямо к финишу за считанные секунды, не останавливаясь/поворачиваясь там где этого не нужно.

Но, если Вы хотите универсальный вариант, можно использовать правилу левой/правой руки. Однако, в таком случае быстро его (лабиринт) не пройти.
Это невозможно читать, никому
UFO just landed and posted this here
Можно поэкспериментировать со стороной, по которой будет обойдет лабиринт:
И даже прогуляться по кольцевой:
UFO just landed and posted this here
Да, крутая мозгодробилка)
Прошел. 185 очков. 10-й уровень показался самым сложным.
Спасибо! Придется играть :)
Уровней бы побольше эдак на пару порядков.
Если убрать цветные блоки и оставить только текст, разве не будет понятнее? Даже для начинающих. Не будет ли их смущать это цветовая мельтешня?
Мне кажется для совсем начинающих цвет тоже может немного помочь, по нему можно отличить классы методов (действия, математические операции, работа с выводом и т.д.), другое дело что всё это получается довольно громоздко и нечитабельно.
Неа, тоже не бьется вроде как ) сейчас лень собирать по новой
Очевидно же, что это обучающий язык и предназначен для знакомства с программированием, а не для реальной разработки. Так что и цвета в тему и построение блоков :)
Будто нельзя для обучения подобрать приятные цвета :)
ИМХО, разве что яркими цветами :) Хотя в Piet не обязательно яркие использовать, вроде.
напомнило в школе кенгуренка. Он мог еще хвостом рисовать (опустить \ поднять хвост). И чем--то Логомиры на маке.

Здорово, на самом деле. Деткам должно понравится. Не понял только почему именно эти языки выбраны (js, dart и питон). Есл есть js, то с дартом понятно. Но питон… И почему не другие
В гугле любят питон и яву. Ну в яву переводить не слишком целесообразно, зато понятно почему питон.
В Maze только один лабиринт? Интересно получилось, поигрался, порешал. Добротная почти полноценная игра получилась.
Бьсюь об заклад, что нормальный девелопер напишет кусок кода на своем языке в разы быстрее, чем дергать мышкой туда-сюда.

Так в чем же прикол?

P.S. Визуальное программирование годится только для того, что бы упростить процесс обучения программированию детей. Но, по-моему Scratch с этими целями весьма отлично справляется.

P.P.S. А для обмена языко-платформо-независимыми данными вполне отлично можно пользоваться такими вещами, как XML/JSON/What ever else.
мой вариант поиска выхода из лабиринта:
image
Действительно интересная штуковина) Соглашусь с обучением, агитировал бы в школьную программу!
Было бы меньше прицепов в универах, которым приходилось построчно рассказывать что написано в коде.

зы: еще проснулась ностальгия по eJay (хоть и другая тема… но моторика перетаскивания блоков у меня зародилась именно там).
Меня одного смутил «экпортированный» js-код?

Глюки(
код:
for (i = 0; i <= n; i++) {
  A[i - 1] = true;
}

Выглядит очень интересно, но есть одно НО: очень похожая вещь (по крайней мере, похожая в основном функционале, не считая экспорт в JS и т.д.) давно уже существует: Scratch Programming Language, разработан в MIT: scratch.mit.edu/ и достаточно популярен на Западе, используется для обучения программированию в младших классах в школах. IDE программы — на локальном компьютере, но скомилированную программу можно конвертировать в нечто Java class — подобное, загрузить на веб-сайт проекта и запускать из браузера. Я бы посоветовал связаться с разработчиками Scratch и продолжать работать вместе с ними (MIT, как ни как).
А я вот создал AI для бойца прикрывающего отход отряда от догоняющих зомби. Передвигается всегда смотря назад, когда попадает в тупик, контратакует до ближайшего перекрёстка и затем опять возвращается в роль прикрывающего.
Что-то вроде этого получилось:
У вас алгоритм работает только в условиях конкретно данного лабиринта, по-правильному всегда нужно придерживаться одной стороны стены.
Видимо я чего то не понимаю… Если лабиринт поменять на другой до конца может не дойти ни у кого. Поправьте меня, если я ошибаюсь, но разве можно написать универсальный алгоритм прохода по лабиринту, без запоминания пройденного пути?
не знаю… но по сути это просто перебор всех вариантов и один из них явно будет выигрышным
Может и не быть, ведь если закольцевать ветку лабиринта он всегда будет по кругу ходить…
Да, есть алгоритмы для решения этих задач, там выше давали ссылку на их описание. И я привёл пример реализации.

Вкратце — нужно идти по лабиринту так, чтобы правая (или левая) рука постоянно касалась стенки, тогда дойдя к кольцу вы пройдёте по нему и пойдёте дальше под противоположной стеной. Недостаток — не лучшее время решения задачи.
UFO just landed and posted this here
Мой 6ти летний племянник так не считает.
Попробуйте Scratch, у него есть русский интерфейс.
Перевод, правда, иногда вызывает вопросы.
Ну примеры и в нем есть на русском
Там же пощелкайте по ссылкам:

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.

у меня все открывались в русском языке(у всех был выбор языка).
Не удержался и попробовал сделать свой вариант :)
Ох, как жаль, что я узнал об этом так поздно. Жена бы в школе заюзала на уроках информатики.
Через год, другой закроют эту «игрушку».
Много лишних движений, после каждого шага поворачивать и потом выравнивать позицию…
Прочитав заголовок подумал: «LabVIEW от Google...» и ужаснулся т.к. до жути не любил его в университете, но эта штука будет по-интереснее…
Не заметил, можно убрать If и получится ответ как тут
Sign up to leave a comment.

Articles