49
Phil15
30 56 64 Leader of the month
23157/ 25141
Last seen 7 hours ago
Member for 6 years, 3 months, 11 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 6 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
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
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
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
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
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
First-24esun 2 1
An eventually dead unit_1 still wrongfully hits unit_2 line 21. Lucky it passed tests. 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
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
SymPy-flpo 2 1
We are all (except you) reinventing the wheel when sympy (and you) does it naturally. **+5** More
Going up?-HeNeArKr 2
`range(len(items)-1)` is enough because `range(0)` and `range(-1)` are both empty. More
Strings of rings-HeNeArKr 1 1
No need of itertools.chain counts = Counter(ring for cube in cubes for ring in rings(cube)) you can do rings without while loop: i = ring.index(first) ring = ring[i:] + ring[:i] I did this rotation like you at first. Ah and you can change rings in generator: 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
Second-fed.kz 1 1
Like it but an iterable is enough. :D def checkio(array): for number in array: try: array.index(number, array.index(number) + 1) yield number except ValueError: pass More
First-yoichi 1
for subtree in tree[1]: if result := find_node(subtree, node): # python 3.8+ return result # No need to return None, it returns None when it does not encounter any return statement. You call `find_node` a lot. Hopefully I did not provide too big trees in random tests. More
I know it's awful-Merzix 1 1
I agree it's awful ^^. I tried some improvements. Happy new coding year! from math import ceil def available_coins(price, denominations): for i in sorted(denominations): if i <= price: for _ in range(price // i): yield i def chec More
1
2 3 4 5 6 7 8 9 10 11 12 13