算法题分享:VimOperator – Vim的简单操作模拟

目录

最近老看到一些比较奇怪的题目,继续给大家分享。

题目

模拟vim左右、replace的操作,大概意思如动图

l: move the cursor right
l: move the cursor right
h: move the cursor left
rx: replace the character under the cursor with x

算法题分享:VimOperator – Vim的简单操作模拟插图

解答

这道题其实不是特别麻烦,更像一道OOP设计题。网上也没看到类似的答案,自己写了个。

class VimOperator(object):
    def __init__(self, _input, action):
        self.input = list(_input)
        self.action = action
        self.index = 0
        self.left_limit = 0
        self.right_limit = len(self.input) - 1

    def process(self):
        idx = 0
        while idx < len(self.action):
            ch = self.action[idx]
            #case 1: for number
            if ch.isnumeric():
                for _ in range(int(ch)):
                    self.move(self.input[idx + 1])
                    idx += 2
            #case 2: for left / right
            elif ch in ('l', 'h'):
                self.move(ch)
                idx += 1
            #case 3: replace value
            elif ch == 'r':
                self.input[self.index] = self.action[idx + 1]
                idx += 2

    def move(self, direction):
        if direction == 'h':
            self.index = max(self.left_limit, self.index - 1)
        else :
            self.index = min(self.right_limit, self.index + 1)

    def get_output(self):
        return "".join(self.input)

s = VimOperator('hello', 'llhrx')
s.process()
print(s.get_output())

 

 

看完了?留个评分呗?
[0人评了分,平均: 0/5]

本站原创文章皆遵循“署名-非商业性使用-相同方式共享 3.0 (CC BY-NC-SA 3.0)”。转载请保留以下标注:

原文来源:《算法题分享:VimOperator – Vim的简单操作模拟》

发表评论

邮箱地址不会被公开。

返回顶部