题目链接

One number per line

题目说明

只保留数字,一行一个。

开始文件

- One number per line -
-----------------------
2,3,5,7,
11,13,17,
19,23,29,

结束文件

2
3
5
7
11
13
17
19
23
29

最佳分数

14

我的分数

19

2dd3J0qqwr<CR>q8@q$xZZ

第一次尝试

用宏处理下边的那堆数字。

2dd3J0qqwr<CR>q8@q$xZZ

19 分,差了 5 分,有点多。

第二次尝试

想不到怎么优化了,可能思路都不一样。

@not_antonia

2D3gJIwr<CR><Esc>u9@.$xZZ

18 分。好吧,2dd 可以简化成 2DgJ 类似 J,但不加空格,这个我之前也不知道。后边的操作不比我的快,就不分析了。

改造下。

2D3J0qqwr<CR>q8@q$xZZ

第三次尝试

:s 试试。

2D3gJ:s/,/\r/g<CR>ddZZ

19 分,反而多了 1 分,看来还得用宏。

@clupasq

dj3JIwr<CR><Esc>u9@.$xZZ

17 分。原来上边那个操作中 gJg 是可以省掉的。那还是分析一下后边的操作,感觉很有新意。

dj3J 没什么可说的。Iwr<CR><Esc>u 这个可就有说道了。这是干啥呢?看到后边用 9@.. 寄存器保存的是上次插入的文本,也就是 wr<CR>。原来还可以这样,不用 q 录制宏,而用 @. 调用上次插入的文本,这样有时会快一些。又长见识了。

第四次尝试

但看起来这操作已经很紧凑了,居然还能再减 3 分。我还是直接看吧。

@Sakigw

dj3gJV"=[<C-R><C-A>]<CR>pZZ

16 分。又开眼了,用了 = 表达式寄存器。<C-R><C-A> 是粘贴光标所在的字符串,类似的还有 <C-R><C-A>,粘贴光标所在的单词(特殊符号会分隔单词)。

CTRL-F  the Filename under the cursor
CTRL-P  the Filename under the cursor, expanded with 'path' as in gf
CTRL-W  the Word under the cursor
CTRL-A  the WORD under the cursor; see WORD
CTRL-L  the line under the cursor

=[11,22] 会变成

11
22

具体讲解:https://vi.stackexchange.com/questions/13602/the-meaning-of-in-vim

@udioica

5gJV"=[<C-R><C-A>]<CR>pZZ

14 分。可以看到 2 的前边多了一串减号,减号正好是偶数个,所以就相互抵消了……如果是奇数个,2 就会变成 -2 了。

最佳操作

@udioica

5gJV"=[<C-R><C-A>]<CR>pZZ

实用操作

@Sakigw

dj3gJV"=[<C-R><C-A>]<CR>pZZ

16 分。

最佳操作依赖前两行的特定格式,尤其是那偶数个 -,通用性明显欠佳。

文章目录