49
Awesome Team
Philippe Cholet
https://github.com/Philippe-Cholet
Last seen 29 minutes ago
Member for 6 years, 2 months, 16 days
Difficulty Advanced
I was a math teacher in France for two years. I'm currently reconverting to IT, I'm here to improve my Python skills, and practice English.
I started timeit random tests before I see you already did it. But I test the current ten published functions (sometimes a bit changed).
**1000 sentences from 1 to 100 words from 3 to 13 letters, tested 10000 times.**
Functions are sorted in order to have decreasing performances.
from timeit
More
From another solution I "simplified", I would like to add a fourth one:
```python
import functools as fn
import numpy as np
replace_first = fn.partial(np.roll, shift=-1)
```
More
Just so you know, instead of `num.insert(0, rem)`, you could have done `num.append(rem)`. The elements of `num` would be reversed, but it would not change the final result. That and `append` is contant time (`O(1)` complexity, it just add the element at the end) while `num.insert(0, ...)` does `len(
More
@kudinov.feodor Well, a simple fix (keep separator in "name part"):
def _sort_by_ext_key(filename):
name, sep, ext = filename.rpartition('.')
# assert sep in ('', '.')
return (ext, name) if name else ('', sep + ext)
More
I did use yield from too but I prefered `yield from reversed(run)` to slicing making a copy. I quibble a little. =)
More
`range(len(items)-1)` is enough because `range(0)` and `range(-1)` are both empty.
More
An eventually dead unit_1 still wrongfully hits unit_2 line 21. Lucky it passed tests.
More
So `checkio = np.linalg.det`. lambda is not always needed.
If you see other solutions with rounding methods, it's because the mission lately evolved.
More
Others units than Warrior are subclasses of Warrior, so you don't have to copy is_alive property each time, only one time in the Warrior class.
If you think Army class like a list, consider (It wasn't my first idea but it's realy great)
class Army(list):
#Each instance of Army is a lis
More
We are all (except you) reinventing the wheel when sympy (and you) does it naturally. **+5**
More
Reduce is useful to apply a function to a whole sequence so
mult_two = lambda *args: reduce(mul, args)
# is even more powerful without difficulty.
mult_two(15, 6, 1991)
mult_two(*range(1,6))
More
I didn't know about `defaultdict(lambda: defaultdict(type))`, thanks.
I thought about `defaultdict(defaultdict(type))` but that was wrong.
More
For info, `next_enemy[int(not i)]` and `next_enemy[not i]` are equivalent.
We have
list[True] == list[1] and list[False] == list[0]
It's because we have
True == 1 and False == 0
More
I restarted this serie with your forum post. I thought about dataclass for weapons, not for warrior classes, it's interresting.
More
Or a more "complex" unpacking instead of the whole try/except block:
value, weight, limit, *_ = item + (total_weight,)
# there is also this below but I don't like it.
value, weight, limit = (item + (total_weight,))[:3]
More
I could have explain the two last lines.
**line 16:** A flood zone starts at index i if the current altitude is found again, strictly after. If not then water can't be here. This assures index i is underwater. Since we enumerate possibles index, the first time altitudes.index don't raise a ValueErr
More
It's because you can access builtins (thanks to `vars()`) as a dict and not as a module like it should be, so this would not work outside checkio editor. Maybe I should have forbidden divmod function in builtins. (I suppose it calls it somehow, it's hard to decode with vowels replaced by "a".)
Then
More
`lambda x: str.strip(x)` is the same as `str.strip`, just more complicated.
Comments this way seems unusual to me: `# Currenlty, only ``int`` is considered.` for example.
More
# line 8
type(tree[0]) is str or type(tree[0]) is int
# or
isinstance(tree[0], (str, int))
# line 19
[x for x in iterate(tree)]
# or
list(iterate(tree))
# line 27
tree = False
# or just
break
# since it does the does the same thing in a clear way
More
I'm not sure I would call it clear, but I like the way your getter/setter functions manage multiple arguments, and the use of `reduce` I think.
More