По сути, это то же самое, что и этот вопрос, за исключением более сложного. Вам снова нужно написать программу, которая попадает из левого нижнего угла прямоугольника в правый верхний угол. Однако на этот раз диагональные ходы разрешены.
Программа примет упорядоченную пару (width, height)
и использует их в качестве размеров для прямоугольника. Затем ваша программа создаст ASCII-арт решения (используйте .
для пустого квадрата, #
для части решения и X
для начального квадрата) и посчитайте количество ходов, необходимых для достижения конечной точки.
пример
Входные данные: (5, 6)
Выход:
....#
....#
...#.
..#..
.#...
X....
Move count: 5
Кратчайший ответ в байтах побеждает!
Ответы:
MATL , 38 байт
Попробуйте онлайн!
объяснение
Позвольте
m
иn
быть отсортированные входы, такие, чтоm
больше или равноn
. Код изначально строит матрицуm
xn
следующим образом:#
. Количество этих записей минус 1 - количество ходов.X
..
При необходимости матрица теперь транспонируется так, чтобы она имела желаемую форму. Обратите внимание, что первое измерение матрицы - это ее высота, а не ширина, поэтому оно соответствует второму входу.
Затем матрица переворачивается вверх дном, так что она
X
появляется в нижней части первого столбца, и ее записи используются в качестве индексов в строке'.#X'
для получения желаемого массива двумерных символов.источник
Pyth,
464544 байтаПопробуй это здесь.
Объяснение:
источник
JavaScript (ES6), 132
Редактирование 2 байт сохраненного ТНХ @Neil
Тестовое задание
источник
w--,R=
... вmap()
.Javascript (с использованием внешней библиотеки) (235 байт)
Боже, это было сложно! Ну ... моя библиотека не совсем подходила для этого ха-ха. Но мне понравился вызов
Ссылка на lib: https://github.com/mvegh1/Enumerable
Объяснение кода: Создать функцию из 2 переменных. Храните x-1 и y-1 в переменных. Сохраните максимальное и минимальное значения этих переменных. Создайте вертикально нисходящий диапазон чисел из (y-1) для отсчета y. Для каждого элемента в вертикальном диапазоне напишите строку для текущего элемента в соответствии со сложным предикатом. Этот предикат создает возрастающий диапазон целых чисел от 0 для отсчета x. Для каждого элемента в этом диапазоне объединить в 1 строку в соответствии со сложным предикатом. Этот предикат проверяет, если внизу слева, иначе проверяет, если по диагонали, иначе проверяет, что мы на границе X или Y. Наконец, все это было сохранено в переменной. Затем, чтобы получить количество ходов, мы просто посчитаем #. Затем объедините это с хранимой переменной и верните результат
Это был полный рот, ха-ха. На скриншоте указан неправильный счетчик байтов, потому что я нашел способ сохранить 4 байта при публикации
РЕДАКТИРОВАТЬ: я вижу, что другие ответы не помещают «Счетчик ходов» в их вывод, но мой есть. Если это не является обязательным требованием, это сбивает кучу байтов ...
источник
Python 3,
161156 байтФункция, которая принимает входные данные через аргумент и печатает ascii-art, а затем счетчик ходов в STDOUT.
Как это устроено
Программа сначала создает список списков, где каждый список представляет одну строку сетки, а каждый элемент списков компонентов представляет собой
.
. Каждый элемент, который должен быть,#
имеет свойство, что если бы выходная сетка была квадратной, ординаты, представляющие ее местоположение, были бы равны; следовательно, цикл по некоторому индексуi
и вставка#
в местоположение(i, i)
даст желаемый результат. Однако сетка не всегда является квадратной, и, таким образом, индексы привязываются к сетке, беря минимум индекса и ширину / высоту (уменьшенные из-за нумерации), как требуется. Если индекс равен нулю, текущая позиция должна быть слева внизу, и, таким образом,X
вместо этого вставляется. Затем элементы в каждой строке объединяются, и каждая строка печатается в STDOUT. Количество ходов является максимальным уменьшением ширины / высоты; это также напечатано.Попробуйте это на Ideone
источник