CoordType = typing.TypeVar("CoordType", bound=tuple[int | float, ...])
def coord_add(coords1:CoordType, coords2:CoordType) -> CoordType:
return tuple(map(operator.add, coords1, coords2))
def walk_around() -> tuple[bool, set[tuple[int, int]]]:
guard = guard_start
# heading north
move = (-1, 0)
# where we've stepped
visited = set()
visited.add(guard)
# transitions (guard, next) where we bonked into obstacles
bonked = set()
next = coord_add(guard, move)
while in_bounds(grid, *next):
if grid[next[0]][next[1]] == '#':
if (guard, next) in bonked:
# this is a loop!
return True, visited
bonked.add((guard, next))
# turn right
move = (move[1], -move[0])
else:
# take the step
guard = next
visited.add(guard)
next = coord_add(guard, move)
return False, visited
_, visited = walk_around()
print(len(visited))
loop_count = 0
for (r, c) in visited:
if grid[r][c] == '^':
continue
# add an obstacle
grid[r][c] = '#'
loop, _ = walk_around()
grid[r][c] = '.'
if loop:
loop_count += 1
print(loop_count)
Если я оставлю подсказку типа в walk_around(), я получу предупреждение о том, что выведенные типы r и c внизу являются Any вместо int и поэтому не подходят для индексации списка, хотя предполагаемый тип walk_around() по-прежнему точно такой же, как и в подсказке , а предполагаемый тип посещения по-прежнему set[tuple[int, int]]. Почему вывод просто сбивается при отсутствии этой подсказки, которая намекает на то, что он уже знал?
(Если это имеет значение, это в IntelliJ IDEA 2024.3 с v243 Плагин Python, эквивалентный Pycharm 2024.3.)
Это фрагмент моего решения для Advent of Code 2024, день 6, на Python 3.12: [code]CoordType = typing.TypeVar("CoordType", bound=tuple[int | float, ...]) def coord_add(coords1:CoordType, coords2:CoordType) -> CoordType: return tuple(map(operator.add, coords1, coords2))
# heading north move = (-1, 0) # where we've stepped visited = set() visited.add(guard) # transitions (guard, next) where we bonked into obstacles bonked = set() next = coord_add(guard, move) while in_bounds(grid, *next): if grid[next[0]][next[1]] == '#': if (guard, next) in bonked: # this is a loop! return True, visited bonked.add((guard, next)) # turn right move = (move[1], -move[0]) else: # take the step guard = next visited.add(guard) next = coord_add(guard, move) return False, visited
_, visited = walk_around() print(len(visited))
loop_count = 0 for (r, c) in visited: if grid[r][c] == '^': continue # add an obstacle grid[r][c] = '#' loop, _ = walk_around() grid[r][c] = '.' if loop: loop_count += 1 print(loop_count) [/code] Если я оставлю подсказку типа в walk_around(), я получу предупреждение о том, что выведенные типы r и c внизу являются Any вместо int и поэтому не подходят для индексации списка, хотя предполагаемый тип walk_around() по-прежнему точно такой же, как и в подсказке , а предполагаемый тип посещения по-прежнему set[tuple[int, int]]. Почему вывод просто сбивается при отсутствии этой подсказки, которая намекает на то, что он уже знал? (Если это имеет значение, это в IntelliJ IDEA 2024.3 с v243 Плагин Python, эквивалентный Pycharm 2024.3.)
Это фрагмент моего решения для Advent of Code 2024, день 6, на Python 3.12:
CoordType = typing.TypeVar( CoordType , bound=tuple )
def coord_add(coords1:CoordType, coords2:CoordType) -> CoordType:
return tuple(map(operator.add, coords1, coords2))...
I'm solving a series of 80 ODE's that represent the dynamics of an influenza outbreak in a population split into three immunity levels and four age groups. I have just changed my initial conditions to account for some people to be asymptomatic. And...
Я пишу код в Python, который предсказывает уровень энергии водорода, который я буду использовать в качестве шаблона для исследования уровней энергии Quarkonium. Я использую функцию scipy.integrate.odeint () для решения уравнения Shroedinger, и она...
Я пишу код в Python, который предсказывает уровень энергии водорода, который я буду использовать в качестве шаблона для исследования уровней энергии Quarkonium. Я использую функцию scipy.integrate.odeint () для решения уравнения Shroedinger, и она...