DEV Community

Viper
Viper

Posted on • Edited on

Advent of Code 2020: Python Solution Day 6

I am trying this only after few hour of the challenge unlocked. And first part was easy to solve. But for second part, I had to take help from reddit thread, specially here.
From few challenges, I first started with the toy example given there and if all the cases matches on this example input then feed my input to this algorithm and done. Here, day6_test.txt is a example input present on the challenge link. And day6.txt is my input. A repo with output is present at GitHub.

with open("day6_test.txt", "r") as fp: lines=fp.readlines() with open("day6.txt", "r") as fp: lines=fp.readlines() groups = [] group = [] for question in lines: if question!="\n": group.append(question.split("\n")[0]) else: groups.append(group) group=[] groups.append(group) # solution to challenge 1 solution_1 = [] for group in groups: #print(f"Group: ", group)  unique_ques = [] for ques in group: unique_ques.extend([uq for uq in ques]) #print(f"Unique questions: {set(unique_ques)}")  solution_1.extend(list(set(unique_ques))) print(f"Solution 1: {len(solution_1)}") # solution to challenge 2 from collections import Counter total = 0 for group in groups: #print(f"\nGroup: {group}")  group_size = len(group) #print(f"Length of group: {group_size}")  # make single list of enitire group and count occurence  counts = Counter("".join(group)) #print(counts)  counts = Counter(list(counts.values()))[group_size] total+=counts print(f"Solution 2:", total) 
Enter fullscreen mode Exit fullscreen mode

I write blogs about Computer Vision projects on my GitHub page q-viper.github.io and if you got some time please share yours too.

Top comments (6)

Collapse
 
r0f1 profile image
Florian Rohrer

Here is my Python solution:

from collections import Counter with open("input.txt") as f: grps = [x.strip().split() for x in f.read().split("\n\n")] print(sum([len(Counter("".join(g))) for g in grps])) print(sum([len([v for v in Counter("".join(g)).values() if v == len(g)]) for g in grps])) 
Enter fullscreen mode Exit fullscreen mode

Github Link

Collapse
 
qviper profile image
Viper

So simple yet so tricky.

Collapse
 
oguimbal profile image
Olivier Guimbal

My haskell solution

groups = splitWhen (== "") . lines <$> readFile "./data.txt" part1 = sum . map (length . Set.fromList . intercalate "") <$> groups part2 = sum . map (Set.size . foldl1 Set.intersection . map Set.fromList) <$> groups 
Enter fullscreen mode Exit fullscreen mode
Collapse
 
qviper profile image
Viper

Just in 3 lines. It is great.

Collapse
 
caloma11 profile image
Gianluca Perrone • Edited

Ruby two liner

group_answers = File.open("input.txt").read.split("\n\n") group_answers.reduce(0) { |sum, group| sum + group.split("\n").map { |i| i.split("") }.inject(:&).count } 
Enter fullscreen mode Exit fullscreen mode
Collapse
 
qviper profile image
Viper

Still it is awesome. Thanks for sharing.