diff options
Diffstat (limited to 'prog/aoc/23/10/}')
-rw-r--r-- | prog/aoc/23/10/} | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/prog/aoc/23/10/} b/prog/aoc/23/10/} deleted file mode 100644 index 96ac727..0000000 --- a/prog/aoc/23/10/} +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/python3 -from mmap import mmap -from sys import argv -file = open(argv[1], "r+b") -b = mmap(file.fileno(), 0) -linelen = b.find(b'\n')+1 -numlines = len(b)/linelen -S = b.find(b'S') -def korak(idx, camefrom): - if chr(b[idx]) in ['S', "-", "J", "7"]: - if idx%linelen != 0: - if chr(b[idx-1]) in ["-", "L", "F", "S"]: - if camefrom != idx-1: - return idx-1 - if chr(b[idx]) in ['S', "-", "F", "L"]: - if idx%linelen != -2%linelen: - if chr(b[idx+1]) in ["-", "J", "7", "S"]: - if camefrom != idx+1: - return idx+1 - if chr(b[idx]) in ['S', "|", "F", "7"]: - if idx//linelen != linelen-1: - if chr(b[idx+linelen]) in ["|", "L", "J", "S"]: - if camefrom != idx+linelen: - return idx+linelen - if chr(b[idx]) in ['S', "|", "J", "L"]: - if idx//linelen != 0: - if chr(b[idx-linelen]) in ["|", "F", "7", "S"]: - if camefrom != idx-linelen: - return idx-linelen -pos = S -prev = -1 -numsteps = 0 -tiles = [] -while numsteps == 0 or pos != S: - pos, prev = korak(pos, prev), pos - # print("korak iz ", prev//linelen, ", ", prev%linelen, "na ", pos//linelen, ", ", pos%linelen) - tiles.append(pos) - numsteps += 1 -print(numsteps//2) -print(tiles) -larger = max(tiles[0], tiles[-2]) -smaller = min(tiles[0], tiles[-2]) -print(smaller, larger, S) -schar = None -if larger-smaller == 2: - schar = "-" -if larger-smaller == 2*linelen: - schar = "|" -if smaller+linelen+1 == larger: - if smaller == S-1: - schar = "7" - else: - schar = "L" -if smaller+linelen-1 == larger: - if smaller == S+1: - schar = "F" - else: - schar = "J" -x3 = {} -def postavi(pos): - line = pos//linelen - column = pos%linelen - x3[(line*3+1, column*3+1)] = True - znak = chr(b[pos]) - if pos == S: - znak = schar - match znak: - case "-": - x3[(line*3+1, column*3+1+1)] = True - x3[(line*3+1, column*3+1-1)] = True - case "|": - x3[(line*3+1+1, column*3+1)] = True - x3[(line*3+1-1, column*3+1)] = True - case "L": - x3[(line*3+1-1, column*3+1)] = True - x3[(line*3+1, column*3+1+1)] = True - case "J": - x3[(line*3+1-1, column*3+1)] = True - x3[(line*3+1, column*3+1-1)] = True - case "7": - x3[(line*3+1+1, column*3+1)] = True - x3[(line*3+1, column*3+1-1)] = True - case "F": - x3[(line*3+1+1, column*3+1)] = True - x3[(line*3+1, column*3+1+1)] = True -for tile in tiles: - postavi(tile) -fillstack = [(0, linelen-1)] -def fill(): - -while len(fillstack) > 0: - fill(a.pop()) |