前書き
カーニングとは、テキストの文字間の間隔を調整することを意味します。例として、Top
次の3つのグリフで書かれた単語を考えます。
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
グリフ間のギャップをドットで埋めて完了させることもできますが、ギャップはどうやら広すぎるように見えます。代わりに、グリフを左にスライドさせて、ほとんど触れないようにします。
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
これはずっと良く見える!のバーがT
の左の境界線の上にあることに注意してくださいo
。この課題では、このような長方形のグリフに簡単なカーニングプログラムを実装することがタスクです。
カーニングプロセス
二長方形の2次元文字配列考える.
と#
同じ形状を。単純なカーニングプロセスでは、最初に1列の.
sを挟んで配列を並べて配置します。次に、#
右と左の配列のいくつか#
が直交または斜めに隣接するまで、右の配列のそれぞれを左に1ステップ移動します。カーニングの結果は、隣接するを導入する前のステップ#
です。あなたの仕事は、このプロセスを実装することです。
例を見てみましょう:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
最後の配列には#
sの新しい隣接ペアがあるため、最後から2番目の配列はカーニングプロセスの結果です。
入出力
簡単にするために、2つのグリフのカーニングのみを処理する必要があります。入力は、次のいずれかの形式の2つの長方形の2D配列です。
- 整数の2D配列。0はを表し、
.
1 はを表します#
。 - 上の複数行の文字列
.#
。 - 上の文字列の配列
.#
。 - 文字の2D配列
.#
。
入力が単一の文字列として取得される場合、適切な区切り文字を使用できます。ただし、区切り文字は2つの配列間を移動する必要があります。つまり、行ごとに既にペアになっている2つの入力を取得することはできません。
出力は、これらの2つの配列に適用されたカーニングプロセスの結果であり、入力と同じ形式の長方形の2D配列です。.
sの任意の数の先頭または末尾の列を追加または削除できますが、出力は長方形で、入力と同じ高さでなければなりません。カーニングプロセスは、2番目の入力の左端が最初の入力の左端の上をスライドする前に終了することが保証されています。
ルールとスコアリング
各プログラミング言語の最低バイト数が優先されます。標準のコードゴルフ規則が適用されます。
テストケース
コピー&ペーストを支援するために、これらのテストケースは文字列のリストとして提供されます。
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]