• 0 Posts
  • 78 Comments
Joined 1 month ago
cake
Cake day: November 7th, 2025

help-circle









  • Sounds like being a project manager for a team of one coder AI, honestly quite depressing. You don’t get to do the fun part (coding) or you don’t actually get to interact with intelligent human beings (possibly only fun part of a managerial role). The only positive thing you get out of it is basically output (which may become unmaintainable for complex projects in the long run). Sounds like something that only CEOs and people trying to get rich quickly would like.




  • Turns out on part 2 you can remove on access rather than after a full sweep of the grid, which cuts down the number of iterations you need to do about 1/2 sometimes 1/3 (depending on input).

    import itertools as it
    from pathlib import Path
    
    import numpy as np
    
    cwd = Path(__file__).parent.resolve()
    
    
    def parse_input(file_path):
      with file_path.open("r") as fp:
        grid = np.array(list(map(list, list(map(str.strip, fp.readlines())))),
                        dtype=str)
      return grid
    
    
    def solve_problem(file_name, single_attempt=True):
    
      grid = parse_input(Path(cwd, file_name))
      nr, nc = grid.shape
      nacc_total = 0
      stop = False
    
      while not stop:
    
        nacc = 0
    
        for i,j in it.product(range(nr), range(nc)):
    
          if grid[i,j] != '@':
            continue
    
          if np.count_nonzero(grid[max(i-1, 0):min(i+2, nr),
                                   max(j-1, 0):min(j+2, nc)] == '@')<5:
            nacc += 1
    
            if not single_attempt:
              grid[i,j] = '.'
    
        nacc_total += nacc
    
        if nacc==0 or single_attempt:
          stop = True
    
      return nacc_total
    




  • import numpy as np
    
    def parse_input(file_path):
    
      with file_path.open("r") as fp:
        banks = map(str.strip, fp.readlines())
    
      return map(lambda x: list(map(int, list(x))), banks)
    
    def max_jolt(bank, length):
    
      if length==1:
        return max(bank)
    
      amax = np.argmax(bank[:-(length-1)])
    
      return 10**(length-1)*bank[amax] + max_jolt(bank[amax+1:], length-1)
    
    def solve_problem(file_name, length):
    
      banks = parse_input(Path(cwd, file_name))
      sumj = 0
    
      for bank in banks:
        sumj += max_jolt(bank, length)
    
      return sumj