add page description
This commit is contained in:
parent
65fc4af558
commit
cab44e03d3
|
@ -14,7 +14,57 @@
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
<article>
|
<article>
|
||||||
<h1>Eulerbooks</h1>
|
<h1 id="eulerbooks">Eulerbooks</h1>
|
||||||
|
<p>This is a collection of Jupyter notebooks containing solutions and
|
||||||
|
discussions for the first 100 <a
|
||||||
|
href="https://projecteuler.net">Project Euler problems</a> using <a
|
||||||
|
href="https://www.sagemath.org">SageMath</a>.</p>
|
||||||
|
|
||||||
|
<p>My main goal with these notebooks is not simply to provide working
|
||||||
|
code for solving the problems. Frequently, solutions to these problems
|
||||||
|
are short, but they’re not always easy to follow without understanding
|
||||||
|
some important mathematical principles. Therefore, my aim is to provide
|
||||||
|
insight into the underlying algorithms and mathematical concepts that
|
||||||
|
make an efficient solution possible. I personally find that these
|
||||||
|
topics are frequently even more interesting than the problems
|
||||||
|
themselves, which I see as mainly existing to provide situations to
|
||||||
|
apply the concepts after learning about them. In short, it’s more about
|
||||||
|
the journey, not the destination, so these notebooks mainly exist to
|
||||||
|
discuss the former.</p>
|
||||||
|
|
||||||
|
<h2 id="approach">Approach</h2>
|
||||||
|
<p>Frequently, either Python or SageMath provide functions and
|
||||||
|
libraries that make it trivially easy to write a solution. I don’t have
|
||||||
|
a problem with presenting solutions that use these, since for practical
|
||||||
|
purposes, it’s better to use what’s already available than to reinvent
|
||||||
|
the wheel. It also tends to lead to code that is easy to read and
|
||||||
|
understand, which is the best kind of code.</p>
|
||||||
|
|
||||||
|
<p>However, when a function already exists that does the heavy lifting,
|
||||||
|
I also tend to provide my own basic implementation and an explanation
|
||||||
|
of why it works. This is especially true if a solution or algorithm is
|
||||||
|
based off of an important mathematical concept that is not especially
|
||||||
|
intuitive.</p>
|
||||||
|
|
||||||
|
<p>When not especially tedious, I like writing up solutions that do not
|
||||||
|
require programming at all, since these approaches often require
|
||||||
|
interesting mathematical techniques.</p>
|
||||||
|
|
||||||
|
<p>Another thing to note is that I don’t prioritize a solution’s
|
||||||
|
performance above all. When a solution is fast enough (using Project
|
||||||
|
Euler’s own “one-minute rule” as a rule of thumb), I instead usually
|
||||||
|
focus on making the code easy to read. You can basically always
|
||||||
|
optimize, but there are frequently diminishing returns, and it tends to
|
||||||
|
negatively impact readability. Once a solution is fast enough to solve
|
||||||
|
the problem at hand, I only consider optimizing further if the concepts
|
||||||
|
are reusable.</p>
|
||||||
|
|
||||||
|
<h2 id="solutions">Solutions</h2>
|
||||||
|
<p>Solutions are provided as non-interactive HTML renderings that you
|
||||||
|
can view directly in your browser. Alternatively, you can download the
|
||||||
|
Jupyter notebooks to play with them yourself. I've also marked some of
|
||||||
|
my favorite problems.</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<caption>
|
<caption>
|
||||||
Project Euler solutions
|
Project Euler solutions
|
||||||
|
|
Loading…
Reference in New Issue