49
Phil15
30 56 64 Leader of the month
23040/ 25141
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.

Best reviews / Newest reviews
methods contest-quarkov 9 3
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
Three solutions + 1 in comments-Phil15 5 1
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
For changed mission - Explained-Selindian 3 1
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
filename.rpartition('.'), partial(sorted, key=...)-Phil15 3
@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
Lion in Cairo-veky 2 1
I did use yield from too but I prefered `yield from reversed(run)` to slicing making a copy. I quibble a little. =) More
Going up?-HeNeArKr 2
`range(len(items)-1)` is enough because `range(0)` and `range(-1)` are both empty. More
First-24esun 2 1
An eventually dead unit_1 still wrongfully hits unit_2 line 21. Lucky it passed tests. More
1-liner: numpy determinant-Stensen 2 2
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
The Vampires-JimmyCarlos 2 1
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
SymPy-flpo 2 1
We are all (except you) reinventing the wheel when sympy (and you) does it naturally. **+5** More
Always dreamt of using reduce :)-vit.aborigen 2 1
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
Dijkstra, heapq-kurosawa4434 2 1
I didn't know about `defaultdict(lambda: defaultdict(type))`, thanks. I thought about `defaultdict(defaultdict(type))` but that was wrong. More
BFS limited by closest rook-BrianMcleod 2
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
Third Newton-veky 2
I restarted this serie with your forum post. I thought about dataclass for weapons, not for warrior classes, it's interresting. More
Dynamic programming-Phil15 2
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
9-liner: generator with itertools.accumulate for altitudes-Phil15 1
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
No lambda, 14 variables-PythonWithPI 1
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
First-Sillte 1 1
`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
First-brispol19 1 1
# 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
may the force be with you-juestr 1 1
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
1
2 3 4 5 6 7 8 9 10 11 12 13