将点连接


13

给定一系列o代表点的,将其垂直或水平连接

例子

输入:

o   o

o

输出:

o---o
|
|
o

输入:

o   o    o

    o

输出:

o---o----o
    |
    o

规格

  • 如果要用空格填充输入以形成矩形,请在答案中指定

  • 输入中将只有o,空格和换行符

  • 总会有一对点连接
  • 没有两个o将直接相邻
  • 点应分别与|-连接,分别用于垂直和水平连接
  • 点连接不会重叠

您是否必须连接每个合法对,还是仅将点连接成一个组件?点始终可以连接成1个组件吗?如果我理解正确的话,“将始终至少有两个点可以连接”会更有意义。几个测试用例也可以解决这些问题。
randomra

@randomra,您没有连接每个合法对,它们不一定总是1个组成部分
Downgoat

@Downgoat那么,还有其他一些测试案例涵盖了断开连接的组件以及单个组件中的循环吗?;)
Martin Ender

Answers:


2

Japt,33个 29字节

Uy eV="o +o"_rS'|} y eV,_rS'-

在线测试!

怎么运行的

Uy         // Transpose rows with columns in the input.
eV="o +o"  // Set V to the regex-string "o +o", and recursively replace each match Z with:
_rS'|}     //  Z with spaces replaced with "|"s.
y          // Transpose again.
eV,        // Recursively replace matches Z of V with:
_rS'-      //  Z with spaces replaced with "-"s.

2

Ruby,137133字节

->s{eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'}

这绝对是可怕的。仍在尝试打高尔夫球。

请以填充矩形输入。

用于“可读性”的换行符:

eval"s.split($/).map(&:chars)#{".map{|x|x.join.gsub(/o +(?=o)/){|x|x.tr' ',?|}
.chars}.transpose"*2}.map(&:join)*$/".sub'?|','?-'

4
好吧,我将输入为填充矩形,但这只是因为您的要求非常好。
亚历克斯

可以\b代替使用(?=o)吗?
贾斯汀

@Justin似乎不起作用。:/
门把手

2

视网膜,80字节

T` `-`o.+o
Tm` `|`(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*) (?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

输入需要填充。

在线尝试!

说明

第一阶段非常简单,只需将所有空格转换为连字符,即可o在同一行的两个s 之间找到连字符。

第二阶段涵盖|s。这有点棘手,需要平衡组。往后看

(?<=(?(1)!)^(?<-1>.)*o\D*¶(.)*)

检查o同一列中是否有更早的版本。请记住,应从右到左阅读后面的内容。(.)*存储比赛的水平位置,\D*¶检查跳至前几行中的任何字符,按o字面意义进行比赛。然后(?(1)!)^(?<-1>.)*确保其水平位置o相同。

前瞻

(?=(.)*¶\D*o(?<-2>.)*$(?(2)!))

在相反的方向上做完全相同的事情。

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.