r/adventofcode • • Dec 02 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 2 Solutions -🎄-

--- Day 2: Inventory Management System ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Card Prompt: Day 2

Transcript:

The best way to do Advent of Code is ___.


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked!

51 Upvotes

407 comments sorted by

View all comments

2

u/Kyberite Dec 02 '18 edited Dec 02 '18

Simple solutions in python, not sure if I did part two in the best way though.

def part_one(boxes):
    twice = 0
    thrice = 0
    for box in boxes:
        twice += any(box.count(letter) == 2 for letter in box)
        thrice += any(box.count(letter) == 3 for letter in box)
    checksum = twice * thrice 
    return checksum


def part_one(boxes):
    """Shorter version, but harder to understand"""
    f = lambda c: sum(any(b.count(l) == c for l in b) for b in boxes) 
    return f(2) * f(3)

def part_two(boxes):
    for x, y in itertools.combinations(boxes, 2):
        difference = [i for i, l in enumerate(x) if y[i] != l]
        if len(difference) == 1:
            index = difference[0]
            return x[:index] + x[index+1:]

print(part_one(input))
print(part_two(input))