DEV Community

Viper
Viper

Posted on • Updated 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 (7)

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
 
philippurwoko profile image
Philip Purwoko

This is my solution using python for part 1 ( Not using python list comprehension version )

answers = []

with open('input.txt') as file:
    answer = []
    for i in file.readlines():
        if i != '\n':
            for q in i[:-1]:
                if q not in answer:
                    answer.append(q)
        else:
            answers.append(len(answer))
            answer = []
    answers.append(len(answer))

print(sum(answers))
Enter fullscreen mode Exit fullscreen mode
Collapse
 
qviper profile image
Viper

Still it is awesome. Thanks for sharing.

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

An Animated Guide to Node.js Event Loop

Node.js doesn’t stop from running other operations because of Libuv, a C++ library responsible for the event loop and asynchronously handling tasks such as network requests, DNS resolution, file system operations, data encryption, etc.

What happens under the hood when Node.js works on tasks such as database queries? We will explore it by following this piece of code step by step.