Wprowadzenie
Kerning oznacza dostosowanie odstępów między literami tekstu. Jako przykład rozważmy słowo Top
napisane trzema następującymi glifami:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Moglibyśmy po prostu wypełnić luki między glifami kropkami i zrobić to, ale luki wyglądają jakoś zbyt szeroko. Zamiast tego przesuwamy glify w lewo, aby prawie się dotknęły:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
To wygląda o wiele lepiej! Zwróć uwagę, jak pasekT
jest u góry lewej ramki o
. W tym wyzwaniu Twoim zadaniem jest wdrożenie prostego programu do kerningu dla takich prostokątnych glifów.
Proces kerningu
Rozważmy dwie prostokątne tablice znaków 2D .
i #
tego samego kształtu. W naszym prostym procesie kerningu najpierw umieszczamy tablice obok siebie, z jedną kolumną .
s pomiędzy nimi. Następnie przesuwamy każdy #
z prawej tablicy o jeden krok w lewo, aż niektóre #
lewe i prawe tablice przylegają do siebie prostopadle lub ukośnie. Wynik kerningu jest krokiem przed wprowadzeniem sąsiadujących #
s. Twoim zadaniem jest wdrożenie tego procesu.
Weźmy przykład:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
W ostatniej tablicy mamy nowe sąsiednie pary #
s, więc przedostatnia tablica jest wynikiem procesu kerningu.
Wejście i wyjście
Dla uproszczenia wystarczy obsłużyć kerning dwóch glifów. Twoje dane wejściowe to dwie prostokątne tablice 2D, w jednym z następujących formatów:
- Tablice 2D liczb całkowitych, przy czym 0 oznacza
.
i 1 oznacza#
. - Ciągi wielowierszowe zakończone
.#
. - Tablice ciągów ponad
.#
. - Tablice 2D postaci
.#
.
Jeśli dane wejściowe są traktowane jako pojedynczy ciąg, można użyć dowolnego rozsądnego separatora. Jednak separator powinien przechodzić między dwiema tablicami, co oznacza, że nie wolno pobierać dwóch danych wejściowych już sparowanych wiersz po rzędzie.
Twój wynik jest wynikiem procesu kerningu zastosowanego do tych dwóch tablic, które są prostokątną tablicą 2D w tym samym formacie co dane wejściowe. Możesz dodawać lub usuwać dowolną liczbę wiodących lub końcowych kolumn .
s, ale dane wyjściowe muszą być prostokątne i mieć tę samą wysokość co dane wejściowe. Gwarantowane jest zakończenie procesu kerningu, zanim lewa krawędź drugiego wejścia przesunie się nad lewą krawędzią pierwszego wejścia.
Zasady i punktacja
Najniższa liczba bajtów w każdym języku programowania wygrywa. Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
Aby pomóc w wklejaniu kopii, te przypadki testowe podano jako listy ciągów.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]