Вступ
Кернінг означає регулювати відстань між літерами тексту. Як приклад, розглянемо слово, Top
написане з трьома гліфами:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Ми могли просто заповнити прогалини між гліфами крапками і зробити це з допомогою, але прогалини якось виглядають занадто широкими. Замість цього ми просуваємо гліфи ліворуч, щоб вони майже торкалися:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
Це виглядає набагато краще! Зверніть увагу, як смужка значка T
знаходиться вгорі лівої межі o
. У цьому завданні ваше завдання полягає в реалізації простої програми кернінгу для таких прямокутних гліфів.
Процес кернування
Розглянемо два прямокутні масиви 2D символів .
та #
однакової форми. У нашому простому процесі кернінгу ми спочатку розміщуємо масиви поруч з одним стовпцем .
s посередині. Потім ми переміщуємо кожен #
у правому масиві на один крок вліво, поки деякі #
s лівого та правого масиву не ортогонально чи діагонально примикають. Результатом кернінгу є крок до того, як ми введемо суміжні #
s. Ваше завдання - реалізувати цей процес.
Візьмемо приклад:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
В останньому масиві у нас є нові сусідні пари #
s, тому масив другий-останній є результатом процесу керування.
Вхід і вихід
Для простоти вам потрібно лише обробити кернінг двох гліфів. Ваші входи - це два прямокутні 2D масиви в одному з наступних форматів:
- 2D масиви цілих чисел, з 0 стоїть
.
і 1 for#
. - Багаторядкові струни
.#
. - Масиви рядків над
.#
. - 2D масиви символів
.#
.
Якщо вхідні дані приймаються як один рядок, ви можете використовувати будь-який розумний роздільник. Однак роздільник повинен проходити між двома масивами, це означає, що вам заборонено приймати два входи, які вже є парними рядками за рядком.
Ваш вихід є результатом процесу керування, застосованого до цих двох масивів, який представляє собою прямокутний 2D масив у тому ж форматі, що і входи. Вам дозволяється додавати або видаляти будь-яку кількість провідних або кінцевих стовпців .
s, але вихід повинен бути прямокутним і мати ту ж висоту, що і входи. Гарантується, що процес кернування закінчується до того, як лівий край другого входу ковзає по лівому краю першого входу.
Правила та оцінка
Виграє найнижчий байт у кожній мові програмування. Діють стандартні правила гольф-коду .
Тестові справи
Щоб допомогти вклеювати копію, ці тестові приклади подаються у вигляді списків рядків.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]