首页
学习
活动
专区
圈层
工具
发布

截图
EN

Code Golf用户
提问于 2018-01-29 20:19:08
回答 3查看 320关注 0票数 1

Introduction

给出一组基于文本的“屏幕截图”,由可打印的ASCII字符组成,将它们合并成一个长截图,这样在阅读时就没有人需要自己去做了。

挑战

将输入作为字符串列表(称为“屏幕截图”)。每个截图由几行文字组成。

要合并两个屏幕截图:

  1. 从第一行开始,检查该行是否出现在第二个屏幕截图中
    • 如果是的话,就剪掉第一个屏幕截图,这样它就会在这个重复的行结束,然后再剪第二个屏幕截图,这样它就会在重复的行后面开始一行。
    • 把这两件事连在一起

  2. 如果他们没有共同的文本行,只需将第二张截图追加到第一行(从新行开始)即可。

您的输出应该是一个将所有屏幕截图合并在一起的字符串。截图合并不是关联的,所以您应该按照以下顺序合并:合并第一个和第二个屏幕截图,然后将结果截图与第三个合并,然后合并结果与第四个屏幕截图,以此类推,直到只剩下一个屏幕截图。

带有说明的

示例

输入:

截图1:

代码语言:javascript
复制
> hi
      hi <
> how are you doing
    good <

截图2:

代码语言:javascript
复制
      hi <
> how are you doing
    good <
> good
     yes <

输出:

代码语言:javascript
复制
> hi
      hi <
> how are you doing
    good <
> good
     yes <

解释:

从上到下,在第一张和第二张截图中找到第一行。

代码语言:javascript
复制
> how are you doing

取上面这张截图的前半部分,包括这一行

代码语言:javascript
复制
> hi
      hi <
> how are you doing
--remove everything below--

找到在下一个屏幕截图中复制的第一行,然后在下面剪切一行。

代码语言:javascript
复制
--remove everything including and above--
    good <
> good
     yes <

将这两个部分连接起来

代码语言:javascript
复制
> hi
      hi <
> how are you doing
--join them together--
    good <
> good
     yes <

测试用例

输入:

代码语言:javascript
复制
line 1
line 2
line 3

line 2
line 3
line 4

输出:

代码语言:javascript
复制
line 1
line 2
line 3
line 4

输入:

代码语言:javascript
复制
line 1
line 2
line 10

line 10
line 2
line 3

输出:

代码语言:javascript
复制
line 1
line 2
line 3

请注意,尽管第10行是重复的,但第2行是首先重复并在那里拆分的。

输入:

代码语言:javascript
复制
words
really long repeated words
456

hi
really long repeated words
hmm
really long repeated words
kthxbye

输出:

代码语言:javascript
复制
words
really long repeated words
hmm
really long repeated words
kthxbye

注意,really long repeated words在结果中出现了两次,因为其中包括了第一个屏幕截图中的一个和第二个屏幕截图中的另一个。

输入:

代码语言:javascript
复制
======= 10:42 ========
~~~ p1: hi
            hi :p2 ~~~
~~~ p1: yes
            no :p2 ~~~
v     -----------    v


======= 10:43 ========
            no :p2 ~~~
~~~ p1: why?
       because :p2 ~~~
~~~ p1: ok fine
v     -----------    v


======= 10:44 ========
       because :p2 ~~~
~~~ p1: ok fine
~~~                ~~~
~~~                ~~~
v     -----------    v

输出:

代码语言:javascript
复制
======= 10:42 ========
~~~ p1: hi
            hi :p2 ~~~
~~~ p1: yes
            no :p2 ~~~
~~~ p1: why?
       because :p2 ~~~
~~~ p1: ok fine
~~~                ~~~
~~~                ~~~
v     -----------    v

请注意,时钟在时间上增加,这意味着时钟不是第一个重复的输入。因为它是在第一次重复输入之前,所以在第二次和第三次被忽略。

边缘案例输入:

代码语言:javascript
复制
> hello
   oh hi <

> how are you doing
    good <

输出:

代码语言:javascript
复制
> hello
   oh hi <
> how are you doing
    good <

请注意,这里没有复制的内容,所以只需将它们附加在一起即可。

由于这是密码-高尔夫,最小的提交(以字节为单位)将获胜。

EN

回答 3

Code Golf用户

发布于 2018-02-22 18:09:25

JavaScript (ES6),112个字节

将输入作为行列表,输出行列表。

代码语言:javascript
复制
s=>s.reduce((a,b)=>(i=a.findIndex(x=>(j=b.indexOf(x))>=0))<0?a.concat(b):a.slice(0,i+1).concat(b.slice(j+1)),[])
代码语言:javascript
复制
const f =
s=>s.reduce((a,b)=>(i=a.findIndex(x=>(j=b.indexOf(x))>=0))<0?a.concat(b):a.slice(0,i+1).concat(b.slice(j+1)),[])
;
const tests = [
[`line 1
line 2
line 3`,
`line 2
line 3
line 4`],
[`line 1
line 2
line 10`,
`line 2
line 10
line 3`],
[`words
really long repeated words
456`,
`hi
really long repeated words
hmm
really long repeated words
kthxbye`],
[`======= 10:42 ========
~~~ p1: hi
            hi :p2 ~~~
~~~ p1: yes
            no :p2 ~~~
v     -----------    v`,
`======= 10:43 ========
            no :p2 ~~~
~~~ p1: why?
       because :p2 ~~~
~~~ p1: ok fine
v     -----------    v`,
`======= 10:44 ========
       because :p2 ~~~
~~~ p1: ok fine
~~~                ~~~
~~~                ~~~
v     -----------    v`],
[`> hello
   oh hi <`,
`> how are you doing
    good <`]
];

for(let test of tests) {
  console.log('Input:', test=test.map(x=>x.split('\n')));
  console.log('Output:', f(test));
}
票数 3
EN

Code Golf用户

发布于 2018-01-30 11:18:24

果冻,29字节

代码语言:javascript
复制
Ỵ€ð¹Ƥp¹ÐƤ}Ṛ⁼"¥Ḣ¥/ÐfḢṖ;¥/ȯ;µ/Y

在网上试试!

票数 2
EN

Code Golf用户

发布于 2018-02-22 11:11:31

Python 2,124个字节

代码语言:javascript
复制
def f(S):
 x=[]
 for y in S:
	y=y.split('\n');x+=y;i=0
	while(x[i]in y)<1:i+=1
	x=x[:i]+y[y.index(x[i]):]
 print'\n'.join(x)

在网上试试!

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

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

复制
相关文章

相似问题

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