Introducción
Kerning significa ajustar el espacio entre las letras de un texto. Como ejemplo, considere la palabra Top
escrita con los siguientes tres glifos:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Podríamos llenar los espacios entre los glifos con puntos y terminar con ellos, pero los espacios de alguna manera parecen demasiado amplios. En cambio, deslizamos los glifos hacia la izquierda para que casi se toquen:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
¡Esto se ve mucho mejor! Observe cómo la barra de T
está en la parte superior del borde izquierdo de o
. En este desafío, su tarea es implementar un programa de interletraje simple para dichos glifos rectangulares.
El proceso de kerning
Considere dos matrices de caracteres 2D rectangulares de .
y #
de la misma forma. En nuestro proceso de kerning simple, primero colocamos las matrices una al lado de la otra, con una columna de .
s en el medio. Luego, movemos cada uno #
en la matriz derecha un paso hacia la izquierda, hasta que algunos #
s de la matriz izquierda y derecha estén adyacentes ortogonal o diagonalmente. El resultado del interletraje es el paso anterior a la introducción de #
s adyacentes . Su tarea es implementar este proceso.
Tomemos un ejemplo:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
En la última matriz, tenemos nuevos pares adyacentes de #
s, por lo que la penúltima matriz es el resultado del proceso de interletraje.
Entrada y salida
Para simplificar, solo necesita manejar el interletraje de dos glifos. Sus entradas son dos matrices 2D rectangulares, en uno de los siguientes formatos:
- Matrices 2D de enteros, con 0 representando
.
y 1 para#
. - Cuerdas multilínea más
.#
. - Arreglos de cadenas
.#
. - Matrices 2D de los personajes
.#
.
Si las entradas se toman como una sola cadena, puede usar cualquier delimitador razonable. Sin embargo, el delimitador debe ir entre las dos matrices, lo que significa que no puede tomar las dos entradas ya emparejadas fila por fila.
Su salida es el resultado del proceso de interletraje aplicado a estas dos matrices, que es una matriz 2D rectangular en el mismo formato que las entradas. Puede agregar o eliminar cualquier número de columnas iniciales o finales de .
s, pero la salida debe ser rectangular y tener la misma altura que las entradas. Se garantiza que el proceso de interletraje termina antes de que el borde izquierdo de la segunda entrada se deslice sobre el borde izquierdo de la primera entrada.
Reglas y puntaje
El conteo de bytes más bajo en cada lenguaje de programación gana. Aplican reglas estándar de código de golf .
Casos de prueba
Para ayudar con el pegado de copias, estos casos de prueba se proporcionan como listas de cadenas.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]