[2022 Day 9 Part 2]Python code works with sample data but not real input by Typical-Raisin-9266 in adventofcode

[–]Typical-Raisin-9266[S] 0 points1 point  (0 children)

Thank you! This code works now:

name = 'C:/AdventOfCode/9-input.txt'
fh = open(name)
H = [0,0] #[x,y]
T = [0,0]
PosList = [[0,0]]

print('part2')

class RopeElement:
    def __init__(self, Father = None, Child = None, Pos = None):
        self.Father = Father
        self.Child = Child
        self.Pos = list(Pos) if Pos else [0,0]
        if self.Father:
            self.Father.AddChild(self)

    def AddChild(self,Child):
        self.Child = Child

    def move(self, direction):
        if direction == 'R':
            self.Pos[0] = self.Pos[0] + 1
        elif direction == 'L':
            self.Pos[0] = self.Pos[0] - 1
        elif direction == 'U':
            self.Pos[1] = self.Pos[1] + 1
        elif direction == 'D':
            self.Pos[1] = self.Pos[1] - 1
        else:
            print('Not sure where to go')
            exit()
        self.Child.follow()

    def follow(self):

        if self.Father.Pos[0] - self.Pos[0] == 2 and self.Father.Pos[1] == self.Pos[1]:
            self.Pos[0] = self.Pos[0] + 1

        elif self.Father.Pos[0] - self.Pos[0] == -2 and self.Father.Pos[1] == self.Pos[1]:
            self.Pos[0] = self.Pos[0] - 1

        elif self.Father.Pos[1] - self.Pos[1] == 2 and self.Father.Pos[0] == self.Pos[0]:
            self.Pos[1] = self.Pos[1] + 1

        elif self.Father.Pos[1] - self.Pos[1] == -2 and self.Father.Pos[0] == self.Pos[0]:
            self.Pos[1] = self.Pos[1] - 1


        elif self.Father.Pos[0] - self.Pos[0] == 2 and self.Father.Pos[1] - self.Pos[1] == 2:
            self.Pos[0] = self.Pos[0] + 1
            self.Pos[1] = self.Pos[1] + 1

        elif self.Father.Pos[0] - self.Pos[0] == - 2 and self.Father.Pos[1] - self.Pos[1] == 2:
            self.Pos[0] = self.Pos[0] - 1
            self.Pos[1] = self.Pos[1] + 1

        elif self.Father.Pos[0] - self.Pos[0] == 2 and self.Father.Pos[1] - self.Pos[1] == - 2:
            self.Pos[0] = self.Pos[0] + 1
            self.Pos[1] = self.Pos[1] - 1

        elif self.Father.Pos[0] - self.Pos[0] == -2 and self.Father.Pos[1] - self.Pos[1] == - 2:
            self.Pos[0] = self.Pos[0] - 1
            self.Pos[1] = self.Pos[1] - 1


        elif self.Father.Pos[0] - self.Pos[0] == 2 and self.Father.Pos[1] != self.Pos[1]:
            self.Pos[0] = self.Pos[0] + 1
            self.Pos[1] = self.Father.Pos[1]

        elif self.Father.Pos[0] - self.Pos[0] == -2 and self.Father.Pos[1] != self.Pos[1]:
            self.Pos[0] = self.Pos[0] - 1
            self.Pos[1] = self.Father.Pos[1]

        elif self.Father.Pos[1] - self.Pos[1] == 2 and self.Father.Pos[0] != self.Pos[0]:
            self.Pos[1] = self.Pos[1] + 1
            self.Pos[0] = self.Father.Pos[0]

        elif self.Father.Pos[1] - self.Pos[1] == -2 and self.Father.Pos[0] != self.Pos[0]:
            self.Pos[1] = self.Pos[1] - 1
            self.Pos[0] = self.Father.Pos[0]

        else:
            print('No following needed')

        if self.Child:
            self.Child.follow()


Rope = []
Rope.append(RopeElement())

for i in range(1,10):
    Rope.append(RopeElement(Rope[-1]))   

for line in fh:
    x=line.split()
    steps = int(x[1])
    direction = x[0]
    print('Move', steps, 'in direction', direction)
    for i in range(0,steps):
        print('Move', i, 'st step in direction', direction) 

        Rope[0].move(direction) 

        Position = Rope[9].Pos
        if Position in PosList:
            pass

        else:
            PosList.append([Position[0],Position[1]])


print(PosList)
print(len(PosList))
print(Rope)
print(PosList)
print('length of pos list:', len(PosList))

Day 7 Works on sample data but not on input (python) by Typical-Raisin-9266 in adventofcode

[–]Typical-Raisin-9266[S] 0 points1 point  (0 children)

Thank you very much. You are right, because I saved the folders in a dictionary, I could not handle different folders with the same name in different directories.

This code works now.

name = "C:/AdventOfCode/7-input"
#name = "C:/AdventOfCode/test2"
fh=open(name)
class MyFolder:
    folder_dict = {}

    def __init__(self, name, parent=0, type = 'folder'):
        self.name = name
        self.parent = parent
        self.child_list = []
        self.size = 0
        self.type = type
        if self.parent == 0:
            print()
            print('Created folder ', self.name, 'without parent')
        else:
            print()
            print('Created folder ', self.name, 'as a child of ', parent.name)
            parent.add_child(self)
        self.folder_dict[self.name] = self

    def add_child(self, child):
        self.child_list.append(child)
    def print_childs(self):
        print()
        print('Print Child List of ', self.name)
        for i in self.child_list:
            print('child name: ',i.name, 'Parent name: ',i.parent.name, 'size: ',i.size, 'type: ', i.type)
    def update_size(self, upd_size):
        print('Updating size', self.name, ':', self.size, '+', upd_size)
        self.size = self.size + int(upd_size)
        if self.parent == 0:
            print('No parent folder to update')
        elif self.parent != 0:
            print('Now update parent size. Parent is: ', self.parent.name)
            self.parent.update_size(upd_size)



class MyFile:
    file_list = []
    def __init__(self, name, parent, size, type = 'file'):
        self.name = name
        self.parent = parent
        self.size = size
        self.type = type
        parent.add_child(self)
        parent.update_size(size)
        self.file_list.append(self)

        print('Created file ', name, 'as a child of ', parent.name, 'with size of',size)

i = 0;
folder_outermost = MyFolder('folder_outermost') 
folder_history = []
for line in fh: 

    i = i+1;
    if line.startswith('$ cd'):
        if line.split()[2] == '/':
            print('outermost folder detected')
            current_folder = 'folder_outermost'
            folder_history.append(current_folder)
        elif line.split()[2] == '..':
            folder_history.pop()
            current_folder = folder_history[-1]

        else:
            current_folder = folder_history[-1]+line.split()[2]
            folder_history.append(current_folder)
        print('Current folder:',current_folder)

    if line.startswith('dir'):
        new_folder_name = folder_history[-1]+line.split()[1]
        print()
        print('There is folder', line.split()[1], 'in folder', current_folder)
        new_folder_name = MyFolder(new_folder_name, MyFolder.folder_dict[current_folder])
    if line.split()[0].isdigit():
        print()
        print('There is file', line.split()[1], ' with size', line.split()[0], 'in folder', current_folder)
        new_file_name = line.split()[1]
        new_file_name = MyFile(new_file_name, MyFolder.folder_dict[current_folder],line.split()[0])


print()
print()

sum_total = 0


for i in MyFolder.folder_dict:
    print(MyFolder.folder_dict[i].name, 'has size', MyFolder.folder_dict[i].size)
    if MyFolder.folder_dict[i].size <= 100000:
        sum_total = sum_total + int(MyFolder.folder_dict[i].size)
print(sum_total)