0%

codewars-190216

今天在 codewars 遇到一道题,不难,但是看到别人的解法被惊艳到了,故而做此纪录。

原题如下:

1
2
3
4
5
6
7
8
9
10
11
Write a simple parser that will parse and run Deadfish.

Deadfish has 4 commands, each 1 character long:

i increments the value (initially 0)
d decrements the value
s squares the value
o outputs the value into the return array
Invalid characters should be ignored.

parse("iiisdoso") ==> [8, 64]

我的解法就很直白,大部分人基本上都是这样做的,虽然也想过有没有其他的解法,但是没想出来 233

1
2
3
4
5
6
7
8
9
def parse(data):
init = 0
out = []
for i in data:
if i == 'i': init += 1
elif i == 'd': init -= 1
elif i == 's': init *= init
elif i == 'o': out.append(init)
return out

提交之后看到有个人是下面这样的解法,惊了,突然感觉 get 到了某种小技巧(但是不记下来可能过段时间就忘了

1
2
3
4
5
6
7
8
9
def parse(data):
action = {'i': lambda v, r: v + 1,
'd': lambda v, r: v - 1,
's': lambda v, r: v * v,
'o': lambda v, r: r.append(v) or v}
v, r = 0, []
for a in data:
v = action[a](v, r) if a in action else v
return r

Welcome to my other publishing channels