On 06/13/2017 09:04 AM, Mark Lawrence via python-uk wrote:
On 07/06/2017 18:50, Jonathan Hartley wrote:
I recently submitted a solution to a coding challenge, in an employment context. One of the questions was to model a simple stack. I wrote a solution which appended and popped from the end of a list. This worked, but failed with timeouts on their last few automated tests with large (hidden) data sets.

 From memory, I think I had something pretty standard:

class Stack:

def __init__(self):
         self.storage = []

def push(arg):
         self.storage.append(arg)

def pop():
return self.storage.pop() if self.storage else None

def add_to_first_n(n, amount):
for n in range(n):
             self.storage[n] += amount

def dispatch(self, line)
         tokens = line.split()
         method = getattr(self, tokens[0])
         args = tokens[1:]
         method(*args)

def main(lines):
     stack = Stack()
for line in lines:
         stack.dispatch(line)


(will that formatting survive? Apologies if not)

Subsequent experiments have confirmed that appending to and popping from the end of lists are O(1), amortized.

So why is my solution too slow?

This question was against the clock, 4th question of 4 in an hour. So I wasn't expecting to produce Cython or C optimised code in that timeframe (Besides, my submitted .py file runs on their servers, so the environment is limited.)

So what am I missing, from a performance perspective? Are there other data structures in stdlib which are also O(1) but with a better constant?

Ah. In writing this out, I have begun to suspect that my slicing of 'tokens' to produce 'args' in the dispatch is needlessly wasting time. Not much, but some.

Thoughts welcome,

     Jonathan

--
Jonathan hartleytart...@tartley.com     http://tartley.com
Made out of meat.   +1 507-513-1101        twitter/skype: tartley


Any objections to me putting this thread up on the main Python mailing list and reddit as it seems rather interesting?


I'd rather not if I get any say in that, because I agreed in the T&C of the coding challenge that I wouldn't discuss the problem or solutions with others, and I don't want to annoy them right now. How about in a month? :-)


--
Jonathan Hartley    tart...@tartley.com    http://tartley.com
Made out of meat.   +1 507-513-1101        twitter/skype: tartley

_______________________________________________
python-uk mailing list
python-uk@python.org
https://mail.python.org/mailman/listinfo/python-uk

Reply via email to