Напишите программу или функцию, которая принимает положительное целое число N (через стандартную строку / командную строку / функцию arg) и печатает или возвращает строковое представление двумерного случайного блуждания длиной N шагов, извлеченного из косых черт: /
\
(плюс пробелы и новые строки для пробелов).
Двумерное случайное блуждание начинается в начале бесконечной целочисленной решетки . Затем N раз многократно, случайное направление (вверх, вниз, влево, вправо) выбирается случайным образом равномерно, и ходок перемещается на одну единицу в этом направлении. Полученный путь - случайная прогулка.
Вот случайное блуждание для N = 6. Обратите внимание, что оно движется обратно на себя, когда достигает (-1, 3).
Чтобы нарисовать это косыми чертами, нам нужно повернуть все это на 45 ° по часовой стрелке. Оси, начальная и конечная точки не отображаются в версии с косой чертой.
/
\
\
/\
Более сложная прогулка, как это (N = 20, хотя нет никакого способа сказать):
Стало бы это:
/
/\/ /\
\/\/
/\/
\/
Ваша программа должна генерировать слэшированные версии случайных прогулок. Вы должны случайным образом выбирать каждое новое направление, по которому идет прогулка, поэтому каждый запуск программы для определенного N почти наверняка приведет к другой прогулке. (Псевдослучайность в порядке.)
Никогда не должно быть никаких пустых строк выше или ниже самой нижней и самой верхней косой черты (за исключением одной необязательной завершающей строки), и никогда не должно быть пустых столбцов с пробелами до или после крайней левой и правой косой черты.
Таким образом, для N = 1 вывод всегда /
или \
, но никогда не похож на:
/
Задние пробелы допускаются, если они не проходят мимо столбца самой правой косой черты.
Представление с наименьшим количеством байтов выигрывает. Вот удобный счетчик байтов.
Ответы:
Pyth, 74 байта
Еще более оптимизированный перевод ответа Ури Зарфати.
источник
"\
- конечно, здесь нет случайности, но это правильная прогулка каждый раз!Python 2,
300285257246236 байтЧто-то, чтобы начать вещи. Должно быть возможно уменьшить это далее. Спасибо @Maltysen за бритье 10 байтов.
Генерирует выходные данные прогулки в словарь G посещенных (x, y) кортежей, обновляя наше местоположение по мере продвижения. Каждый случайный шаг n является либо u / d (u), либо l / r (l).
источник
"".join
помощьюj in f(1)
цикла и печати напрямую.PHP 5,5 - 209 байт
Ungolfed:
Начал работать над PHP-ответом с нуля, но окончательный код слишком напоминал работу @Uri Zarfaty, поэтому у меня действительно не хватило смелости его опубликовать. Закончилось портирование указанного ответа с несколькими модификациями вместо этого. Выталкивает X / Y значения в
$X
и$Y
массивы для определения мин / макс в выходном контуре.Использование:
источник
Пиф - 89
Это в основном перевод ответа Ури Зарфати, хотя я и сделал некоторые оптимизации.
Объяснение скоро.
Попробуй это здесь .
источник