实施简化字距调整


24

介绍

字距调整是指调整文本字母之间的间距。例如,考虑Top用以下三个字形写的单词:

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

我们可以用点填充字形之间的间隙并完成它,但是间隙看起来太宽了。相反,我们将字形滑动到左侧,以便它们几乎可以接触:

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

看起来好多了!请注意,的条形图T在的左边框上方o。在此挑战中,您的任务是为此类矩形字形实现一个简单的字距调整程序。

字距调整过程

考虑具有.#形状相同的两个矩形2D字符数组。在简单的字距调整过程中,我们首先将数组并排放置,中间放置一列.s。然后,我们将#右阵列中的每一个向左移动一步,直到#左右阵列中的s正交或对角相邻。字距调整的结果是引入相邻s 之前的步骤#。您的任务是实施此过程。

让我们举个例子:

Inputs:
..###
#....
#....
..##.

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

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

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

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

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

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

在最后一个数组中,我们有#s 对新相邻,因此倒数第二个数组是字距调整过程的结果。

输入输出

为简单起见,您只需要处理两个字形的字距调整。您的输入是两个矩形2D数组,采用以下格式之一:

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

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

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

规则和计分

每种编程语言中的最低字节数为准。适用标准规则。

测试用例

为了帮助复制粘贴,这些测试用例以字符串列表形式给出。

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

可视化工具。测试用例5似乎是错误的。
user202729

@ user202729谢谢,现在已修复。我经历了几轮在沙箱中修复测试用例的工作,显然错过了那一个。
Zgarb

另外,如果两个字符互相“掉线”,程序应该怎么做?
user202729

@ user202729您可以假设不会发生。请参见“输入和输出”部分的最后一句话。
Zgarb

Answers:



2

Python 3,154个字节

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

视网膜,223字节

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4
T`.`i`\.*i\.*
+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@
+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3
T`i@`.`i*[#@]+i
mT`.`i`\.+i+$
msT`i`.`.*^\W+$.*
+`(\b(i+)\W+\2i*)i
$1.
+s`\bi((i+).+\b\2\b)
.$1
i

在线尝试!链接包括测试用例和标头脚本,以将它们重新格式化为两个换行符分隔的字符串的首选输入格式。这似乎太长了,但可能有一个我忽略了的极端情况,但是现在至少确实通过了所有测试情况。说明:

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4

使用字母i作为分隔符将两个输入数组连接在一起。(这允许使用\W\b以后的功能。)

T`.`i`\.*i\.*

在联接处将所有.s 更改为i

+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@

is以下#的所有s 更改为@s。

+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3

将上的所有is 更改#@

T`i@`.`i*[#@]+i

将所有@s 更改为.s,再加上i@s或#s 相邻的所有s。

mT`.`i`\.+i+$

如果#后面没有i,则将相邻的.重新更改为i

msT`i`.`.*^\W+$.*

如果一行中没有is,请将所有s更改i.s,因为这里无事可做。

+`(\b(i+)\W+\2i*)i
$1.

计算i任何行上的s 的最小数目。

+s`\bi((i+).+\b\2\b)
.$1

传播到其他行。

i

删除is,从而执行所需的字距调整。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.