更大,更好(破碎)的拉链


9

(受此挑战启发很大)

在最初的挑战中,您要制作一个水平拉链,但是,低头看我的连帽衫,我的拉链更加垂直(并且有点破损):P

输入项

系统会为您提供单个字符串(s)和任意格式的一对整数(ab)。哪里:

a < (length-of-s / 2)

b <= ((length-of-s / 2) - (a + 1)) / 6

输出和计分

您的程序可以是完整程序,也可以是产生具有正确格式的单个字符串或所选数组(每行一项)的函数。只要输出的字符全部对齐,前导和尾随空格以及换行符是可选的。例如。

["f     r"],["u     e"],["l     p"],["l     p"],["y     i"],[" o   z "],["  p n  "],["   e   "]

要么

"f     r\nu     e\nl     p\nl     p\ny     i\n o   z \n  p n  \n   e   "

是测试用例1可接受的输出

禁止使用标准漏洞,以字节为单位的最短代码为准。任何没有解释的答案将无法取胜。

说明

要制作拉链,您必须首先从字符串中删除所有空格或换行符。然后像这样折成两半(有关更多信息,请参见测试用例1)

abcde fgh ij klmnopqr 变成下面的两个字符串,请注意后半部分颠倒了。

abcdefghirqponmlkj

然后从每个字符串的开头开始,将来自每个子字符串的相同索引字符放在一行上,并按如下所示确定间距:

[0] a     r -- (a-3) five spaces
[1]  b   q  -- (a-2) three spaces
[2]   c p   -- (a-1) one space
[3]    d    -- (a)
[4]    o
[5]    e
[6]    n
etc...

这就是我们拉链的基础。现在,整数ab

a是我们拉链的位置。为了确定拉链的位置,我们使用输出线的索引作为关闭拉链的位置。例如,[3]在我上面的示例中放在方括号中的是拉链所在的位置。

在我们的拉链闭合之前,上述拉链必须保持五个空间的间隙,直到到达a-2接近3个空间和a-1接近1个空间的位置为止。请注意,在上面的示例中a = 3(0索引)


b是我拉链中的孔数。要在拉链上创建一个孔,我们以一定的间距再次将字符串分开。

从示例孔的索引开始,随着h我们将间距h-1增加到一个空间,再h增加到3个空间,再h+1返回到一个空间,离开h-2h+2每行只有一个字符,因为它们被算作孔的一部分。

拉链之后和每个孔之间必须有一个字符的间隙,以便我们的拉链看起来完全连接在孔之间。

您可以选择孔的索引,但是它们必须全部存在于拉链的“封闭”部分中。

Again using 'abcdefghi' and 'rqponmlkj'

[0] a     r -- (open)
[1]  b   q  -- (closing)
[2]   c p   -- (closing)
[3]    d    -- zip 
[4]    o    -- gap
[5]    e    -- start of hole  (h-2)
[6]   n f   -- one space      (h-1)
[7]  m   g  -- three spaces   (hole h)
[8]   l h   -- one space      (h+1)
[9]    k    -- end of hole    (h+2)
[10]   i    -- gap
[11]   j

我希望一切都说得通,即使不问。预期会出现问题,您可能会注意到p我的第二个示例中的字符出现在第二个子字符串中,但是出现在其行的开头,这是有意的,您必须遵循1-2-1-2-的顺序1-2,轮流从每个字符中取出一个字符,而不管其在输出中的位置。

测试用例

"fully open zipper", 7, 0                     | "fully closed zipper", 0, 0
fullyope reppizn                              | fullyclos reppizde
                                              |
f     r   *Note: i particularly like this     | f
u     e     example as it shows the reversing | r
l     p     of the second half of the string  | u
l     p     causes the words to wrap from top | e
y     i     left to the  bottom and back up   | l
 o   z      the right side                    | p
  p n                                         | l
   e                                          | p
                                              | y
                                              | i
                                              | c
                                              | z
                                              | l
                                              | d
                                              | o
                                              | e
                                              | s
  • 第1栏:“在任何体面的卫衣上都不应该存在的愚蠢的不间断拉链”,24,0
  • 第2列:“ Lorem ipsum dolor坐满了,奉献了上等的风。Mauris faucibus molestie mi。Aliquam nec fringilla ipsum”,15,5

s     e          |          L     m
t     i          |          o     u
u     d          |          r     s
p     o          |          e     p
i     o          |          m     i
d     h          |          i     a
l     t          |          p     l
y     n          |          s     l
l     e          |          u     i
o     c          |          m     g
n     e          |          d     n
g     d          |          o     i
u     y          |          l     r
n     n          |           o   f
b     a          |            r c
r     n          |             s
o     o          |             e
k     t          |             i
e     s          |            n t
n     i          |           m   a
z     x          |            a m
i     e          |             u
 p   t           |             e
  p n            |             q
   e             |             t
   d             |             i
   r             |             ,
   l             |            l c
   t             |           A   o
   u             |            . n
   h             |             i
   o             |             s
   a             |             m
   h             |            e e
   t             |           c   i
   s             |            t t
                 |             e
                 |             s
                 |             t
                 |             s
                 |             u
                 |             l
                 |             r
                 |             o
                 |             a
                 |             m
                 |             d
                 |             s
                 |             i
                 |             u
                 |             p
                 |            b i
                 |           i   s
                 |            c c
                 |             u
                 |             i
                 |             a
                 |             n
                 |             f
                 |             g
                 |             s
                 |             e
                 |             i
                 |            l r
                 |           i   u
                 |            t a
                 |             .
                 |             M

编辑:添加了测试用例

"abcde fgh ij klmnopqr","3","1"

a     r
 b   q
  c p
   d
   o
   e
  n f
 m   g
  l h
   k
   i
   j

1
我想我喜欢这个挑战,但是我已经读过三遍了,但我仍然不是100%应该做的事情。我认为有必要使规则和规范更短,更清晰,而不是完整的段落。
TheLethalCoder

我可以

更清楚吗?@TheLethalCoder
MysticVagabond '17

嗨,我删除了printable-ascii标签,因为该标签用于限制来源的挑战而不是输出布局。
AdmBorkBork '17

我感谢@AdmBorkBork,我再次对其进行了编辑,以按字母顺序排列说明,以期更清楚地了解字符的来源。
MysticVagabond

Answers:


1

PHP 7.1,421个412 218 195 192 191 195字节

for([,$s,$a,$b]=$argv;$i-$k<strlen($s=strtr($s,[" "=>""]));$p=0)for($t=++$y>$a-2?$y>=$a?$y>$a?$b-->0?_4_4_4_31_23_31:_4:_31:_23:_15;$c=$t[$p++];)echo$c<_?str_pad("",$c).$s[++$f&1?$i++:$k-=1]:"
";

运行-nr在线尝试
在每行中打印前导但不尾随换行符和一个前导空格。


TIO给我这个错误:<br /> <b>Parse error</b>: syntax error, unexpected ',', expecting ']' in <b>[...][...]</b> on line <b>7</b><br />
MysticVagabond

@Xynos将PHP版本设置为7.1
Titus

您的答案将孔放置得离拉链太近,不适当地为您的输入添加正确的输出作为测试用例:)
MysticVagabond

@Xynos差距增加
Titus
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.