Введение
Кернинг означает регулировку расстояния между буквами текста. В качестве примера рассмотрим слово, Top
написанное следующими тремя глифами:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Мы могли бы просто заполнить пробелы между глифами точками и покончить с этим, но пробелы как-то выглядят слишком широкими. Вместо этого мы сдвигаем глифы влево, чтобы они почти касались:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
Это выглядит намного лучше! Обратите внимание, что столбец T
находится в верхней части левой границы o
. В этой задаче ваша задача - реализовать простую программу кернинга для таких прямоугольных глифов.
Процесс кернинга
Рассмотрим два прямоугольных 2D массивов символов .
и #
одной и той же формы. В нашем простом процессе кернинга мы сначала размещаем массивы рядом, с одним столбцом .
s между ними. Затем мы перемещаем каждый элемент #
в правом массиве на один шаг влево, пока некоторые #
элементы левого и правого массивов не будут ортогонально или диагонально смежными. Результатом кернинга является шаг до того, как мы введем смежные #
s. Ваша задача - реализовать этот процесс.
Давайте возьмем пример:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
В последнем массиве у нас есть новые смежные пары #
s, поэтому второй-последний массив является результатом процесса кернинга.
Вход и выход
Для простоты вам нужно только обработать кернинг двух глифов. Ваши входные данные представляют собой два прямоугольных 2D-массива в одном из следующих форматов:
- 2D массивы целых чисел, где 0 обозначает
.
и 1 обозначает#
. - Многострочные строки окончены
.#
. - Массивы строк окончены
.#
. - 2D массивы персонажей
.#
.
Если входные данные взяты как одна строка, вы можете использовать любой разумный разделитель. Однако разделитель должен находиться между двумя массивами, что означает, что вы не можете принимать два входных сигнала, которые уже были соединены, строка за строкой.
Ваш вывод является результатом процесса кернинга, примененного к этим двум массивам, который представляет собой прямоугольный 2D-массив в том же формате, что и входные данные. Вам разрешено добавлять или удалять любое количество начальных или конечных столбцов .
s, но выходные данные должны быть прямоугольными и иметь ту же высоту, что и входные данные. Гарантируется, что процесс кернинга завершится до того, как левый край второго входа переместится по левому краю первого входа.
Правила и оценки
Наименьшее количество байтов в каждом языке программирования выигрывает. Применяются стандартные правила игры в гольф .
Контрольные примеры
Чтобы помочь с вставкой копий, эти тестовые примеры представлены в виде списков строк.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]