Einführung
Kerning bedeutet, den Abstand zwischen den Buchstaben eines Textes anzupassen. Betrachten Sie als Beispiel das Wort, Top
das mit den folgenden drei Glyphen geschrieben wurde:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Wir könnten einfach die Lücken zwischen den Glyphen mit Punkten füllen und damit fertig werden, aber die Lücken sehen irgendwie zu groß aus. Stattdessen schieben wir die Glyphen nach links, sodass sie sich fast berühren:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
Das sieht viel besser aus! Beachten Sie, wie sich der Balken von T
über dem linken Rand von befindet o
. In dieser Herausforderung besteht Ihre Aufgabe darin, ein einfaches Kerning-Programm für solche rechteckigen Glyphen zu implementieren.
Der Kerning-Prozess
Betrachten wir zwei rechteckigen 2D Character - Arrays .
und #
der gleichen Form. In unserem einfachen Kerning-Prozess platzieren wir zuerst die Arrays nebeneinander, wobei eine Spalte mit .
s dazwischen steht. Dann bewegen wir jedes #
im rechten Array einen Schritt nach links, bis einige #
s des linken und rechten Arrays orthogonal oder diagonal benachbart sind. Das Ergebnis des Kernings ist der Schritt, bevor wir benachbarte #
s einführen . Ihre Aufgabe ist es, diesen Prozess zu implementieren.
Nehmen wir ein Beispiel:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
Im letzten Array haben wir neue benachbarte Paare von #
s, sodass das vorletzte Array das Ergebnis des Kerning-Prozesses ist.
Ein- und Ausgabe
Der Einfachheit halber müssen Sie nur das Kerning von zwei Glyphen behandeln. Ihre Eingaben sind zwei rechteckige 2D-Arrays in einem der folgenden Formate:
- 2D-Arrays von Ganzzahlen, wobei 0 für
.
und 1 für steht#
. - Mehrzeilige Zeichenfolgen
.#
. - Arrays von Saiten über
.#
. - 2D-Arrays der Zeichen
.#
.
Wenn die Eingaben als einzelne Zeichenfolge verwendet werden, können Sie ein beliebiges sinnvolles Trennzeichen verwenden. Das Trennzeichen sollte sich jedoch zwischen den beiden Arrays befinden, was bedeutet, dass Sie die beiden bereits gepaarten Eingaben nicht zeilenweise übernehmen dürfen.
Ihre Ausgabe ist das Ergebnis des Kerning-Prozesses, der auf diese beiden Arrays angewendet wird. Dabei handelt es sich um ein rechteckiges 2D-Array im gleichen Format wie die Eingaben. Sie können beliebig viele führende oder nachfolgende Spalten von .
s hinzufügen oder entfernen. Die Ausgabe muss jedoch rechteckig sein und dieselbe Höhe wie die Eingaben haben. Es ist garantiert, dass der Kerning-Prozess endet, bevor die linke Kante der zweiten Eingabe über die linke Kante der ersten Eingabe gleitet.
Regeln und Wertung
Die niedrigste Byteanzahl in jeder Programmiersprache gewinnt. Es gelten die Standardregeln für Code-Golf .
Testfälle
Um das Einfügen zu erleichtern, werden diese Testfälle als Listen von Zeichenfolgen angegeben.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]