diff --git a/notebooks/problem0039.ipynb b/notebooks/problem0039.ipynb index 07d983e..3108cca 100644 --- a/notebooks/problem0039.ipynb +++ b/notebooks/problem0039.ipynb @@ -43,7 +43,7 @@ "id": "431ef21c", "metadata": {}, "source": [ - "Now we can just iterate through our new generator and count the perimeters. We also count multiples of the perimeters to include non-primitive triplets." + "Now we can just iterate through our new generator and group each triangle by their perimeters. We also multiply to consider non-primitive triplets." ] }, { @@ -53,6 +53,34 @@ "metadata": { "scrolled": true }, + "outputs": [], + "source": [ + "max_perim = 1000\n", + "perimeters = dict()\n", + "for (a, b, c) in primitive_pythagorean_triplets(max_perim):\n", + " for k in count(1):\n", + " perimeter = k * (a + b + c)\n", + " if perimeter > max_perim:\n", + " break\n", + " \n", + " if perimeter not in perimeters:\n", + " perimeters[perimeter] = set()\n", + " perimeters[perimeter].add((k*a, k*b, k*c))" + ] + }, + { + "cell_type": "markdown", + "id": "f776a5c6", + "metadata": {}, + "source": [ + "Our answer is whichever perimeter has the highest total." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0cd6241f", + "metadata": {}, "outputs": [ { "data": { @@ -60,25 +88,50 @@ "840" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from collections import Counter\n", - "\n", - "max_perim = 1000\n", - "perimeters = Counter()\n", - "for (a, b, c) in primitive_pythagorean_triplets(max_perim):\n", - " for k in count(1):\n", - " perimeter = k * (a + b + c)\n", - " if perimeter > max_perim:\n", - " break\n", - " \n", - " perimeters[perimeter] += 1\n", - "\n", - "max(perimeters, key=perimeters.get)" + "p = max(perimeters, key=lambda x: len(perimeters[x]))\n", + "p" + ] + }, + { + "cell_type": "markdown", + "id": "f32fb164", + "metadata": {}, + "source": [ + "There are eight triangles with this perimeter." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9c31c68f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(105, 360, 375),\n", + " (140, 336, 364),\n", + " (210, 280, 350),\n", + " (252, 240, 348),\n", + " (315, 168, 357),\n", + " (350, 120, 370),\n", + " (390, 56, 394),\n", + " (399, 40, 401)}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perimeters[p]" ] }, {