Ce coup ci j'ai ete paresseux, et pour la deuxieme partie mon code ne marche pas avec tous les inputs.
J'ai fait le cube correspondant a mon input en papier en inscrivant le numero des faces, pour voir quelle face transitionnait vers quelle face, et j'ai hardcode le passage d'une face a l'autre (methode wrap3D).
fromdataclassesimportdataclassimportreboard=[]drawboard=[]ARROWS={0:">",1:"v",2:"<",3:"^"}isPart2=False@dataclassclassMe:x:inty:intdirection:int# 0=R 1=D 2=L 3=Udefwrap2D(self):matchself.direction:case0:# rightreturnnext(xforxinrange(len(board[self.y]))ifboard[self.y][x]!=" "),self.y,0case1:# downreturnself.x,next(yforyinrange(len(board))ifboard[y][self.x]!=" "),1case2:# leftreturnlen(board[self.y])-1,self.y,2case3:# upreturnself.x,next(yforyinrange(len(board)-1,-1,-1)iffindInBoard(self.x,y)!=" "),3defwrap3D(self):matchself.direction:case0:# rightifself.y<50:# right of 2 -> right of 5 reversedreturn99,149-self.y,2elifself.y<100:# right of 3 -> down of 2returnself.y+50,49,3elifself.y<150:# right of 5 -> right of 2 reversedreturn149,49-self.y+100,2else:# right of 6 -> down of 5returnself.y-100,149,3case1:# downifself.x<50:# down of 6 -> up of 2returnself.x+100,0,1elifself.x<100:# down of 5 -> right of 6return49,self.x+100,2else:# down of 2 -> right of 3return99,self.x-50,2case2:# leftifself.y<50:# left of 1 -> left of 4 reversereturn0,149-self.y,0elifself.y<100:# left of 3 -> up of 4returnself.y-50,100,1elifself.y<150:# left of 4 -> left of 1 reversereturn50,49-self.y+100,0else:# left of 6 -> up of 1returnself.y-100,0,1case3:# upifself.x<50:# up of 4 -> left of 3return50,self.x+50,0elifself.x<100:# up of 1 -> left of 6return0,self.x+100,0else:# up of 2 -> down of 6returnself.x-100,199,3defmoveWrap(self):x,y,dir=self.wrap3D()ifisPart2elseself.wrap2D()iffindInBoard(x,y)==".":self.x=xself.y=yself.direction=dirdefdrawPosition(self):s=drawboard[self.y]drawboard[self.y]=s[:self.x]+ARROWS[self.direction]+s[self.x+1:]defmoveBy1(self,offsetX,offsetY):matchfindInBoard(self.x+offsetX,self.y+offsetY):case".":self.x+=offsetXself.y+=offsetYcase" ":self.moveWrap()case"#":passdefmove(self,size:int):foriinrange(size):matchself.direction:case0:# rightself.moveBy1(1,0)case1:# downself.moveBy1(0,1)case2:# leftself.moveBy1(-1,0)case3:# upself.moveBy1(0,-1)self.drawPosition()deffindInBoard(x,y):ifx==-1ory==-1ory>=len(board)orx>=len(board[y]):return" "returnboard[y][x]withopen("2022/input_files/day22")asf:data="".join([lineforlineinf])groups=[group.split("\n")forgroupindata.split("\n\n")]board=groups[0]drawboard=board.copy()instructions=groups[1][0]moveSizes=list(map(int,re.findall(r"(\d+)",instructions)))turns=re.findall(r"([A-Z]+)",instructions)me=Me(board[0].index("."),0,0)formoveSize,turninzip(moveSizes,turns):me.move(moveSize)me.direction+=1ifturn=="R"else-1me.direction%=4me.move(moveSizes[-1])password=1000*(me.y+1)+4*(me.x+1)+me.directionprint(f"{password=}")
Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.
# Mode triche on
Posté par Eric P. . En réponse au message Avent du Code, jour 22. Évalué à 4.
Ce coup ci j'ai ete paresseux, et pour la deuxieme partie mon code ne marche pas avec tous les inputs.
J'ai fait le cube correspondant a mon input en papier en inscrivant le numero des faces, pour voir quelle face transitionnait vers quelle face, et j'ai hardcode le passage d'une face a l'autre (methode wrap3D).
Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.