DEV Community

Yuan Gao
Yuan Gao

Posted on

3 2

Advent of Code 2021: Day 07 with Python, cheating by using scipy

Link to challenge on Advent of Code 2021 website

Loading the data

The number is again, comma-separated, so np.loadtxt() does the job

from numpy import np
pos = np.loadtxt("day_7.txt", delimiter=",")
Enter fullscreen mode Exit fullscreen mode

Part 1

So....this is where I cheat. I'd like to get the job done quickly and go about my day. Python has some great libraries for data science, like scipy which has a nice selection of optimizers. We can use one of them.

The problem boils down to an optimization problem where we are to minimize the distance between a collection of 1D points and some target point. We're trying to minimize the sum of target - position for each of the points.

from scipy.optimize import minimize_scalar
res = minimize_scalar(lambda x: np.abs(round(x)-pos).sum())
Enter fullscreen mode Exit fullscreen mode

Job done.

Part 2

Part 2 tells us the cost function isn't linear target - position but is triangle numbers n(n+1) so we simply adjust our cost function accordingly:

res = minimize_scalar(lambda x: (np.abs(round(x)-pos)*(np.abs(round(x)-pos)+1)/2).sum())
Enter fullscreen mode Exit fullscreen mode

Full Code

import numpy as np
from scipy.optimize import minimize_scalar 

pos = np.loadtxt("day_7.txt", delimiter=",", dtype="int32")

res = minimize_scalar(lambda x: np.abs(round(x)-pos).sum())
print("Part 1 result:", round(res.fun))

res = minimize_scalar(lambda x: (np.abs(round(x)-pos)*(np.abs(round(x)-pos)+1)/2).sum())
print("Part 2 result:", round(res.fun))
Enter fullscreen mode Exit fullscreen mode

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up