Puzzle #6

 9th July 2023 at 10:00pm

First part

This first part was easy. Having a basic grasp of built-in Python modules like itertools and collections is a real boon.

with open('input') as file_input:
    INPUT = file_input.read().splitlines()

LINE_LENGTH = len(INPUT[0])

def make_transpose(lines: list[str]):
    return [[line[i] for line in lines] \
            for i in range(LINE_LENGTH)]

print("".join(list(map(lambda x: Counter(x).most_common(1)[0][0],
         make_transpose(INPUT)))))

Second Part

For the second part, instead of taking the most common occurrence, we want the least common; in that case, there is not a handy built-in method like most_common for the Counter class object. I'm thinking of running the min function with a custom key on each Counter object.

There is only some slight modifications on the print statement:

print("".join(list(map(lambda x: min(list(Counter(x).items()),
                                     key=lambda y: y[1])[0],
             make_transpose(INPUT)))))

Good stuff!

(after later checking some solutions, I obviously missed the zip(*input) trick)