Last active
November 26, 2024 22:06
-
-
Save whong92/3fa57593674779d822b329b449035123 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "be5abb8b-288f-48d6-a04c-87436e23e686", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T21:17:03.941015Z", | |
| "iopub.status.busy": "2024-11-26T21:17:03.940687Z", | |
| "iopub.status.idle": "2024-11-26T21:17:03.944196Z", | |
| "shell.execute_reply": "2024-11-26T21:17:03.943632Z", | |
| "shell.execute_reply.started": "2024-11-26T21:17:03.940994Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "source": [ | |
| "# Jane Street Nov 2024 Puzzle Solution" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "b9254ed3-6713-48c3-9895-9ea29d2a9a60", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "from scipy.integrate import nquad, tplquad, dblquad\n", | |
| "from typing import Any" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "id": "cdfeb7d4-86c4-4d89-bd14-4bda8dd283a1", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T21:08:46.161643Z", | |
| "iopub.status.busy": "2024-11-26T21:08:46.161183Z", | |
| "iopub.status.idle": "2024-11-26T21:08:46.164792Z", | |
| "shell.execute_reply": "2024-11-26T21:08:46.164338Z", | |
| "shell.execute_reply.started": "2024-11-26T21:08:46.161620Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "xyb = np.array([[0.01, 0.05]])\n", | |
| "xyr = np.array([[0.8, 0.1]])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "da283f9d-7b5c-40c6-b877-481b1c8c4b3c", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T21:08:46.165864Z", | |
| "iopub.status.busy": "2024-11-26T21:08:46.165583Z", | |
| "iopub.status.idle": "2024-11-26T21:08:46.171958Z", | |
| "shell.execute_reply": "2024-11-26T21:08:46.171519Z", | |
| "shell.execute_reply.started": "2024-11-26T21:08:46.165836Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def get_xc(xyb, xyr):\n", | |
| " \"\"\"get the x coordinate of the intersection point.\"\"\"\n", | |
| " xb = xyb[:, 0]\n", | |
| " xr = xyr[:, 0]\n", | |
| " return (-np.power(np.linalg.norm(xyb, axis=1), 2) + np.power(np.linalg.norm(xyr, axis=1), 2)) / 2 / (xr - xb)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "9253a994-02d4-49b3-a4fd-2301df113d10", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T21:08:46.835603Z", | |
| "iopub.status.busy": "2024-11-26T21:08:46.835269Z", | |
| "iopub.status.idle": "2024-11-26T21:08:46.838645Z", | |
| "shell.execute_reply": "2024-11-26T21:08:46.838100Z", | |
| "shell.execute_reply.started": "2024-11-26T21:08:46.835580Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "xc = get_xc(xyb, xyr)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "id": "aa4fec70-2dba-41af-a62e-d96df6bef818", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T21:08:47.453249Z", | |
| "iopub.status.busy": "2024-11-26T21:08:47.452928Z", | |
| "iopub.status.idle": "2024-11-26T21:08:47.457051Z", | |
| "shell.execute_reply": "2024-11-26T21:08:47.456520Z", | |
| "shell.execute_reply.started": "2024-11-26T21:08:47.453228Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def get_xc_ind(yb, xb, xr, yr):\n", | |
| " \"\"\"returns boolean indicator for whether xc is less than 1 and more than 0\"\"\"\n", | |
| " diag_indicator = yb > xb\n", | |
| " yb_orig = yb.copy()\n", | |
| " xb_orig = xb.copy()\n", | |
| " yb[diag_indicator] = xb_orig[diag_indicator]\n", | |
| " xb[diag_indicator] = yb_orig[diag_indicator]\n", | |
| " xc = get_xc(\n", | |
| " np.stack((xb, yb), axis=1),\n", | |
| " np.stack((xr, yr), axis=1)\n", | |
| " )\n", | |
| " return np.logical_and((0. <= xc), (xc <= 1.)).astype(np.float64)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "id": "c0ee8495-3f69-4f8d-9de6-069dd622fc11", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:48.373803Z", | |
| "iopub.status.busy": "2024-11-26T22:03:48.373310Z", | |
| "iopub.status.idle": "2024-11-26T22:03:48.378143Z", | |
| "shell.execute_reply": "2024-11-26T22:03:48.377678Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:48.373771Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def visualize_mc(xb: float, yb: float, num_samples: int):\n", | |
| " \"\"\"Visualize MC simulation for a single xb, yb\"\"\"\n", | |
| " xr = np.random.uniform(0., 1.0, num_samples)\n", | |
| " yr = np.random.uniform(0., 1.0, num_samples)\n", | |
| " xb = xb * np.ones(shape=(num_samples))\n", | |
| " yb = yb * np.ones(shape=(num_samples))\n", | |
| " xc_ind = get_xc_ind(yb, xb, xr, yr).astype(np.bool)\n", | |
| " xr_valid = xr[xc_ind]\n", | |
| " yr_valid = yr[xc_ind]\n", | |
| " print(\"MC Probability = \", np.mean(xc_ind))\n", | |
| " plt.scatter(xr_valid, yr_valid, marker='.')\n", | |
| " plt.ylim([0., 1.])\n", | |
| " plt.xlim([0., 1.])\n", | |
| " plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "id": "ce0e4b92-3594-47d8-b2c6-598dafc21338", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:48.685499Z", | |
| "iopub.status.busy": "2024-11-26T22:03:48.685172Z", | |
| "iopub.status.idle": "2024-11-26T22:03:48.689295Z", | |
| "shell.execute_reply": "2024-11-26T22:03:48.688785Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:48.685478Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def get_naive_mc(num_samples):\n", | |
| " \"\"\"Calculates naive MC estimate of the probability.\"\"\"\n", | |
| " xb = np.random.uniform(0., 0.5, num_samples)\n", | |
| " yb = np.random.uniform(0., 0.5, num_samples)\n", | |
| " xr = np.random.uniform(0., 1.0, num_samples)\n", | |
| " yr = np.random.uniform(0., 1.0, num_samples)\n", | |
| " xc_ind = get_xc_ind(yb, xb, xr, yr)\n", | |
| " return np.mean(xc_ind)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "id": "8842c973-7ae9-42ee-8d96-a49f92194023", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:19.619520Z", | |
| "iopub.status.busy": "2024-11-26T22:03:19.619211Z", | |
| "iopub.status.idle": "2024-11-26T22:03:21.209067Z", | |
| "shell.execute_reply": "2024-11-26T22:03:21.208482Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:19.619502Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.float64(0.4916135)" | |
| ] | |
| }, | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "get_naive_mc(10000000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "id": "99dfa7c9-d134-46cd-abc8-924e5082e7ec", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:50.362200Z", | |
| "iopub.status.busy": "2024-11-26T22:03:50.361882Z", | |
| "iopub.status.idle": "2024-11-26T22:03:50.492529Z", | |
| "shell.execute_reply": "2024-11-26T22:03:50.491959Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:50.362182Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "MC Probability = 0.47767\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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dEgLFiyQw+HQ6NGjtWbNmrYBu1VVVe1aWB599FHZbDY9+uijOnDggC666CJNnTpVv//97733KQAAQEiwGRbor6mvr1dsbKycTqdiYmLMLgcAAHSBL/5+s1cRAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwDIILAACwjB5mFwAAAPyjxtmoyroG9Y4IV0NziwbH91ZSbPQ5v7e9+oiK9x3WkPjeio7o0e77kvTxTod2fFOvXpHh+ucxAzTKHqft1Uf0ya5aXRB+wuufgeACAECQaQ0b45P7apQ9TpL00sYKLfqwXIbR/tz/kzpAcb0i9PKnlWe9z4A+UTpw9Lsu33fZpv0a2DdaVYcbJUmupuOef4hOEFwAAAhQNc5Gbdl3WDsOOHWw/jtNuCRe0RE9dLihSX17Ryp1UJySYqNV42zUJ7tqdbD+O23Zd0RFew+3vUdK4j9oYN/e+mhnbYf3eKvkQKf3dye0tGoNLb5CcAEAwAStoeTo8RMyZMgmm/r06qmxyX2VFButlZurlL2qTKc3kLxTWtPuPWySxg+O0xeVRzq9T7njW5U7vvXNhzABwQUAAC9rHS/SOg6k9X+3jifpKJS0sknKvilFeR+Wn/c+hnTO0BKMCC4AAHhJjbNRr31WqaWfVnYYSsbYYzVlRJJ+X9B5KDGkLoWWUEVwAQDgPM5sQSnZf+SscSbnakVpta3aqW3VTv8UHaQILgAAnObMkPJ84ddaXlwt6VQ3TkfB5P7rhmrJ+gr/FRnCCC4AgJBWuMuhdeUHNdreR1/XftvWzdNRSOmsNYXQ4j8EFwBASOhowOwT73+p3bWnZty88UV1u/PP1eUD8xBcAABBrcbZqOfXfa3lZwQTWBPBBQAQVE5vWdn41aHzDpiFtRBcAACWc3o4OVj/nT7ZVat+F0TJUf+dXthQIcM4NUZFossn2BBc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\n", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "visualize_mc(0.4, 0.3, 100000)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "id": "ff7a1676-fd7e-4ef0-8264-0bbb3df8edb1", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:57.514270Z", | |
| "iopub.status.busy": "2024-11-26T22:03:57.513836Z", | |
| "iopub.status.idle": "2024-11-26T22:03:57.518379Z", | |
| "shell.execute_reply": "2024-11-26T22:03:57.517862Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:57.514251Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def circles_sum(yb, xb):\n", | |
| " \"\"\"Sum of the above circles areas. Union plus intersection.\"\"\"\n", | |
| " return 0.25 * np.pi * (\n", | |
| " np.power(xb, 2.) + \n", | |
| " 2 * np.power(yb, 2.) + \n", | |
| " np.power(1. - xb, 2.)\n", | |
| " )\n", | |
| "\n", | |
| "def circles_intersection(yb: float, xb: float) -> Any:\n", | |
| " \"\"\"The intersection to be subtracted.\"\"\"\n", | |
| " return 0.5 * (\n", | |
| " np.arctan2(yb, xb) * (np.power(xb, 2.) + np.power(yb, 2.)) + \n", | |
| " np.arctan2(yb, 1 - xb) * (np.power(1. - xb, 2.) + np.power(yb, 2.)) -\n", | |
| " yb\n", | |
| " )" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 51, | |
| "id": "8aed9725-01fc-4a3f-b27d-a7491da6f4ad", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:57.681965Z", | |
| "iopub.status.busy": "2024-11-26T22:03:57.681644Z", | |
| "iopub.status.idle": "2024-11-26T22:03:57.686108Z", | |
| "shell.execute_reply": "2024-11-26T22:03:57.685586Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:57.681944Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "np.float64(0.48026201312952993)" | |
| ] | |
| }, | |
| "execution_count": 51, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# calculate for 1 point\n", | |
| "(circles_sum(0.3, 0.4) - 2 * circles_intersection(0.3, 0.4))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 52, | |
| "id": "8dd24cba-49ae-4183-9b54-146c758c9119", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:58.281630Z", | |
| "iopub.status.busy": "2024-11-26T22:03:58.281317Z", | |
| "iopub.status.idle": "2024-11-26T22:03:58.289980Z", | |
| "shell.execute_reply": "2024-11-26T22:03:58.289441Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:58.281608Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# integrate\n", | |
| "integral_circles_union = dblquad(circles_sum, 0, 0.5, 0., lambda x: x)\n", | |
| "integral_circles_intersection = dblquad(circles_intersection, 0, 0.5, 0., lambda x: x)\n", | |
| "area = 8.0 * (integral_circles_union[0] - 2 * integral_circles_intersection[0])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 53, | |
| "id": "2a4d962e-ea60-431c-afe4-f1814fdf8d25", | |
| "metadata": { | |
| "execution": { | |
| "iopub.execute_input": "2024-11-26T22:03:58.910108Z", | |
| "iopub.status.busy": "2024-11-26T22:03:58.909791Z", | |
| "iopub.status.idle": "2024-11-26T22:03:58.913766Z", | |
| "shell.execute_reply": "2024-11-26T22:03:58.913248Z", | |
| "shell.execute_reply.started": "2024-11-26T22:03:58.910089Z" | |
| }, | |
| "tags": [] | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.49140757883830805" | |
| ] | |
| }, | |
| "execution_count": 53, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "area" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "236ddbbb-c50e-4ecf-8427-bd845db8688d", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.10.13" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment