Нарисуй путь муравья Лэнгтона .
Описание
Квадраты на плоскости окрашены в разные цвета: черный или белый. Мы произвольно определяем один квадрат как «муравей». Муравей может путешествовать в любом из четырех основных направлений на каждом шаге, который он предпринимает. Муравей движется по правилам ниже:
- На белом квадрате поверните на 90 ° вправо, измените цвет квадрата, продвиньтесь на одну единицу
- На черном квадрате поверните на 90 ° влево, измените цвет квадрата, продвиньтесь на одну единицу вперед
Характеристики
- Ввод: целое число N от 0 до 725 (включительно).
- Вывод: сетка 17 на 17, представляющая «путь» муравья на шаге N.
правила
- Муравей начинает смотреть направо (3 часа).
- Муравей начинается с центра сетки.
- Используйте
_#@
для белых квадратов, черных квадратов и муравья соответственно. - Сетка изначально полностью белая.
- Вы можете составить либо полную программу, либо функцию на интерпретируемом языке.
- Ввод с помощью стандартного ввода или аргумента.
Примеры
Обновление: вывод дела N = 450 был неправильным.
N = 0
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 1
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________#________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 450
_________________
_________________
___________##____
____##______##___
___#__##___##_#__
__###_#@#__#__#__
__#_#_#_#__#_#___
_____###___#_____
_____#___________
_____#__###______
___#_#_#__#_#_#__
__#__#_#____###__
__#_##__##___#___
___##______##____
____##___________
_________________
_________________
Ответы:
GolfScript - 67 символов
Python-решение hallvabo наиболее похоже на это, поэтому я опишу только основные отличия.
Доска хранится в виде строки вместо массива. Это сделано для того, чтобы мы могли обновить значение на доске с меньшим количеством символов (поскольку строки всегда плоские), и поэтому легко получить его в желаемом формате вывода.
Положение муравья увеличивается по формуле
((d&1)*17+1)*((d&2)-1)
(то есть.1&17*)\2&(*
), где d - направление. Мы используем переменную,6
чтобы мы могли пропустить инициализацию.источник
:6
- так хипстер. Я не хотел бы отлаживать ваш код :-)Ruby 1.9, 104 символа
Ввод через аргумент функции.
m
r*r>1
вместоr.abs>1
String#scan
для генерации вывода. Поменял==
на>
String#tr
условнымисточник
Питон, 123
Просто небольшая доработка моего решения на Python от http://golf.shinh.org/p.rb?Langtons+Ant .
источник
GolfScript
969489Мой любимый язык ненависти вернулся с еще одним набором получитаемого сорта-байт-кода.
В 89 версии мне наконец-то удалось интегрировать @ в выходной цикл.
94 версия:
комментарии:
Отредактируйте, я мог бы также сделать большую версию, здесь идет 59 * 59 и 10500 итераций:
,
источник
Windows PowerShell,
119118источник
PHP,
350309307312174161166159151149147144143Ungolfed
350 -> 309: Различные методы сжатия с циклами for (), также обновлены для отображения правильного вывода.
309 -> 307: преобразован основной цикл for () в цикл while ().
307 -> 312: Забыл изменить его на использование argv.
312 -> 174: перекодировано на основе другого ответа.
174 -> 161: больше не используется по умолчанию весь массив.
161 -> 166: Аргв снова побеждает.
166 -> 159: нет необходимости переопределять argv [1].
159 -> 151: больше ничего не используется по умолчанию, PHP делает это автоматически.
151 -> 149: убран набор скобок, порядок операций устраняет необходимость.
149 -> 147: укоротил последний цикл for (), фигурные скобки не нужны.
147 -> 144:Цикл Last for () теперь является циклом while ().
144 -> 143: используется временная переменная для сохранения символа.
источник
С
166162Вот перевод моего Delphi-подхода к C, демонстрирующий, насколько компактным может быть C. Я позаимствовал условный трюк новой строки у fR0DDY (спасибо, приятель!):
С отступом, прокомментированная версия выглядит следующим образом:
источник
"_@#"[g[i]]
иa+=(1-(d&2))*(1+(16*(d&1)))
(1+d%2*16)
сохраняет несколько символов.Дельфы, 217
Код с отступом и комментариями выглядит так:
Входные данные:
Выход :
источник
C 195 символов
http://www.ideone.com/Dw3xW
Я получаю это за 725.
источник
p+=t+4;x+=a[p%4];
вместоp=(p+t+4)%4;x+=a[p];
сохранения трех символов.sed, 481 символ
Может быть уменьшен до 478 символов путем удаления первой строки и запуска с
-n
Требуется N строк для ввода, например. когда беги как
выходы:
источник
Perl, 110 символов
Номер читается из первой строки STDIN. Остальная часть ввода игнорируется.
Чуть более читабельно:
Правки
(112 → 111) Нет необходимости обновлять
$d
со значением по модулю 4.(111 → 110) Теперь можно встроить
$d
приращениеПриложение (109 знаков)
Мы можем сделать его на один символ короче, если вы счастливы иметь особый случай
N=0
сбоя (он не выводит@
символ для муравья). Все остальные входы работают правильно:Различия в том, что мы теперь используем
%f
вместо того,@f
чтобы мы могли использовать отрицательные индексы, и мы итерируем-144..144
вместо0..288
. Это избавляет от необходимости инициализации$p
.источник
Mathematica, 94 символа
источник
> <>, 122 байта
Риск небольшой некромантии темы, я думал, что написать ответ в> <> было бы интересной задачей ...
Эта программа ожидает, что количество шагов для вычисления будет присутствовать в стеке перед выполнением.
источник