Giới thiệu
Kerning có nghĩa là điều chỉnh khoảng cách giữa các chữ cái của văn bản. Ví dụ, xem xét từ Top
được viết bằng ba glyph sau:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Chúng ta chỉ có thể lấp đầy các khoảng trống giữa các glyph bằng các dấu chấm và được thực hiện với nó, nhưng các khoảng trống bằng cách nào đó trông quá rộng. Thay vào đó, chúng tôi trượt glyphs sang trái để chúng gần như chạm vào:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
Điều này có vẻ tốt hơn nhiều! Lưu ý cách thanh của T
nằm trên đỉnh của đường viền bên trái của o
. Trong thử thách này, nhiệm vụ của bạn là thực hiện một chương trình k sâu đơn giản cho các hình tượng hình chữ nhật như vậy.
Quá trình tiên phong
Hãy xem xét hai hình chữ nhật mảng nhân vật 2D của .
và #
hình dạng tương tự. Trong quy trình k sâu đơn giản của chúng tôi, trước tiên chúng tôi đặt các mảng cạnh nhau, với một cột .
s ở giữa. Sau đó, chúng ta di chuyển từng #
mảng trong mảng bên phải một bước sang trái, cho đến khi một số #
s của mảng bên trái và bên phải nằm liền kề hoặc theo đường chéo. Kết quả của k sâu là bước trước khi chúng tôi giới thiệu #
s liền kề . Nhiệm vụ của bạn là thực hiện quy trình này.
Hãy lấy một ví dụ:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
Trong mảng cuối cùng, chúng ta có các cặp #
s liền kề mới , vì vậy mảng thứ hai đến cuối cùng là kết quả của quá trình k sâu.
Đầu vào và đầu ra
Để đơn giản, bạn chỉ cần xử lý hai chữ glyphs. Đầu vào của bạn là hai mảng 2D hình chữ nhật, theo một trong các định dạng sau:
- Mảng 2D của các số nguyên, với 0 đứng
.
và 1 cho#
. - Chuỗi đa dòng trên
.#
. - Mảng dây trên
.#
. - Mảng 2D của các nhân vật
.#
.
Nếu các đầu vào được lấy dưới dạng một chuỗi, bạn có thể sử dụng bất kỳ dấu phân cách hợp lý nào. Tuy nhiên, dấu phân cách phải đi giữa hai mảng, nghĩa là bạn không được phép lấy hai đầu vào đã được ghép nối theo từng hàng.
Đầu ra của bạn là kết quả của quá trình k sâu áp dụng cho hai mảng này, đó là một mảng 2D hình chữ nhật có cùng định dạng với các đầu vào. Bạn được phép thêm hoặc xóa bất kỳ số cột dẫn hoặc dấu nào của .
s, nhưng đầu ra phải là hình chữ nhật và có cùng chiều cao với đầu vào. Nó được đảm bảo rằng quá trình k sâu kết thúc trước khi cạnh trái của đầu vào thứ hai trượt qua cạnh trái của đầu vào đầu tiên.
Quy tắc và tính điểm
Số byte thấp nhất trong mỗi ngôn ngữ lập trình sẽ thắng. Tiêu chuẩn quy tắc golf-golf áp dụng.
Các trường hợp thử nghiệm
Để giúp dán sao chép, các trường hợp thử nghiệm này được đưa ra dưới dạng danh sách các chuỗi.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]