给出一组基于文本的“屏幕截图”,由可打印的ASCII字符组成,将它们合并成一个长截图,这样在阅读时就没有人需要自己去做了。
将输入作为字符串列表(称为“屏幕截图”)。每个截图由几行文字组成。
要合并两个屏幕截图:
您的输出应该是一个将所有屏幕截图合并在一起的字符串。截图合并不是关联的,所以您应该按照以下顺序合并:合并第一个和第二个屏幕截图,然后将结果截图与第三个合并,然后合并结果与第四个屏幕截图,以此类推,直到只剩下一个屏幕截图。
带有说明的
输入:
截图1:
> hi
hi <
> how are you doing
good <截图2:
hi <
> how are you doing
good <
> good
yes <输出:
> hi
hi <
> how are you doing
good <
> good
yes <解释:
从上到下,在第一张和第二张截图中找到第一行。
> how are you doing取上面这张截图的前半部分,包括这一行
> hi
hi <
> how are you doing
--remove everything below--找到在下一个屏幕截图中复制的第一行,然后在下面剪切一行。
--remove everything including and above--
good <
> good
yes <将这两个部分连接起来
> hi
hi <
> how are you doing
--join them together--
good <
> good
yes <输入:
line 1
line 2
line 3
line 2
line 3
line 4输出:
line 1
line 2
line 3
line 4输入:
line 1
line 2
line 10
line 10
line 2
line 3输出:
line 1
line 2
line 3请注意,尽管第10行是重复的,但第2行是首先重复并在那里拆分的。
输入:
words
really long repeated words
456
hi
really long repeated words
hmm
really long repeated words
kthxbye输出:
words
really long repeated words
hmm
really long repeated words
kthxbye注意,
really long repeated words在结果中出现了两次,因为其中包括了第一个屏幕截图中的一个和第二个屏幕截图中的另一个。
输入:
======= 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输出:
======= 10:42 ========
~~~ p1: hi
hi :p2 ~~~
~~~ p1: yes
no :p2 ~~~
~~~ p1: why?
because :p2 ~~~
~~~ p1: ok fine
~~~ ~~~
~~~ ~~~
v ----------- v请注意,时钟在时间上增加,这意味着时钟不是第一个重复的输入。因为它是在第一次重复输入之前,所以在第二次和第三次被忽略。
> hello
oh hi <
> how are you doing
good <输出:
> hello
oh hi <
> how are you doing
good <请注意,这里没有复制的内容,所以只需将它们附加在一起即可。
由于这是密码-高尔夫,最小的提交(以字节为单位)将获胜。
发布于 2018-02-22 18:09:25
将输入作为行列表,输出行列表。
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 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));
}https://codegolf.stackexchange.com/questions/154329
复制相似问题