You are reading a single comment by @useless and its replies. Click here to read the full conversation.
  • were you saying my function was very C-like?

    i've actually just re-written it and it's almost bang on the same as yours with enumerate - had seen a few people talking about that so tried to get that working. still not entirely sure what the :: does in grid[::d], apart from take every d'th y.

    my function:

    def findTrees2(funcdata, dx, dy):
        numTrees = 0
        for i, line in enumerate(funcdata[::dy]):
            if line[(i*dx) % len(line)] == '#': numTrees += 1
        return numTrees
    

    edit: was also confused as to why you can't print an enumerate object until you put it into a list. but guess that's a conversation for data structures... i should really do a bit more formal learning

  • still not entirely sure what the :: does in grid[::d], apart from take every d'th y

    The slice syntax is

    grid[start:stop:stride]
    

    and you can omit any, so start defaults to zero, stop to -1 (which means the end, since negative indices count backwards), and stride defaults to 1.

    • grid[start] just gives you the element at index start (ie, the half-open interval [start,start+1) in maths language),
    • [start:stop] gives you the sub-sequence/sub-string with default stride 1,
    • [start::stride] would give you every stride'th element from start to the end, etc.
  • Thanks - i had never seen the stride part of the syntax, always just sliced [x:y]

  • This is great, just doing the challenges is already good for my programming skills but info like this and things previously posted by @Greenbank are even better. Helps me move away from hacky solutions to proper solutions.

About

Avatar for useless @useless started