首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现简化的kerning

实现简化的kerning
EN

Code Golf用户
提问于 2017-11-20 08:33:56
回答 1查看 386关注 0票数 24

Introduction

角化指的是调整文本字母之间的间距。例如,考虑用以下三种符号编写的单词Top

代码语言:javascript
复制
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...

我们可以用圆点来填补字形之间的空白,然后用它来完成,但是这些缺口看起来太宽了。相反,我们将字形滑动到左边,使它们几乎接触到:

代码语言:javascript
复制
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...

这看起来好多了!注意T的条是如何位于o的左边框顶部的。在这个挑战中,您的任务是为这些矩形字形实现一个简单的kerning程序。

角化过程

考虑两个形状相同的.#的矩形2D字符数组。在我们简单的kerning过程中,我们首先将数组并排放置,中间是.s的一列。然后,我们将右边数组中的每个#向左移动一步,直到左、右阵列的#s正交或对角相邻为止。在我们介绍相邻的#s之前,你的任务就是实现这个过程。

让我们举一个例子:

代码语言:javascript
复制
Inputs:
..###
#....
#....
..##.

...#.
...##
..###
....#

Process:
..###....#.
#........##
#.......###
..##......#

..###...#.
#.......##
#......###
..##.....#

..###..#.
#......##
#.....###
..##....#

..###.#.
#.....##
#....###
..##...#

..####.
#....##
#...###
..##..#

在最后一个数组中,我们有新的相邻的#s对,所以第二到最后的数组是核化过程的结果。

输入输出

为了简单起见,您只需要处理两个象形文字的角化。您的输入是两个矩形2D数组,格式如下:

  • 二维整数数组,0代表.,1代表#
  • .#上的多行字符串。
  • .#上的字符串数组。
  • 字符.#的二维数组。

如果将输入作为单个字符串,则可以使用任何合理的分隔符。但是,分隔符应该位于这两个数组之间,这意味着不允许您接受已经成对的逐行输入。

输出是应用于这两个数组的kerning过程的结果,这是一个与输入格式相同的矩形2D数组。您可以添加或删除任何数量的.s的领导或尾随列,但输出必须是矩形的,并且具有与输入相同的高度。保证在第二输入的左边缘滑过第一输入的左边缘之前,kerning处理结束。

规则与

评分

每种编程语言中的最低字节计数获胜。适用标准的密码-高尔夫规则。

测试用例

为了帮助复制粘贴,这些测试用例作为字符串列表给出.

代码语言:javascript
复制
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
EN

回答 1

Code Golf用户

发布于 2017-11-21 20:25:13

Python 3,154个字节

代码语言:javascript
复制
lambda a,b,p=".":[c.rstrip(p)+d.lstrip(p).rjust(max(len((d+c).strip(p))for(c,d)in zip((a*3)[1:],b[:-1]+b+b[1:]))+1-len(c.rstrip(p)),p)for(c,d)in zip(a,b)]

在网上试试!

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/148643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档