Ваша задача - написать программу, которая находит оптимальное количество ходов, необходимое для перехода из левого нижнего угла прямоугольника в правый верхний угол напротив.
Ваша программа примет входные данные в виде упорядоченной пары (width, height)
. Это будут размеры прямоугольника, с которым вы будете работать. Ваша программа создаст ASCII-арт решения (используйте .
для пустого квадрата и #
для части решения, X
для начального квадрата) и посчитайте количество ходов, необходимых для достижения конечной точки. Диагональные ходы не допускаются. Если существует несколько решений, выберите одно для вывода.
Самая короткая программа в байтах побеждает.
пример
Входные данные: (4, 5)
Выход:
..##
..#.
.##.
.#..
X#..
Количество ходов: 7
#
в «оптимальном решении» (какое решение всегда движется влево или вниз)?#
потому что нелогично идти влево или вниз.Ответы:
05AB1E ,
2724 байтаКод:
Объяснение:
Попробуйте онлайн! , Использует кодировку CP-1252 .
источник
Сетчатка ,
5453 байтаПринимает входные данные, разделенные переводом строки, и выводит сетку решения с последующим счетом перемещений.
Попробуйте онлайн!
объяснение
Превратите оба целых числа в это множество
.
s, то есть конвертируйте их в одинарные.Это строит сетку
.
s, сопоставляя каждый.
в одинарной высоте и захватывая унарное представление ширины.S
Активирует режим разделения , который возвращает захваченные строки, а|\D
и_
вместе убедиться , что все остальное удаляется из строки.Это превращает последний символ каждой строки, а также всю последнюю строку в
#
s.Здесь используется масса опций для преобразования только первого
#
в последней строкеX
(нам нужно убедиться, что только последние строки затронуты из-за входов width-1).m
активирует многострочный режим, который^
сопоставляет начало строк.-1=
говорит Retina выполнить замену только в последнем матче. Наконец,:
отключите режим по умолчанию, чтобы сетка печаталась в STDOUT как промежуточный результат.Наконец, мы просто считаем число
#
в строке, соответствующее количеству ходов.источник
Пайк, 26 байт
Попробуй здесь
Или неконкурентные 34 байта, добавьте команду apply с звездочкой)
Попробуй это здесь!
Или 30 байтов, если разрешены пробелы в качестве заполнения
источник
Pyth,
322924 байтаПопробуйте онлайн!
Пример ввода:
Пример вывода:
Как это устроено:
Предыдущая попытка:
Попробуйте онлайн!
Пример ввода:
Пример вывода:
Как это устроено:
источник
AtMQ
. Это присваивает два значенияG
иH
.CJam,
3533 байтаПринимает вход в виде
width height
и выводит количество ходов в первой строке, за которым следует сетка решений.Проверьте это здесь.
Это также работает для того же количества байтов:
источник
Рубин, 48 байтов
Это анонимная функция, которая согласно этому мета-посту является приемлемой, если в вопросе не указано «полная программа». Обычно я не буду педантичен по этому поводу, но проблема очень проста, и выполнение программы будет значительным% увеличения балла.
Ввод двух аргументов. Возвращаемое значение - это массив, содержащий художественную строку ASCII и номер
#
пути.В тестовой программе
Выход
Это просто строка из h-1 строк с w-1 точками, за которыми следуют символы a
#
и новой строки. Я поставил#
в конце, чтобы использовать один#\n
литерал для обоих#
и новой строки (код содержит фактическую новую строку, а не escape-последовательность). Затем за последней строкойX
следует w-1#
.Короче уменьшать значения w и h во время генерации ASCII-графики, чтобы окончательный расчет был простым
w+h
.источник
JavaScript (ES6), 60 байт
использование
источник
MATL ,
282625 байтРЕДАКТИРОВАТЬ (10 июня 2016 г.): приведенная ниже ссылка содержит модификацию (
5L
заменена наIL
) для адаптации к изменениям языкаПопробуйте онлайн!
объяснение
источник
Скала, 118 байт
источник
Haskell, 64 байта
Пример использования:
Как это устроено:
источник
Java,
137132 байтаисточник
Луа, 81 байт
Попробуйте онлайн!
Golfed:
Ungolfed:
источник
Python, 48.
Чтобы использовать это, добавьте
f=
перед строкой выше и назовите это так:Результат:
источник