Advent of Code dzień 3
Posted on Mon 08 June 2020 in Brain game, Games • 2 min read
Wyjmuję z historii zaległości. Tym razem AoC zdaje się, że z 2018 roku ale pewności nie mam.
#!/usr/bin/python import sys, getopt from copy import deepcopy def laziMikolaj(plik): # pierwotna tablica zbierajaca wszystkie adresy adresy = [] # aktualny adres Mikolaja currAdr= [0,0] adresy.append(deepcopy(currAdr)) # pierwszy adres jest pierwszy # tablica zliczajaca ilosc odwiedzin wizyty = [] # licze sobie ile razy robil skrecal up=0 right=0 down=0 left=0 # ile razy odwiedzil tylko raz ileRaz = 1 # otwieram plik z danymi with open('day3', 'r') as myfile: data=myfile.read().replace('\n', '') # iteruje znak po znaku for i in range(0, len(data)): if data[i] == '^': currAdr[1] += 1 up += 1 elif data[i] == '>': currAdr[0] += 1 right += 1 elif data[i] == 'v': currAdr[1] -= 1 down += 1 elif data[i] == '<': currAdr[0] -= 1 left += 1 # print "i = %d" % i # print currAdr # zbieram aktualne adresy do glowej tablicy adresy.append(deepcopy(currAdr)) # sortowanie po wspolrzednej X adx=sorted(adresy,key=lambda x: x[0]) # sortowanie po wspolrzednej Y bdx=sorted(adx,key=lambda x: x[1]) prevX = bdx[0][0] # poprzedniego nie ma wiec jest nim pierwszy prevY = bdx[0][1] # j.w. zmiana = 1 for i in range(0, len(bdx)): x = bdx[i][0] y = bdx[i][1] if x == prevX and y == prevY: if zmiana == 1: ileRaz -= 1 zmiana = 0 # print "zmiana z 1 na 0" # print "----------------------------------------------------------" # print "Obecnie: %d: %s" % (i, bdx[i]) # print "Poprzednio: %d, %d, ileRaz = %d" % (prevX, prevY, ileRaz) else: zmiana = 1 # print "zmiana z 0 na 1" ileRaz += 1 # print "----------------------------------------------------------" # print "Obecnie: %d: %s" % (i, bdx[i]) # print "Poprzednio: *** %d, %d, ileRaz = %d" % (prevX, prevY, ileRaz) prevX = x prevY = y #print "Adresy: %s" % adresy print "Adresy ma %s elementow" % len(adresy) print "Up: %s" % up print "Right: %s" % right print "Down: %s" % down print "Left: %s" % left #print "bdx: %s" % bdx print "Pojedynczych prezentow bylo: %d" % ileRaz def main(argv): inputfile = '' try: opts, args = getopt.getopt(argv,"hi:o:",["ifile="]) except getopt.GetoptError: print 'test.py -i <inputfile>' sys.exit(2) for opt, arg in opts: if opt == '-h': print 'test.py -i <inputfile>' sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg laziMikolaj(inputfile) if __name__ == "__main__": main(sys.argv[1:])
I drugie zadanie z tego dnia:
#!/usr/bin/python import sys, getopt import itertools from copy import deepcopy def lazi(plik,start, step): # pierwotna tablica zbierajaca wszystkie adresy adresy = [] # aktualny adres Mikolaja currAdr= [0,0] # pierwszy adres jest pierwszy ;) adresy.append(deepcopy(currAdr)) # tablica zliczajaca ilosc odwiedzin wizyty = [] # otwieram plik z danymi with open(plik, 'r') as myfile: data=myfile.read().replace('\n', '') # iteruje znak po znaku for i in range(start, len(data), step): if data[i] == '^': currAdr[1] += 1 elif data[i] == '>': currAdr[0] += 1 elif data[i] == 'v': currAdr[1] -= 1 elif data[i] == '<': currAdr[0] -= 1 # zbieram aktualne adresy do glowej tablicy adresy.append(deepcopy(currAdr)) return adresy def zlicz(lazik, adresy): unique = [k for k,g in itertools.groupby(sorted(adresy))] #print "Adresy: %s" % adresy print "Lazil: %s" % lazik print "Adresy ma %s elementow" % len(adresy) print "Pojedynczych prezentow bylo: %d" % len(unique) return len(unique) def main(argv): inputfile = '' try: opts, args = getopt.getopt(argv,"hi:o:",["ifile="]) except getopt.GetoptError: print 'test.py -i <inputfile>' sys.exit(2) for opt, arg in opts: if opt == '-h': print 'test.py -i <inputfile>' sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg Miki = lazi(inputfile, 0, 2) Robot = lazi(inputfile, 1, 2) Razem = Miki + Robot razem = zlicz("Razem", Razem) print "Razem: %d" % razem if __name__ == "__main__": main(sys.argv[1:])