通过折叠重复字形来弯曲此字符串


16

给定一个字符串,您的任务是将其折叠成如下所述的锯齿状结构。

折成锯齿形

我们将以字符串"Mississippi"为例:

  1. 首先,输出仅包含唯一字符的最长前缀:

    Mis
    
  2. 当您到达第一个重复的字符C时,请忽略它,并issippi在第一次出现的C之下垂直输出由剩余字符串()的唯一字符组成的最长前缀:

    Mis
      i
      s
    
  3. 重复此过程,在水平和垂直连续之间交替。但是现在要小心(在步骤1),从最近出现的重复字符(不一定是最后一个字符)继续水平输出,在这种情况下:

    Mis
      i
      sip
    -----
    Mis
      i
      sip
        i
    

规则

  • 该字符串将仅包含可打印的ASCII字符,但不包含任何类型的空格。
  • 您可以使用任何编程语言进行竞争,并且可以通过任何标准方法并以任何合理的格式1进行输入和提供输出,同时请注意,默认情况下,这些漏洞是禁止的。这是,因此每种语言的最短提交(以字节为单位)将获胜。
  • 1输入:字符串/字符列表/您的语言用来表示字符串的其他任何字符。输出:多行字符串,代表行的字符串列表或字符/长度为1的字符串列表,但是如果可能的话,请在答案中包含漂亮的代码版本。
  • 关于其他空格,输出可能包含:
    • 前导/尾随换行符
    • 每行末尾的空格
    • 一个一致的前导空格每行号
  • 您必须开始水平输出,而不能垂直开始。

测试用例

输入:

“完善”
密西西比州
“奇数”
“特权”
“克苏鲁”
“ PPCG”
“ pOpOpOpOpOpOpOp”
“ ABCCCE”
“ ABCCCECCEEEEC”
“ abcdcebffg”
“阿布卡”
“ AAAAAAAA”

相应的输出:

性能
 C
 Ť
失误
  一世
  啜
    一世
奥德
 ies
 Ť
琐事
  一种
  升
  ies
  Ť
克苏尔
  ü
P
C
G
O 
OpO
O
 p
美国广播公司
  C
  Ë
美国广播公司
  CCE
  欧共体
A B C D
  Ë
  b
  fg
abc
一种
机管局
 一种

@JungHwanMin因为您不应该跳回到第一个b,因为您应该只考虑其余字符串中的重复项,也就是在“分支”之后。一旦到达第二个c,您将输出剩余字符串的唯一字符的最长前缀,即ebffg(因此ebf垂直输出,然后水平继续输出),因此您不必担心字符串部分中的字符在切换方向之前已经输出。如果您仍然不清楚,我将使用此测试用例再做一个分步示例。
Xcoder先生18年

我们应该如何处理小写/大写?例如ABCcde
Rod

您应该将它们视为不同的字符。例如"A" ≠ "a"。该输出ABCcde将只是ABCcde
Xcoder先生

测试案例建议:AAAAAAAA
JungHwan Min

5
@JungHwanMin AAAAAAA也添加了一个。
Xcoder先生18年

Answers:


2

Wolfram语言(Mathematica),143个字节

{#}//.{q___,a_,r___,a_,Longest@s___}:>{q}~f@{a,r}~{{s}}//.{q_~f@a_~s_}/;s~FreeQ~f:>(PadLeft@{q~Join~#,##2}&)@@PadRight@Join[{a},s]/. 0->" "&

在线尝试!

包含0xF8FF,对应于\[Transpose]运算符。

ew,将结果分成字符串很难。获取每个分支并不那么困难:#//.{q___,a_,r___,a_,Longest@s___}:>{q,a,{r},{s}}&



1

Python 2中184个 176 175 168字节

-5个字节,感谢Xcoder先生

def f(x):i,k=[p for p in enumerate(map(x.find,x+"z"))if cmp(*p)][0];return[x[:i]+' '*len(x)]+[' '*k+''.join(d)+i*' 'for d in zip(*f(x[i+1:]))]if x[len(set(x)):]else[x,]

在线尝试!


我认为最新的保存无效。如果输入包含\什么?同样,您可以按照OP在我的解决方案中将长度为1的字符串列表输出为列表。
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer 相同的字节数:c
Rod

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.