From c979d38b5b7eeae2ee87aa7c739540697d5067bf Mon Sep 17 00:00:00 2001 From: Subham-Kalwar Date: Fri, 20 Feb 2026 21:33:06 -0600 Subject: [PATCH 1/4] Lab 4 Solved --- .DS_Store | Bin 0 -> 8196 bytes Labs/.DS_Store | Bin 0 -> 8196 bytes .../.ipynb_checkpoints/Lab.4-checkpoint.ipynb | 397 +++++++++ Labs/Lab.4/Lab.4.ipynb | 808 +++++++++++++++++- Labs/Lab.4/lab4_drawing.txt | 1 + Lectures/.DS_Store | Bin 0 -> 8196 bytes 6 files changed, 1173 insertions(+), 33 deletions(-) create mode 100644 .DS_Store create mode 100644 Labs/.DS_Store create mode 100644 Labs/Lab.4/.ipynb_checkpoints/Lab.4-checkpoint.ipynb create mode 100644 Labs/Lab.4/lab4_drawing.txt create mode 100644 Lectures/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8304a74440a51c56eca10b213f00721d1924dc13 GIT binary patch literal 8196 zcmeHM%}*0S6n}$Nwt})C)rv7`=*0wrph!ZDp%#b|H4sV={HnX{P&RC5>h6|`grsLZ z>0R$$J(+m%=*6oyF{eOC7qU8GHFkl$?9~i(hTO{i*=f3JS zrD4D@a3~oN`$Gz|z>LPaLb-KdAwvMf7&gmXI584$613~qx1E`%-ddlvgf ze#s;an|f|7tmruZy<73UFd7~GLOPDbjvni@EUU|Um|N$yT;xR6FzW>OMQw?5-)+c_ zyX?_g-tM2~EOI#-uQWqFkqLus2+9acOZ&)doE?Mssr!>O^!D?7uf z?a8sr!>Nh!OFKJpE0MlFW4tFD3U$n#u8%X4gvfjg4bahe$mjJ`8c2vj z^C55M0_Jm8!Zx9A;Y&}U01;FnK&kcRe}_7IU;Z}z1L6d2>oU%8aGjy;VYfI%92Q{~ zU2z7TaTZ3P48{Ft0vT*^3tKwR6Lca^N@a8yE;13vGOPa#iJg6)3{memf9n*qc3P7*;CI6!HJ;-@pGG zz6=9~fdk9{iOu9@#75b;N42h1Y`!VXk1>lR^y&(w2^K;{w99ZDvH6D~$|>EK(O6fA VJ(&Lahk(O;88+v?eCJF7@EeaUOFRGo literal 0 HcmV?d00001 diff --git a/Labs/.DS_Store b/Labs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f7f4170980372ce92a1f25fa77bd9b69d00cfacf GIT binary patch literal 8196 zcmeHM%}*0S6n}%Lt*9&liWrlPO^il@d=wI5jJ05psDW65py0aOPRoX6rrF(6g^={D zC%x<4t0xmL9=&+=X8aTM>Pg>x)D~*5#Kf6o=J)o^`D8K*!B(Mv# zx^VbQ6Z4|Cv<|IFA`6{Bz!*4ix5e5h3GHFkl$?7Z|{rEn1>Y-B+__ zGz=I9{!0eL`@zO8Fr%@iP`)~FkXHc2PE^Z=GTsBEkF7DIv8GVEVoY^=AljAaD+W>S zIByGc#Eiz8LgfxbxdYLeiN2u_nH~LXX$~Z#(2Rxw!$2zo;_iMCX5c0)VsE~`yWruo z1NVSJ2qhdHmX3;*z z(|sE~J;WUP#weFjZbY-;5>z3=Og8%1xC$3D+Axp0%WZPK+n4Jw{t6*>F$`mSS4A$g zwH)7P`KqmDdaq@Ncp)|Kw2?jSRim=z_;CX{Q(2sRmij;qH;h(b7_u?{a#XxfpV z-_koGpX)pNW?A(;C69F-KXJ0#>N(Zh)7R7A-+%hdz}dlbgO1hfx%rJ!DAqd710H6B z3Vl=x{X(wn=6zOLj_K1l=WkQTIXJs1`bd?y$T*|P zRAxavCb3vv!Q*-lmS6+6;U&C=x9|Zz!B_YWKgm&IkqhJsNt5g32Dwe<$U~AR>%=Fa z3eZvin9u7}8c2jf)5pA(3t7Nf3AMtbF*C9Ek6#}1H%-S}nA_+fFr%@iPy`Zsab5(f z0&eQRq{9q`fdgaUkjgY5?*F&i|Nehq>oJK81BQWvXMl9h= self.max_value:\n", + " print(\"Error: Attempted to increment beyond maximum value.\")\n", + " else:\n", + " self.count += 1\n", + "\n", + " def reset(self):\n", + " self.count = 0\n", + "\n", + "# --- Test ---\n", + "c1 = SimpleCounter(2)\n", + "c1.increment()\n", + "c1.increment()\n", + "c1.increment() # This will print the error\n", + "c1.reset()\n", + "c1.increment() \n", + "c1.increment()\n", + "c1.increment() # This will print the error again" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Copy and paste your solution to question 1 and modify it so that all the data held by the counter is private. Implement functions to check the value of the counter, check the maximum value, and check if the counter is at the maximum." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Value: 2, Is Max?: False\n" + ] + } + ], + "source": [ + "class Counter:\n", + " def __init__(self, max_value):\n", + " self.__count = 0 \n", + " self.__max_value = max_value\n", + "\n", + " def increment(self):\n", + " if self.__count >= self.__max_value:\n", + " print(\"Error: Attempted to increment beyond maximum value.\")\n", + " else:\n", + " self.__count += 1\n", + "\n", + " def reset(self):\n", + " self.__count = 0\n", + "\n", + " def get_value(self):\n", + " return self.__count\n", + "\n", + " def get_max(self):\n", + " return self.__max_value\n", + "\n", + " def is_at_max(self):\n", + " return self.__count == self.__max_value\n", + "\n", + "c2 = Counter(3)\n", + "c2.increment()\n", + "c2.increment()\n", + "print(f\"Value: {c2.get_value()}, Is Max?: {c2.is_at_max()}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Implement a class to represent a rectangle, holding the length, width, and $x$ and $y$ coordinates of a corner of the object. Implement functions that compute the area and perimeter of the rectangle. Make all data members private and privide accessors to retrieve values of data members. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area: 8, Perimeter: 12.\n" + ] + } + ], + "source": [ + "class Rectangle:\n", + " def __init__(self, length, width, x, y):\n", + " self.__length = length\n", + " self.__width = width\n", + " self.__x = x\n", + " self.__y = y\n", + "\n", + " def get_length(self): return self.__length\n", + " def get_width(self): return self.__width\n", + " def get_x(self): return self.__x\n", + " def get_y(self): return self.__y\n", + "\n", + " def area(self):\n", + " return self.__length * self.__width\n", + " \n", + " def perimeter(self):\n", + " return 2 * (self.__length + self.__width)\n", + " \n", + "# Test\n", + "rect = Rectangle(4, 2, 0, 0)\n", + "print(f\"Area: {rect.area()}, Perimeter: {rect.perimeter()}.\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Implement a class to represent a circle, holding the radius and $x$ and $y$ coordinates of center of the object. Implement functions that compute the area and perimeter of the rectangle. Make all data members private and privide accessors to retrieve values of data members. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Implement a common base class for the classes implemented in 3 and 4 above which implements all common methods as not implemented functions (virtual). Re-implement your regtangle and circule classes to inherit from the base class and overload the functions accordingly. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Implement a triangle class analogous to the rectangle and circle in question 5." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "7. Add a function to the object classes, including the base, that returns a list of up to 16 pairs of $x$ and $y$ points on the parameter of the object. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "8. Add a function to the object classes, including the base, that tests if a given set of $x$ and $y$ coordinates are inside of the object. You'll have to think through how to determine if a set of coordinates are inside an object for each object type." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "9. Add a function in the base class of the object classes that returns true/false testing that the object overlaps with another object." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "10. Copy the `Canvas` class from lecture to in a python file creating a `paint` module. Copy your classes from above into the module and implement paint functions. Implement a `CompoundShape` class. Create a simple drawing demonstrating that all of your classes are working." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "11. Create a `RasterDrawing` class. Demonstrate that you can create a drawing made of several shapes, paint the drawing, modify the drawing, and paint it again. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "12. Implement the ability to load/save raster drawings and demonstate that your method works. One way to implement this ability:\n", + "\n", + " * Overload `__repr__` functions of all objects to return strings of the python code that would construct the object.\n", + " \n", + " * In the save method of raster drawing class, store the representations into the file.\n", + " * Write a loader function that reads the file and uses `eval` to instantiate the object.\n", + "\n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "class foo:\n", + " def __init__(self,a,b=None):\n", + " self.a=a\n", + " self.b=b\n", + " \n", + " def __repr__(self):\n", + " return \"foo(\"+repr(self.a)+\",\"+repr(self.b)+\")\"\n", + " \n", + " def save(self,filename):\n", + " f=open(filename,\"w\")\n", + " f.write(self.__repr__())\n", + " f.close()\n", + " \n", + " \n", + "def foo_loader(filename):\n", + " f=open(filename,\"r\")\n", + " tmp=eval(f.read())\n", + " f.close()\n", + " return tmp\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "foo(1,'hello')\n" + ] + } + ], + "source": [ + "# Test\n", + "print(repr(foo(1,\"hello\")))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Create an object and save it\n", + "ff=foo(1,\"hello\")\n", + "ff.save(\"Test.foo\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "foo(1,'hello')" + ] + } + ], + "source": [ + "# Check contents of the saved file\n", + "!cat Test.foo" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "foo(1,'hello')" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load the object\n", + "ff_reloaded=foo_loader(\"Test.foo\")\n", + "ff_reloaded" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ds", + "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.11.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Labs/Lab.4/Lab.4.ipynb b/Labs/Lab.4/Lab.4.ipynb index db4abc21..0a8de2d2 100644 --- a/Labs/Lab.4/Lab.4.ipynb +++ b/Labs/Lab.4/Lab.4.ipynb @@ -18,10 +18,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error: Attempted to increment beyond maximum value.\n", + "Error: Attempted to increment beyond maximum value.\n" + ] + } + ], + "source": [ + "class SimpleCounter:\n", + " def __init__(self, max_value):\n", + " self.count = 0\n", + " self.max_value = max_value\n", + "\n", + " def increment(self):\n", + " if self.count >= self.max_value:\n", + " print(\"Error: Attempted to increment beyond maximum value.\")\n", + " else:\n", + " self.count += 1\n", + "\n", + " def reset(self):\n", + " self.count = 0\n", + "\n", + "# --- Test ---\n", + "c1 = SimpleCounter(2)\n", + "c1.increment()\n", + "c1.increment()\n", + "c1.increment() # This will print the error\n", + "c1.reset()\n", + "c1.increment() \n", + "c1.increment()\n", + "c1.increment() # This will print the error again" + ] }, { "cell_type": "markdown", @@ -32,10 +65,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Value: 2, Is Max?: False\n" + ] + } + ], + "source": [ + "class Counter:\n", + " def __init__(self, max_value):\n", + " self.__count = 0 \n", + " self.__max_value = max_value\n", + "\n", + " def increment(self):\n", + " if self.__count >= self.__max_value:\n", + " print(\"Error: Attempted to increment beyond maximum value.\")\n", + " else:\n", + " self.__count += 1\n", + "\n", + " def reset(self):\n", + " self.__count = 0\n", + "\n", + " def get_value(self):\n", + " return self.__count\n", + "\n", + " def get_max(self):\n", + " return self.__max_value\n", + "\n", + " def is_at_max(self):\n", + " return self.__count == self.__max_value\n", + "\n", + "c2 = Counter(3)\n", + "c2.increment()\n", + "c2.increment()\n", + "print(f\"Value: {c2.get_value()}, Is Max?: {c2.is_at_max()}\")" + ] }, { "cell_type": "markdown", @@ -46,10 +115,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area: 8, Perimeter: 12.\n" + ] + } + ], + "source": [ + "class Rectangle:\n", + " def __init__(self, length, width, x, y):\n", + " self.__length = length\n", + " self.__width = width\n", + " self.__x = x\n", + " self.__y = y\n", + "\n", + " def get_length(self): return self.__length\n", + " def get_width(self): return self.__width\n", + " def get_x(self): return self.__x\n", + " def get_y(self): return self.__y\n", + "\n", + " def area(self):\n", + " return self.__length * self.__width\n", + " \n", + " def perimeter(self):\n", + " return 2 * (self.__length + self.__width)\n", + " \n", + "# Test\n", + "rect = Rectangle(4, 2, 0, 0)\n", + "print(f\"Area: {rect.area()}, Perimeter: {rect.perimeter()}.\")\n" + ] }, { "cell_type": "markdown", @@ -60,10 +159,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Circle Area: 50.27, Perimeter: 25.13\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "class Circle:\n", + " def __init__(self, radius, x, y):\n", + " self.__radius = radius\n", + " self.__x = x\n", + " self.__y = y\n", + "\n", + " def get_radius(self):\n", + " return self.__radius\n", + " def get_x(self):\n", + " return self.__x\n", + " def get_y(self):\n", + " return self.__y\n", + "\n", + " def area(self):\n", + " return np.pi * (self.__radius ** 2)\n", + "\n", + " def perimeter(self):\n", + " return 2 * np.pi * self.__radius\n", + "\n", + "# Test\n", + "c = Circle(4, 5, 5)\n", + "print(f\"Circle Area: {c.area():.2f}, Perimeter: {c.perimeter():.2f}\")\n", + " " + ] }, { "cell_type": "markdown", @@ -74,10 +207,50 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rectangle Area: 12.00\n", + "Circle Area: 12.57\n" + ] + } + ], + "source": [ + "class Shape:\n", + " def area(self):\n", + " raise NotImplementedError\n", + " \n", + " def perimeter(self):\n", + " raise NotImplementedError\n", + "\n", + "class Rectangle(Shape):\n", + " def __init__(self, length, width, x, y):\n", + " self.__length = length\n", + " self.__width = width\n", + " self.__x = x\n", + " self.__y = y\n", + " \n", + " def area(self): return self.__length * self.__width\n", + " def perimeter(self): return 2 * (self.__length + self.__width)\n", + "\n", + "class Circle(Shape):\n", + " def __init__(self, radius, cx, cy):\n", + " self.__radius = radius\n", + " self.__cx = cx\n", + " self.__cy = cy\n", + " \n", + " def area(self): return np.pi * (self.__radius ** 2)\n", + " def perimeter(self): return 2 * np.pi * self.__radius\n", + "\n", + "# --- Test ---\n", + "shapes = [Rectangle(4, 3, 0, 0), Circle(2, 0, 0)]\n", + "for s in shapes:\n", + " print(f\"{s.__class__.__name__} Area: {s.area():.2f}\")" + ] }, { "cell_type": "markdown", @@ -88,10 +261,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Triangle Area: 6.0, Perimeter: 12.0\n" + ] + } + ], + "source": [ + "class Triangle(Shape):\n", + " def __init__(self, base, height, x, y):\n", + " self.__base = base\n", + " self.__height = height\n", + " self.__x = x\n", + " self.__y = y\n", + " \n", + " def area(self): \n", + " return 0.5 * self.__base * self.__height\n", + " \n", + " def perimeter(self): \n", + " hypotenuse = np.sqrt(self.__base**2 + self.__height**2)\n", + " return self.__base + self.__height + hypotenuse\n", + "\n", + "# --- Test ---\n", + "t = Triangle(3, 4, 0, 0)\n", + "print(f\"Triangle Area: {t.area()}, Perimeter: {t.perimeter()}\")" + ] }, { "cell_type": "markdown", @@ -102,10 +301,73 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import math\n", + "\n", + "class Shape:\n", + " def area(self): raise NotImplementedError\n", + " def perimeter(self): raise NotImplementedError\n", + " \n", + " def get_perimeter_points(self): raise NotImplementedError\n", + "\n", + "class Rectangle(Shape):\n", + " def __init__(self, length, width, x, y):\n", + " self.__length = length\n", + " self.__width = width\n", + " self.__x = x\n", + " self.__y = y\n", + " \n", + " def area(self): return self.__length * self.__width\n", + " def perimeter(self): return 2 * (self.__length + self.__width)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(4):\n", + " points.append((self.__x + (self.__length * i / 4), self.__y)) # Top edge\n", + " points.append((self.__x + (self.__length * i / 4), self.__y - self.__width)) # Bottom edge\n", + " points.append((self.__x, self.__y - (self.__width * i / 4))) # Left edge\n", + " points.append((self.__x + self.__length, self.__y - (self.__width * i / 4))) # Right edge\n", + " return points\n", + "\n", + "class Circle(Shape):\n", + " def __init__(self, radius, cx, cy):\n", + " self.__radius = radius\n", + " self.__cx = cx\n", + " self.__cy = cy\n", + " \n", + " def area(self): return math.pi * (self.__radius ** 2)\n", + " def perimeter(self): return 2 * math.pi * self.__radius\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(16):\n", + " angle = 2 * math.pi * i / 16\n", + " px = self.__cx + self.__radius * math.cos(angle)\n", + " py = self.__cy + self.__radius * math.sin(angle)\n", + " points.append((px, py))\n", + " return points\n", + "\n", + "class Triangle(Shape):\n", + " def __init__(self, base, height, x, y):\n", + " self.__base = base\n", + " self.__height = height\n", + " self.__x = x\n", + " self.__y = y\n", + " \n", + " def area(self): return 0.5 * self.__base * self.__height\n", + " def perimeter(self): return self.__base + self.__height + math.sqrt(self.__base**2 + self.__height**2)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(5):\n", + " points.append((self.__x + (self.__base * i / 5), self.__y)) \n", + " points.append((self.__x, self.__y + (self.__height * i / 5))) \n", + " points.append((self.__x + (self.__base * i / 5), self.__y + self.__height - (self.__height * i / 5))) \n", + " points.append((self.__x + self.__base, self.__y)) " + ] }, { "cell_type": "markdown", @@ -116,10 +378,90 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "class Shape:\n", + " def area(self): raise NotImplementedError\n", + " def perimeter(self): raise NotImplementedError\n", + " def get_perimeter_points(self): raise NotImplementedError\n", + " def contains(self, x, y): raise NotImplementedError\n", + "\n", + "class Rectangle(Shape):\n", + " def __init__(self, length, width, x, y):\n", + " self.length = length\n", + " self.width = width\n", + " self.x = x\n", + " self.y = y\n", + " \n", + " def area(self): return self.length * self.width\n", + " def perimeter(self): return 2 * (self.length + self.width)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(4):\n", + " points.append((self.x + (self.length * i / 4), self.y))\n", + " points.append((self.x + (self.length * i / 4), self.y - self.width))\n", + " points.append((self.x, self.y - (self.width * i / 4)))\n", + " points.append((self.x + self.length, self.y - (self.width * i / 4)))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " return (self.x <= px <= self.x + self.length) and (self.y - self.width <= py <= self.y)\n", + "\n", + " def __repr__(self):\n", + " return f\"Rectangle({self.length}, {self.width}, {self.x}, {self.y})\"\n", + "\n", + "class Circle(Shape):\n", + " def __init__(self, radius, cx, cy):\n", + " self.radius = radius\n", + " self.cx = cx\n", + " self.cy = cy\n", + " \n", + " def area(self): return math.pi * (self.radius ** 2)\n", + " def perimeter(self): return 2 * math.pi * self.radius\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(16):\n", + " angle = 2 * math.pi * i / 16\n", + " points.append((self.cx + self.radius * math.cos(angle), self.cy + self.radius * math.sin(angle)))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " return math.sqrt((px - self.cx)**2 + (py - self.cy)**2) <= self.radius\n", + "\n", + " def __repr__(self):\n", + " return f\"Circle({self.radius}, {self.cx}, {self.cy})\"\n", + "\n", + "class Triangle(Shape):\n", + " def __init__(self, base, height, x, y):\n", + " self.base = base\n", + " self.height = height\n", + " self.x = x\n", + " self.y = y\n", + " \n", + " def area(self): return 0.5 * self.base * self.height\n", + " def perimeter(self): return self.base + self.height + math.sqrt(self.base**2 + self.height**2)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(5):\n", + " points.append((self.x + (self.base * i / 5), self.y))\n", + " points.append((self.x, self.y + (self.height * i / 5)))\n", + " points.append((self.x + (self.base * i / 5), self.y + self.height - (self.height * i / 5)))\n", + " points.append((self.x + self.base, self.y))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " if not ((self.x <= px <= self.x + self.base) and (self.y <= py <= self.y + self.height)):\n", + " return False\n", + " return py <= self.y + self.height - (self.height / self.base) * (px - self.x)\n", + "\n", + " def __repr__(self):\n", + " return f\"Triangle({self.base}, {self.height}, {self.x}, {self.y})\"" + ] }, { "cell_type": "markdown", @@ -130,10 +472,87 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Shape:\n", + " def area(self): raise NotImplementedError\n", + " def perimeter(self): raise NotImplementedError\n", + " def get_perimeter_points(self): raise NotImplementedError\n", + " def contains(self, x, y): raise NotImplementedError\n", + " \n", + " def overlaps(self, other):\n", + " for px, py in other.get_perimeter_points():\n", + " if self.contains(px, py):\n", + " return True\n", + " \n", + " for px, py in self.get_perimeter_points():\n", + " if other.contains(px, py):\n", + " return True\n", + " \n", + " return False\n", + "\n", + "class Rectangle(Shape):\n", + " def __init__(self, length, width, x, y):\n", + " self.length = length\n", + " self.width = width\n", + " self.x = x\n", + " self.y = y\n", + " \n", + " def area(self): return self.length * self.width\n", + " def perimeter(self): return 2 * (self.length + self.width)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(4):\n", + " points.append((self.x + (self.length * i / 4), self.y))\n", + " points.append((self.x + (self.length * i / 4), self.y - self.width))\n", + " points.append((self.x, self.y - (self.width * i / 4)))\n", + " points.append((self.x + self.length, self.y - (self.width * i / 4)))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " return (self.x <= px <= self.x + self.length) and (self.y - self.width <= py <= self.y)\n", + "\n", + " def __repr__(self):\n", + " return f\"Rectangle({self.length}, {self.width}, {self.x}, {self.y})\"\n", + "\n", + "class Circle(Shape):\n", + " def __init__(self, radius, cx, cy):\n", + " self.radius = radius\n", + " self.cx = cx\n", + " self.cy = cy\n", + " \n", + " def area(self): return math.pi * (self.radius ** 2)\n", + " def perimeter(self): return 2 * math.pi * self.radius\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(16):\n", + " angle = 2 * math.pi * i / 16\n", + " points.append((self.cx + self.radius * math.cos(angle), self.cy + self.radius * math.sin(angle)))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " return math.sqrt((px - self.cx)**2 + (py - self.cy)**2) <= self.radius\n", + "\n", + " def __repr__(self):\n", + " return f\"Circle({self.radius}, {self.cx}, {self.cy})\"\n", + "\n", + "# --- Q9 Test ---\n", + "r1 = Rectangle(10, 10, 0, 10)\n", + "c1 = Circle(5, 5, 5)\n", + "print(r1.overlaps(c1))" + ] }, { "cell_type": "markdown", @@ -144,10 +563,184 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " \n", + " \n", + " ########### \n", + " ########### \n", + " ########### O \n", + " ########### OOOOO \n", + " ########### OOOOOOO \n", + " ########### OOOOOOO \n", + " OOOOOOOOO \n", + " OOOOOOO \n", + " OOOOOOO \n", + " OOOOO \n", + " O \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n" + ] + } + ], + "source": [ + "import math\n", + "\n", + "class Canvas:\n", + " def __init__(self, width, height):\n", + " self.width = width\n", + " self.height = height\n", + " self.data = [[' '] * width for i in range(height)]\n", + "\n", + " def set_pixel(self, row, col, char='*'):\n", + " if 0 <= row < self.height and 0 <= col < self.width:\n", + " self.data[row][col] = char\n", + "\n", + " def get_pixel(self, row, col):\n", + " return self.data[row][col]\n", + " \n", + " def clear_canvas(self):\n", + " self.data = [[' '] * self.width for i in range(self.height)]\n", + " \n", + " def display(self):\n", + " print(\"\\n\".join([\"\".join(row) for row in self.data]))\n", + "\n", + "class Shape:\n", + " def __init__(self, name=\"\", char=\"*\"):\n", + " self.name = name\n", + " self.char = char\n", + " \n", + " def area(self): raise NotImplementedError\n", + " def perimeter(self): raise NotImplementedError\n", + " def get_perimeter_points(self): raise NotImplementedError\n", + " def contains(self, x, y): raise NotImplementedError\n", + " \n", + " def overlaps(self, other):\n", + " for px, py in other.get_perimeter_points():\n", + " if self.contains(px, py): return True\n", + " for px, py in self.get_perimeter_points():\n", + " if other.contains(px, py): return True\n", + " return False\n", + " \n", + " def paint(self, canvas):\n", + " for row in range(canvas.height):\n", + " for col in range(canvas.width):\n", + " if self.contains(col, row):\n", + " canvas.set_pixel(row, col, self.char)\n", + "\n", + "class Rectangle(Shape):\n", + " def __init__(self, length, width, x, y, name=\"\", char=\"*\"):\n", + " super().__init__(name, char)\n", + " self.length = length\n", + " self.width = width\n", + " self.x = x\n", + " self.y = y\n", + " \n", + " def area(self): return self.length * self.width\n", + " def perimeter(self): return 2 * (self.length + self.width)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(4):\n", + " points.append((self.x + (self.length * i / 4), self.y))\n", + " points.append((self.x + (self.length * i / 4), self.y + self.width))\n", + " points.append((self.x, self.y + (self.width * i / 4)))\n", + " points.append((self.x + self.length, self.y + (self.width * i / 4)))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " return (self.x <= px <= self.x + self.length) and (self.y <= py <= self.y + self.width)\n", + "\n", + " def __repr__(self):\n", + " return f\"Rectangle({self.length}, {self.width}, {self.x}, {self.y}, '{self.name}', '{self.char}')\"\n", + "\n", + "class Circle(Shape):\n", + " def __init__(self, radius, cx, cy, name=\"\", char=\"*\"):\n", + " super().__init__(name, char)\n", + " self.radius = radius\n", + " self.cx = cx\n", + " self.cy = cy\n", + " \n", + " def area(self): return math.pi * (self.radius ** 2)\n", + " def perimeter(self): return 2 * math.pi * self.radius\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(16):\n", + " angle = 2 * math.pi * i / 16\n", + " points.append((self.cx + self.radius * math.cos(angle), self.cy + self.radius * math.sin(angle)))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " return math.sqrt((px - self.cx)**2 + (py - self.cy)**2) <= self.radius\n", + "\n", + " def __repr__(self):\n", + " return f\"Circle({self.radius}, {self.cx}, {self.cy}, '{self.name}', '{self.char}')\"\n", + "\n", + "class Triangle(Shape):\n", + " def __init__(self, base, height, x, y, name=\"\", char=\"*\"):\n", + " super().__init__(name, char)\n", + " self.base = base\n", + " self.height = height\n", + " self.x = x\n", + " self.y = y\n", + " \n", + " def area(self): return 0.5 * self.base * self.height\n", + " def perimeter(self): return self.base + self.height + math.sqrt(self.base**2 + self.height**2)\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for i in range(5):\n", + " points.append((self.x + (self.base * i / 5), self.y))\n", + " points.append((self.x, self.y + (self.height * i / 5)))\n", + " points.append((self.x + (self.base * i / 5), self.y + self.height - (self.height * i / 5)))\n", + " points.append((self.x + self.base, self.y))\n", + " return points\n", + "\n", + " def contains(self, px, py):\n", + " if not ((self.x <= px <= self.x + self.base) and (self.y <= py <= self.y + self.height)):\n", + " return False\n", + " return py <= self.y + self.height - (self.height / self.base) * (px - self.x)\n", + "\n", + " def __repr__(self):\n", + " return f\"Triangle({self.base}, {self.height}, {self.x}, {self.y}, '{self.name}', '{self.char}')\"\n", + "\n", + "class CompoundShape(Shape):\n", + " def __init__(self, shapes, name=\"\", char=\"*\"):\n", + " super().__init__(name, char)\n", + " self.shapes = shapes\n", + " \n", + " def get_perimeter_points(self):\n", + " points = []\n", + " for s in self.shapes: \n", + " points.extend(s.get_perimeter_points())\n", + " return points\n", + " \n", + " def contains(self, x, y):\n", + " return any(s.contains(x, y) for s in self.shapes)\n", + " \n", + " def paint(self, canvas):\n", + " for s in self.shapes:\n", + " s.paint(canvas)\n", + " \n", + " def __repr__(self):\n", + " return f\"CompoundShape({self.shapes}, '{self.name}', '{self.char}')\"\n", + "\n", + "my_canvas = Canvas(40, 20)\n", + "comp = CompoundShape([Rectangle(10, 5, 2, 2, char=\"#\"), Circle(4, 25, 8, char=\"O\")])\n", + "comp.paint(my_canvas)\n", + "my_canvas.display()" + ] }, { "cell_type": "markdown", @@ -158,10 +751,100 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " \n", + " \n", + " \n", + " \n", + " \n", + " O TTTTTTTTT \n", + " OOOOOOO TTTTTTTT \n", + " OOOOOOOOO TTTTTTT \n", + " OOOOOOOOO TTTTTT \n", + " OOOOOOOOO TTTTT \n", + " OOOOOOOOOOO TTTT \n", + " OOOOOOOOO TTT \n", + " OOOOOOOOO TT \n", + " OOOOOOOOO T \n", + " OOOOOOO \n", + " O \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + " \n", + " O \n", + " OOOOOOO \n", + " OOOOOOOOOOO \n", + " OOOOOOOOOOOOO TTTTTTTTT \n", + " OOOOOOOOOOOOO TTTTTTTT \n", + " OOOOOOOOOOOOOOO TTTTTTT \n", + " OOOOOOOOOOOOOOO TTTTTT \n", + " OOOOOOOOOOOOOOO TTTTT \n", + " OOOOOOOOOOOOOOOOO TTTT \n", + " OOOOOOOOOOOOOOO TTT \n", + " OOOOOOOOOOOOOOO TT \n", + " OOOOOOOOOOOOOOO T \n", + " OOOOOOOOOOOOO \n", + " OOOOOOOOOOOOO \n", + " OOOOOOOOOOO \n", + " OOOOOOO \n", + " O \n", + " \n" + ] + } + ], + "source": [ + "class RasterDrawing:\n", + " def __init__(self):\n", + " self.shapes = dict()\n", + " self.shape_names = list()\n", + " \n", + " def add_shape(self, shape):\n", + " if shape.name == \"\":\n", + " shape.name = self.assign_name()\n", + " self.shapes[shape.name] = shape\n", + " self.shape_names.append(shape.name)\n", + "\n", + " def update(self, canvas):\n", + " canvas.clear_canvas()\n", + " self.paint(canvas)\n", + " \n", + " def paint(self, canvas):\n", + " for shape_name in self.shape_names:\n", + " self.shapes[shape_name].paint(canvas)\n", + " \n", + " def assign_name(self):\n", + " name_base = \"shape\"\n", + " name = name_base + \"_0\"\n", + " i = 1\n", + " while name in self.shapes:\n", + " name = name_base + \"_\" + str(i)\n", + " i += 1\n", + " return name\n", + "\n", + "drawing_canvas = Canvas(40, 20)\n", + "rd = RasterDrawing()\n", + "rd.add_shape(Circle(5, 10, 10, char=\"O\"))\n", + "rd.add_shape(Triangle(8, 8, 20, 5, char=\"T\"))\n", + "rd.paint(drawing_canvas)\n", + "drawing_canvas.display()\n", + "\n", + "print(\"\\n\")\n", + "\n", + "rd.shapes[\"shape_0\"].radius = 8\n", + "rd.update(drawing_canvas)\n", + "drawing_canvas.display()" + ] }, { "cell_type": "markdown", @@ -177,6 +860,65 @@ "For example:" ] }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " \n", + " \n", + " \n", + " \n", + " \n", + " ########### \n", + " ########### \n", + " ########### O \n", + " ########### OOOOO \n", + " ########### OOOOO \n", + " ########### OOOOOOO \n", + " OOOOO \n", + " OOOOO \n", + " O \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n" + ] + } + ], + "source": [ + "class RasterDrawingSaveable(RasterDrawing):\n", + " def save(self, filename):\n", + " with open(filename, \"w\") as f:\n", + " f.write(repr(list(self.shapes.values())))\n", + " \n", + "def load_drawing(filename):\n", + " with open(filename, \"r\") as f:\n", + " shapes_list = eval(f.read())\n", + " \n", + " new_drawing = RasterDrawingSaveable()\n", + " for s in shapes_list:\n", + " new_drawing.add_shape(s)\n", + " return new_drawing\n", + "\n", + "drawing = RasterDrawingSaveable()\n", + "drawing.add_shape(Rectangle(10, 5, 5, 5, char=\"#\"))\n", + "drawing.add_shape(Circle(3, 25, 10, char=\"O\"))\n", + "\n", + "drawing.save(\"lab4_drawing.txt\")\n", + "\n", + "loaded = load_drawing(\"lab4_drawing.txt\")\n", + "test_canvas = Canvas(40, 20)\n", + "loaded.paint(test_canvas)\n", + "test_canvas.display()" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -276,7 +1018,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "ds", "language": "python", "name": "python3" }, @@ -290,7 +1032,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.7" + "version": "3.11.14" } }, "nbformat": 4, diff --git a/Labs/Lab.4/lab4_drawing.txt b/Labs/Lab.4/lab4_drawing.txt new file mode 100644 index 00000000..0f104b0f --- /dev/null +++ b/Labs/Lab.4/lab4_drawing.txt @@ -0,0 +1 @@ +[Rectangle(10, 5, 5, 5, 'shape_0', '#'), Circle(3, 25, 10, 'shape_1', 'O')] \ No newline at end of file diff --git a/Lectures/.DS_Store b/Lectures/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6ffb5a0dd264b30afc8a492944c4c2f4f3857123 GIT binary patch literal 8196 zcmeHM%}*0S6n_IKt*9(tiWrj(y_i6dZ)}XA7K}D(Ae0~|Shwv^HY_{M?iN%+(zBlQ zu6M7VOuTsX;?V=9a(EJ_qqoKt2GL{W)KF^Ht2 z-{iv)V+xBBB^`*Q15tM-DnlXS?#MI6a3C>>y44D31*#R`xqBGyV%DC4V0Zq`GHHjU z(aQrWjkDpDIzr)aIAwHhZVpCAd(DC9$X2hp z866nvHAjaBx3wg3GpSW)&1KJV6H+CO{dSCZ8ln3+gjRNIyySeo$tKRb+IdDw56@gYR==&Ji#31#hn6unDgvxGH+#U zH#Z;9CqdGFMpH&>#n2g=eYDdx`!tVZ+IKp{bhkW8T`}L(^0H5Z`Caxx%4qg89&?;& z=G%eI+=WFS6;A|oE#WRRyyH5mJ(cG!e~x-SVijk8!SX!I&C&SNCC5rrXUdJUAYg0r zc80m~$(zNrcscD+K4oP5hZHmtyHheQOT&POH1K@hUa}OD$VV#8S(mvq9EnZK%P?-D zJ#Yi=!5pl@Gk6KF;VpcCPw*AK!%xyk4AM<{$S}E1#>s7xAP-1}tPq=ca)P?j$9+lN zN&)fF*yH0~PkOGy+#Gs2vwFnU^576besFL^D;PY;YcT%XaEj`1I!@sftq3Rl<{xUQ zm$P^B{Qu_uzyBZVGw8{+0$PDTs{m=3OiuD6erflwd>npkHnBd&$_pP?lqe|J@FBck lq~nO&e;A@|Dql=tQ6hS<9Qh9c|Il$-@Bhc@IDMr1|8MVtuUG&8 literal 0 HcmV?d00001 From 6ec020e0f7962ab7a36e64c49d007ef4c5c540e8 Mon Sep 17 00:00:00 2001 From: Subham-Kalwar Date: Fri, 20 Feb 2026 21:40:06 -0600 Subject: [PATCH 2/4] pasting previous labs that was submitted to wrong repo --- .DS_Store | Bin 8196 -> 8196 bytes Labs/.DS_Store | Bin 8196 -> 10244 bytes Labs/Lab.2/.DS_Store | Bin 0 -> 6148 bytes Labs/Lab.2/Lab.2.ipynb | 1683 ++++++++++++++++++++++++++++++++++++++-- Labs/Lab.3/.DS_Store | Bin 0 -> 6148 bytes Labs/Lab.3/Lab.3.ipynb | 453 ++++++++--- 6 files changed, 1975 insertions(+), 161 deletions(-) create mode 100644 Labs/Lab.2/.DS_Store create mode 100644 Labs/Lab.3/.DS_Store diff --git a/.DS_Store b/.DS_Store index 8304a74440a51c56eca10b213f00721d1924dc13..a329cf562a6e93ba902b33647b1d7a75daadd887 100644 GIT binary patch delta 104 zcmZp1XmQwZK!C&4%uq+c(9&Y^Sz-Ih?1FYoQZkd>1@B153-A|b#Ym B9rFMH delta 25 hcmZp1XmQwZKw$DwVfV@Gf_9sOM3ysdej_Bo3jl&q2|EA) diff --git a/Labs/.DS_Store b/Labs/.DS_Store index f7f4170980372ce92a1f25fa77bd9b69d00cfacf..1df00a398015a3a3f519966ba6a5a080d3d82357 100644 GIT binary patch delta 200 zcmZp1XbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~50$jG-bU^hP_-)0^Genv*4$pwN9 z9HwT5ItqrC7L$JndNLYqb`r{9WJ-Q8d5v%luTfcWQC?1dUOLbS#>sqw=8VP|T6m3- z6>YW<)MnmTK7oB=L#QA#P#X{^a03ZfkRvu0erKM{FB2%j1aX=MNScv>!2m>0E|BTl J>@3K{3;=BiD!Tvx delta 102 zcmZn(XmOBWU|?W$DortDU;r^WfEYvza8E20o2aMA$hk3KH$NliW*z~4#>wx5wKlVe r$}w+F=2^ll$P82m1QOgp!WE=tW8rt^$^0sT9E=cy7&gcA%wYxqpwAK$ diff --git a/Labs/Lab.2/.DS_Store b/Labs/Lab.2/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0For Solution 1\n", + "\n", + "

Same:

\n", + "\n", + "Both use nested loops\n", + "\n", + "Both construct the board row by row\n", + "\n", + "Both use append() to add values\n", + "\n", + "Both return an n × n list of lists\n", + "\n", + "Both are easy to understand and beginner-friendly\n", + "\n", + "\n", + "

Different:

\n", + "\n", + "Your solution defines empty, X, and O, while Solution 1 directly uses 0\n", + "\n", + "Your solution documents the meaning of values more clearly\n", + "\n", + "Solution 1 is slightly shorter\n", + "\n", + "\n", + "

For Solution 2

\n", + "\n", + "

Same:

\n", + "\n", + "Both return an n × n Tic Tac Toe board\n", + "\n", + "Both use 0 to represent empty spaces\n", + "\n", + "Both solve the same problem correctly\n", + "\n", + "\n", + "

Different:

\n", + "\n", + "Your solution uses explicit loops, Solution 2 uses list comprehension\n", + "\n", + "Your solution is more readable for beginners\n", + "\n", + "Solution 2 is more compact but less transparent\n", + "\n", + "Your solution clearly shows how the matrix is built step by step\n", + "\n", + "\n", + "

For Solution 3

\n", + "\n", + "

Same:

\n", + "\n", + "Both create each row separately\n", + "\n", + "Both store rows in a board list\n", + "\n", + "Both correctly initialize all cells as empty (0)\n", + "\n", + "\n", + "

Different:

\n", + "\n", + "Your solution fills rows using an inner loop, Solution 3 uses [0] * n\n", + "\n", + "Your approach is more detailed and instructional\n", + "\n", + "Solution 3 is more concise and slightly more efficient\n" ] }, { @@ -117,6 +227,19 @@ "**Question:** Which solution most closely matches your solution? What are the main differences?" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

Solution 1 is the closest match because:

\n", + "\n", + "It follows the same structure\n", + "\n", + "Uses the same logic\n", + "\n", + "Builds the matrix step-by-step just like my implementation" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -138,20 +261,45 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 84, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution \n", + "def draw_board(r,c):\n", + " for i in range(r):\n", + " row = \"\"\n", + " empty = \" \"\n", + " print(\" --- \" *c)\n", + " for j in range(c):\n", + " row += \"| \" + empty + \" |\"\n", + " \n", + " print(row)\n", + " print(\" --- \" *c)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 86, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " --- --- --- \n", + "| || || |\n", + " --- --- --- \n", + "| || || |\n", + " --- --- --- \n", + "| || || |\n", + " --- --- --- \n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution \n", + "draw_board(3,3)" ] }, { @@ -163,20 +311,48 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution \n", + "def draw_board(board):\n", + " n = len(board)\n", + " m = len(board[0])\n", + " icons = {1:\"X\",2:\"O\",0:\" \"}\n", + " for i in range(n):\n", + " row = \"\"\n", + " print(\" --- \"*m)\n", + " for j in range(m):\n", + " row += (f\"| {icons[int(board[i][j])]} |\")\n", + " print(row)\n", + "\n", + " print(\" --- \"*m)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 89, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " --- --- --- \n", + "| X || X || X |\n", + " --- --- --- \n", + "| X || X || X |\n", + " --- --- --- \n", + "| X || X || X |\n", + " --- --- --- \n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution \n", + "b= make_board(3)\n", + "draw_board(b)" ] }, { @@ -193,27 +369,51 @@ "Here are some example inputs you can use to test your code:\n" ] }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Write your solution here" - ] - }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "# Test your solution here" + "# Write your solution \n", + "def check_play(board):\n", + " r = len(board)\n", + " c = len(board[0])\n", + "\n", + " for i in range(r):\n", + " if all(board[i][j] == 1 for j in range(c)):\n", + " return 1\n", + " elif all(board[i][j] == 2 for j in range(c)):\n", + " return 2\n", + " \n", + " for j in range(c):\n", + " if all(board[i][j] == 1 for i in range(r)):\n", + " return 1\n", + " elif all(board[i][j] == 2 for i in range(r)):\n", + " return 2\n", + " \n", + " \n", + " if all(board[i][i] == 1 for i in range(r)):\n", + " return 1\n", + " elif all(board[i][i] == 2 for i in range(r)):\n", + " return 2\n", + "\n", + " if all(board[i][r-1-i] == 1 for i in range(r)):\n", + " return 1\n", + " elif all(board[i][r-1-i] == 2 for i in range(r)):\n", + " return 2\n", + "\n", + "\n", + " for i in range(r):\n", + " if any(board[i][j] == 0 for j in range(c)):\n", + " return -1\n", + " \n", + " return 0" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -235,7 +435,38 @@ "\n", "also_no_winner = [[1, 2, 0],\n", "\t[2, 1, 0],\n", - "\t[2, 1, 0]]" + "\t[2, 1, 0]]\n", + "\n", + "draw = [[1,2,1],\n", + " [2,2,1],\n", + " [1,1,2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n", + "1\n", + "1\n", + "-1\n", + "-1\n", + "0\n" + ] + } + ], + "source": [ + "print(check_play(winner_is_2))\n", + "print(check_play(winner_is_1))\n", + "print(check_play(winner_is_also_1))\n", + "print(check_play(no_winner))\n", + "print(check_play(also_no_winner))\n", + "print(check_play(draw))" ] }, { @@ -252,20 +483,85 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution here\n", + "def player_move(board, player, x, y):\n", + " col = ord(x.upper()) - ord('A')\n", + " row = int(y) - 1\n", + "\n", + " if board[row][col] != 0:\n", + " return \"Invalid move!\"\n", + "\n", + " board[row][col] = player\n", + " return True" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 59, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | | X |\n", + " --- --- --- \n", + "2 | | X | |\n", + " --- --- --- \n", + "3 | O | O | |\n", + " --- --- --- \n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Press 1 for X and 2 for O 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter co-ordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the x co-ordinates: b\n", + "Enter the y co-ordinates: 1\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "b = [[1, 0, 1],\n", + "\t[0, 1, 0],\n", + "\t[2, 2, 0]]\n", + "draw_board(b)\n", + "a = input(\"Press 1 for X and 2 for O\")\n", + "print(\"Enter co-ordinates to make the move\")\n", + "x1 = input(\"Enter the x co-ordinates:\")\n", + "x2 = input(\"Enter the y co-ordinates:\")\n", + "player_move(b,a,x1,x2)" ] }, { @@ -277,20 +573,60 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "def draw_board(board):\n", + " n = len(board)\n", + " m = len(board[0])\n", + "\n", + " icons = {1: \"X\", 2: \"O\", 0: \" \"}\n", + "\n", + " header = \" \"\n", + " for j in range(m):\n", + " header += f\" {chr(65 + j)} \"\n", + " print(header)\n", + "\n", + " for i in range(n):\n", + " print(\" \" + \"--- \" * m)\n", + " row = f\"{i + 1} \"\n", + " for j in range(m):\n", + " row += f\"| {icons[int(board[i][j])]} \"\n", + " row += \"|\"\n", + " print(row)\n", + "\n", + " print(\" \" + \"--- \" * m)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | X | X |\n", + " --- --- --- \n", + "2 | O | X | O |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n", + "4 | X | O | |\n", + " --- --- --- \n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution \n", + "draw_board([[1, 1, 1],\n", + "\t[2, 1, 2],\n", + "\t[2, 1, 1],\n", + " [1,2,0]])" ] }, { @@ -302,7 +638,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 70, "metadata": { "ExecuteTime": { "end_time": "2026-01-26T21:09:58.171399Z", @@ -311,16 +647,39 @@ }, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution here\n", + "def move(board,player,a,b):\n", + " player_move(board,player,a,b)\n", + " draw_board(board)\n", + " " ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 71, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | X | X |\n", + " --- --- --- \n", + "2 | O | | O |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "board1=[[1, 0, 1],\n", + "\t[2, 0, 2],\n", + "\t[2, 1, 1]]\n", + "move(board1,1,'b',1)" ] }, { @@ -334,20 +693,90 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution here\n", + "def play_turn(board, player):\n", + " while True:\n", + " a = input(\"Enter the column letter: \")\n", + " b = input(\"Enter the row number: \")\n", + "\n", + " try:\n", + " if player_move(board, player, a, b) == True:\n", + " move(board, player, a, b)\n", + " break\n", + " else:\n", + " print(\"Invalid move! Try again.\")\n", + " except:\n", + " print(\"Invalid input! Try again.\")" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 73, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter (e.g., A, B, C): s\n", + "Enter the row number (e.g., 1, 2, 3): 9\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Invalid input! Please enter a valid letter and row number.\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter (e.g., A, B, C): a\n", + "Enter the row number (e.g., 1, 2, 3): 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Invalid move! That spot is already taken.\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter (e.g., A, B, C): b\n", + "Enter the row number (e.g., 1, 2, 3): 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | X | X |\n", + " --- --- --- \n", + "2 | O | | O |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "bord1=[[1, 0, 1],\n", + "\t[2, 0, 2],\n", + "\t[2, 1, 1]]\n", + "play_game(bord1,1)" ] }, { @@ -364,20 +793,258 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 90, "metadata": {}, "outputs": [], "source": [ - "# Write yourrr solution here" + "# Write yourrr solution here\n", + "def make_board(n,m):\n", + " empty = 0\n", + " X = 1\n", + " O = 2\n", + " board = list()\n", + " for i in range(n):\n", + " row = list()\n", + " for j in range(m):\n", + " row.append(0)\n", + " board.append(row)\n", + " return board\n", + " \n", + "def play_game():\n", + " n = int(input(\"Enter the number of rows on board\"))\n", + " m = int(input(\"Enter the number of columns on board: \"))\n", + " board = make_board(n, m)\n", + " current_player = 1\n", + " \n", + " draw_board(board)\n", + " \n", + " while check_play(board) == -1:\n", + " print(f\"Player {current_player}'s turn\")\n", + " play_turn(board,current_player)\n", + " \n", + " status = check_play(board)\n", + " \n", + " if status == 1 or status == 2:\n", + " print(f\"Player {status} wins!\")\n", + " return\n", + " elif status == 0:\n", + " print(\"It's a draw!\")\n", + " return\n", + " \n", + " if current_player == 1:\n", + " current_player = 2\n", + " else:\n", + " current_player = 1" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 93, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the number of rows on board 4\n", + "Enter the number of columns on board: 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | | | | |\n", + " --- --- --- --- \n", + "2 | | | | |\n", + " --- --- --- --- \n", + "3 | | | | |\n", + " --- --- --- --- \n", + "4 | | | | |\n", + " --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: a\n", + "Enter the row number: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | | | |\n", + " --- --- --- --- \n", + "2 | | | | |\n", + " --- --- --- --- \n", + "3 | | | | |\n", + " --- --- --- --- \n", + "4 | | | | |\n", + " --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: b\n", + "Enter the row number: 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | | | |\n", + " --- --- --- --- \n", + "2 | | | | |\n", + " --- --- --- --- \n", + "3 | | | | |\n", + " --- --- --- --- \n", + "4 | | O | | |\n", + " --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: b\n", + "Enter the row number: 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | | | |\n", + " --- --- --- --- \n", + "2 | | X | | |\n", + " --- --- --- --- \n", + "3 | | | | |\n", + " --- --- --- --- \n", + "4 | | O | | |\n", + " --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: b\n", + "Enter the row number: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | O | | |\n", + " --- --- --- --- \n", + "2 | | X | | |\n", + " --- --- --- --- \n", + "3 | | | | |\n", + " --- --- --- --- \n", + "4 | | O | | |\n", + " --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: c\n", + "Enter the row number: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | O | | |\n", + " --- --- --- --- \n", + "2 | | X | | |\n", + " --- --- --- --- \n", + "3 | | | X | |\n", + " --- --- --- --- \n", + "4 | | O | | |\n", + " --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: d\n", + "Enter the row number: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | O | | |\n", + " --- --- --- --- \n", + "2 | | X | | |\n", + " --- --- --- --- \n", + "3 | | | X | O |\n", + " --- --- --- --- \n", + "4 | | O | | |\n", + " --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: d\n", + "Enter the row number: 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D \n", + " --- --- --- --- \n", + "1 | X | O | | |\n", + " --- --- --- --- \n", + "2 | | X | | |\n", + " --- --- --- --- \n", + "3 | | | X | O |\n", + " --- --- --- --- \n", + "4 | | O | | X |\n", + " --- --- --- --- \n", + "Player 1 wins!\n" + ] + } + ], "source": [ - "# Test your solution here" + "play_game()" ] }, { @@ -389,11 +1056,283 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 94, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the number of rows on board 5\n", + "Enter the number of columns on board: 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | | | | | |\n", + " --- --- --- --- --- \n", + "2 | | | | | |\n", + " --- --- --- --- --- \n", + "3 | | | | | |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: a\n", + "Enter the row number: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | | | | |\n", + " --- --- --- --- --- \n", + "3 | | | | | |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: e\n", + "Enter the row number: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | | | | |\n", + " --- --- --- --- --- \n", + "3 | | | | | O |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: b\n", + "Enter the row number: 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | X | | | |\n", + " --- --- --- --- --- \n", + "3 | | | | | O |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: c\n", + "Enter the row number: 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | X | O | | |\n", + " --- --- --- --- --- \n", + "3 | | | | | O |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: c\n", + "Enter the row number: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | X | O | | |\n", + " --- --- --- --- --- \n", + "3 | | | X | | O |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: d\n", + "Enter the row number: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | X | O | | |\n", + " --- --- --- --- --- \n", + "3 | | | X | O | O |\n", + " --- --- --- --- --- \n", + "4 | | | | | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: d\n", + "Enter the row number: 4\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | |\n", + " --- --- --- --- --- \n", + "2 | | X | O | | |\n", + " --- --- --- --- --- \n", + "3 | | | X | O | O |\n", + " --- --- --- --- --- \n", + "4 | | | | X | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 2's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: e\n", + "Enter the row number: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | O |\n", + " --- --- --- --- --- \n", + "2 | | X | O | | |\n", + " --- --- --- --- --- \n", + "3 | | | X | O | O |\n", + " --- --- --- --- --- \n", + "4 | | | | X | |\n", + " --- --- --- --- --- \n", + "5 | | | | | |\n", + " --- --- --- --- --- \n", + "Player 1's turn\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column letter: e\n", + "Enter the row number: 5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C D E \n", + " --- --- --- --- --- \n", + "1 | X | | | | O |\n", + " --- --- --- --- --- \n", + "2 | | X | O | | |\n", + " --- --- --- --- --- \n", + "3 | | | X | O | O |\n", + " --- --- --- --- --- \n", + "4 | | | | X | |\n", + " --- --- --- --- --- \n", + "5 | | | | | X |\n", + " --- --- --- --- --- \n", + "Player 1 wins!\n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "play_game()" ] }, { @@ -409,20 +1348,274 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution here\n", + "import random\n", + "\n", + "def computer_move(board, computer, human):\n", + " r = len(board)\n", + " c = len(board[0])\n", + "\n", + " def try_move(player):\n", + " for i in range(r):\n", + " for j in range(c):\n", + " if board[i][j] == 0:\n", + " board[i][j] = player\n", + " if check_play(board) == player:\n", + " return (i, j)\n", + " board[i][j] = 0\n", + " return \n", + "\n", + " move = try_move(computer)\n", + " if move:\n", + " board[move[0]][move[1]] = computer\n", + " return\n", + " move = try_move(human)\n", + " if move:\n", + " board[move[0]][move[1]] = computer\n", + " return\n", + " empty = [(i, j) for i in range(r) for j in range(c) if board[i][j] == 0]\n", + " if empty:\n", + " i, j = random.choice(empty)\n", + " board[i][j] = computer" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 96, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the number of rows on board: 3\n", + "Enter the number of columns on board: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | | | |\n", + " --- --- --- \n", + "2 | | | |\n", + " --- --- --- \n", + "3 | | | |\n", + " --- --- --- \n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Press 1 for 2-player game, 2 to play vs computer: 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): c\n", + "Enter the row (1, 2, 3...): 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | | | |\n", + " --- --- --- \n", + "2 | | | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | O | | |\n", + " --- --- --- \n", + "2 | | | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): c\n", + "Enter the row (1, 2, 3...): 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | O | | X |\n", + " --- --- --- \n", + "2 | | | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | O | | X |\n", + " --- --- --- \n", + "2 | | | O |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): a\n", + "Enter the row (1, 2, 3...): 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | O | | X |\n", + " --- --- --- \n", + "2 | | | O |\n", + " --- --- --- \n", + "3 | X | | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | O | | X |\n", + " --- --- --- \n", + "2 | | O | O |\n", + " --- --- --- \n", + "3 | X | | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): a\n", + "Enter the row (1, 2, 3...): 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | O | | X |\n", + " --- --- --- \n", + "2 | X | O | O |\n", + " --- --- --- \n", + "3 | X | | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | O | | X |\n", + " --- --- --- \n", + "2 | X | O | O |\n", + " --- --- --- \n", + "3 | X | O | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): b\n", + "Enter the row (1, 2, 3...): 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | O | X | X |\n", + " --- --- --- \n", + "2 | X | O | O |\n", + " --- --- --- \n", + "3 | X | O | X |\n", + " --- --- --- \n", + "Its a draw.\n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "x_size = int(input(\"Enter the number of rows on board: \"))\n", + "y_size = int(input(\"Enter the number of columns on board: \"))\n", + "\n", + "b = make_board(x_size, y_size)\n", + "draw_board(b)\n", + "\n", + "mode = int(input(\"Press 1 for 2-player game, 2 to play vs computer: \"))\n", + "player = 1\n", + "computer = 2 if mode == 2 else None\n", + "moves = -1\n", + "\n", + "while moves == -1:\n", + "\n", + " if mode == 2 and player == computer:\n", + " print(\"Computer is making a move...\")\n", + " computer_move(b, computer, 1)\n", + " else:\n", + " print(\"Enter coordinates to make the move\")\n", + " x1 = input(\"Enter the column (A, B, C...): \")\n", + " x2 = input(\"Enter the row (1, 2, 3...): \")\n", + "\n", + " result = player_move(b, player, x1, x2)\n", + " if result != True:\n", + " print(result)\n", + " continue\n", + "\n", + " draw_board(b)\n", + " moves = check_play(b)\n", + "\n", + " if moves == -1:\n", + " player = 2 if player == 1 else 1\n", + "\n", + "if moves == 1:\n", + " print(\"X won.\")\n", + "elif moves == 2:\n", + " print(\"O won.\")\n", + "else:\n", + " print(\"Its a draw.\")" ] }, { @@ -434,20 +1627,319 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution here\n", + "import random\n", + "\n", + "def minimax(board, depth, max_depth, player, smart, dumb):\n", + " result = check_play(board)\n", + "\n", + " if result == smart:\n", + " return 100 - depth\n", + " if result == dumb:\n", + " return depth - 100\n", + " if result == 0:\n", + " return 0\n", + "\n", + " if depth == max_depth:\n", + " return 0\n", + "\n", + " r = len(board)\n", + " c = len(board[0])\n", + "\n", + " if player == smart:\n", + " best = -float(\"inf\")\n", + "\n", + " for i in range(r):\n", + " for j in range(c):\n", + " if board[i][j] == 0:\n", + " board[i][j] = smart\n", + " score = minimax(board, depth + 1, max_depth,\n", + " dumb, smart, dumb)\n", + " board[i][j] = 0\n", + " best = max(best, score)\n", + "\n", + " return best\n", + "\n", + " else:\n", + " best = float(\"inf\")\n", + "\n", + " for i in range(r):\n", + " for j in range(c):\n", + " if board[i][j] == 0:\n", + " board[i][j] = dumb\n", + " score = minimax(board, depth + 1, max_depth,\n", + " smart, smart, dumb)\n", + " board[i][j] = 0\n", + " best = min(best, score)\n", + "\n", + " return best\n", + "\n", + "\n", + "def computer_move_exhaustive(board, player, opponent, depth):\n", + " r = len(board)\n", + " c = len(board[0])\n", + "\n", + " best_score = -float(\"inf\")\n", + " best_move = None\n", + "\n", + " for i in range(r):\n", + " for j in range(c):\n", + " if board[i][j] == 0:\n", + " board[i][j] = player\n", + " score = minimax(board, 0, depth,\n", + " opponent, player, opponent)\n", + " board[i][j] = 0\n", + "\n", + " if score > best_score:\n", + " best_score = score\n", + " best_move = (i, j)\n", + "\n", + " if best_move:\n", + " board[best_move[0]][best_move[1]] = player\n" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 99, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the number of rows on board: 3\n", + "Enter the number of columns on board: 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | | | |\n", + " --- --- --- \n", + "2 | | | |\n", + " --- --- --- \n", + "3 | | | |\n", + " --- --- --- \n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Press 1 for 2-player game, 2 to play vs computer: 2\n", + "Enter search depth (recommended 3-5): 6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): c\n", + "Enter the row (1, 2, 3...): 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | | | |\n", + " --- --- --- \n", + "2 | | | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | | | |\n", + " --- --- --- \n", + "2 | | O | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): a\n", + "Enter the row (1, 2, 3...): 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | | |\n", + " --- --- --- \n", + "2 | | O | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | X | O | |\n", + " --- --- --- \n", + "2 | | O | |\n", + " --- --- --- \n", + "3 | | | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): b\n", + "Enter the row (1, 2, 3...): 3\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | O | |\n", + " --- --- --- \n", + "2 | | O | |\n", + " --- --- --- \n", + "3 | | X | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | X | O | |\n", + " --- --- --- \n", + "2 | | O | |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): c\n", + "Enter the row (1, 2, 3...): 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | O | X |\n", + " --- --- --- \n", + "2 | | O | |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n", + "Computer is making a move...\n", + " A B C \n", + " --- --- --- \n", + "1 | X | O | X |\n", + " --- --- --- \n", + "2 | | O | O |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n", + "Enter coordinates to make the move\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter the column (A, B, C...): a\n", + "Enter the row (1, 2, 3...): 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " A B C \n", + " --- --- --- \n", + "1 | X | O | X |\n", + " --- --- --- \n", + "2 | X | O | O |\n", + " --- --- --- \n", + "3 | O | X | X |\n", + " --- --- --- \n", + "Its a draw.\n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution \n", + "# Test your solution here\n", + "x_size = int(input(\"Enter the number of rows on board: \"))\n", + "y_size = int(input(\"Enter the number of columns on board: \"))\n", + "\n", + "b = make_board(x_size, y_size)\n", + "draw_board(b)\n", + "\n", + "mode = int(input(\"Press 1 for 2-player game, 2 to play vs computer: \"))\n", + "player = 1\n", + "computer = 2 if mode == 2 else None\n", + "if mode == 2:\n", + " max_depth = int(input(\"Enter search depth (recommended 3-5): \"))\n", + "\n", + "moves = -1\n", + "\n", + "while moves == -1:\n", + "\n", + " if mode == 2 and player == computer:\n", + " print(\"Computer is making a move...\")\n", + " computer_move_exhaustive(b, computer, 1, max_depth)\n", + " else:\n", + " print(\"Enter coordinates to make the move\")\n", + " x1 = input(\"Enter the column (A, B, C...): \")\n", + " x2 = input(\"Enter the row (1, 2, 3...): \")\n", + "\n", + " result = player_move(b, player, x1, x2)\n", + " if result != True:\n", + " print(result)\n", + " continue\n", + "\n", + " draw_board(b)\n", + " moves = check_play(b)\n", + "\n", + " if moves == -1:\n", + " player = 2 if player == 1 else 1\n", + "\n", + "if moves == 1:\n", + " print(\"X won.\")\n", + "elif moves == 2:\n", + " print(\"O won.\")\n", + "else:\n", + " print(\"Its a draw.\")" ] }, { @@ -459,20 +1951,67 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 103, "metadata": {}, "outputs": [], "source": [ - "# Write your solution here" + "# Write your solution \n", + "def play_ai_vs_ai(size, depth_smart, depth_dumb, games=10):\n", + " smart_wins = 0\n", + " draw= 0\n", + " for g in range(games):\n", + " board = make_board(size, size)\n", + "\n", + " smart = 1 if g % 2 == 0 else 2\n", + " dumb = 2 if smart == 1 else 1\n", + "\n", + " player = 1\n", + " result = -1\n", + "\n", + " while result == -1:\n", + " if player == smart:\n", + " computer_move_exhaustive(board, smart, dumb, depth_smart)\n", + " else:\n", + " computer_move_exhaustive(board, dumb, smart, depth_dumb)\n", + "\n", + " result = check_play(board)\n", + " player = 2 if player == 1 else 1\n", + "\n", + " if result == smart:\n", + " smart_wins += 1\n", + " elif result == 0:\n", + " draw += 1\n", + "\n", + " win_rate = smart_wins / games * 100\n", + " print(f\"{size}x{size} grid → Smart AI win rate: {win_rate:.1f}% with {draw} draws.\")\n" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 104, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "AI vs AI experiment:\n", + "\n", + "3x3 grid → Smart AI win rate: 50.0% with 5 draws.\n", + "4x4 grid → Smart AI win rate: 0.0% with 10 draws.\n", + "5x5 grid → Smart AI win rate: 0.0% with 10 draws.\n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "# Test your solution here\n", + "print(\"\\nAI vs AI experiment:\\n\")\n", + "\n", + "play_ai_vs_ai(3, depth_smart=5, depth_dumb=2)\n", + "play_ai_vs_ai(4, depth_smart=4, depth_dumb=2)\n", + "play_ai_vs_ai(5, depth_smart=3, depth_dumb=1)" ] }, { @@ -510,7 +2049,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.7" + "version": "3.12.12" } }, "nbformat": 4, diff --git a/Labs/Lab.3/.DS_Store b/Labs/Lab.3/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b64e8a66be762fa35434803973b0b1ba7339f481 GIT binary patch literal 6148 zcmeHKJ5EDE3>-s>AexkvdxA)a3#_7~K%(OU@QA1)g@*oBIS?n{W@P*kB6`pu(V($p z&#u?=HgAgO7=W!_x7WY|z?|-ggNLd4x%Y|KHGmnEy{n+DQQ^@UIlG+4_FH;wx2eoxGg)+D3n%d(AuD qjq9K=L^~!%JLbmQ@l_OMUGp{1d*PTEbmoIj)Sm&@MJ5IQT7e_O6B^F| literal 0 HcmV?d00001 diff --git a/Labs/Lab.3/Lab.3.ipynb b/Labs/Lab.3/Lab.3.ipynb index 3dc0438e..0154b718 100644 --- a/Labs/Lab.3/Lab.3.ipynb +++ b/Labs/Lab.3/Lab.3.ipynb @@ -207,9 +207,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Value of x is 0.9036066841881488\n" + ] + } + ], "source": [ "import random\n", "x=random.random()\n", @@ -227,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -235,18 +243,30 @@ "def generate_uniform(N,x_min,x_max):\n", " out = []\n", " ### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", - " \n", + " for _ in range(N):\n", + " d = random.random()\n", + " out.append(int(x_min + d * (x_max - x_min)))\n", " ### END SOLUTION\n", " return out" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data Type: \n", + "Data Length: 1000\n", + "Type of Data Contents: \n", + "Data Minimum: -9\n", + "Data Maximum: 9\n" + ] + } + ], "source": [ "# Test your solution here\n", "data=generate_uniform(1000,-10,10)\n", @@ -268,7 +288,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -276,10 +296,10 @@ "def mean(Data):\n", " m=0.\n", " \n", - " ### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", - " \n", + " ### BEGIN SOLUTION \n", + " n = len(Data)\n", + " Summation = sum(Data)\n", + " m = Summation/n\n", " ### END SOLUTION\n", " \n", " return m" @@ -287,11 +307,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean of Data: 9.0\n" + ] + } + ], "source": [ "# Test your solution here\n", + "data = [8,10]\n", "print (\"Mean of Data:\", mean(data))" ] }, @@ -305,7 +334,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -314,9 +343,14 @@ " m=0.\n", " \n", " ### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", - " \n", + " n = len(Data)\n", + " x_bar = mean(Data)\n", + " summation = 0\n", + " for i in range(n):\n", + " difference_sq = (Data[i] - x_bar) * (Data[i] - x_bar)\n", + " summation += difference_sq\n", + " \n", + " m = (1/(n-1)) * summation\n", " ### END SOLUTION\n", " \n", " return m" @@ -324,11 +358,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variance of Data: 542.1944444444445\n" + ] + } + ], "source": [ "# Test your solution here\n", + "data = [12,19,45,68,90,42,47,50,48]\n", "print (\"Variance of Data:\", variance(data))" ] }, @@ -358,16 +401,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Solution\n", "def histogram(x,n_bins=10,x_min=None,x_max=None):\n", " ### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", - " \n", + " x_min, x_max = min(x), max(x)\n", + " bin_size = (x_max - x_min) / n_bins\n", + " hist = [0] * n_bins\n", + " bin_edges = [x_min + i * bin_size for i in range(n_bins + 1)]\n", + " for value in x:\n", + " for i in range(n_bins):\n", + " lower_bound = bin_edges[i]\n", + " upper_bound = bin_edges[i+1]\n", + " if lower_bound <= value <= upper_bound:\n", + " hist[i] += 1\n", + " break\n", " ### END SOLUTION\n", "\n", " return hist,bin_edges" @@ -375,13 +426,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[3, 2, 2]\n", + "[1.0, 4.666666666666666, 8.333333333333332, 12.0]\n" + ] + } + ], "source": [ "# Test your solution here\n", - "h,b=histogram(data,100)\n", - "print(h)" + "data = [1, 2, 2, 5, 8, 10, 12]\n", + "h,b=histogram(data,3)\n", + "print(h)\n", + "print(b)" ] }, { @@ -407,29 +469,59 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "# Solution\n", - "def draw_histogram(x,n_bins,x_min=None,x_max=None,character=\"#\",max_character_per_line=20):\n", + "def draw_histogram(x, n_bins, x_min=None, x_max=None, character=\"#\", max_character_per_line=20):\n", " ### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", + " hist, bin_edges = histogram(x, n_bins)\n", + " max_h = max(hist)\n", " \n", + " for i in range(len(hist)):\n", + " if max_h > 0:\n", + " num_chars = int((hist[i] / max_h) * max_character_per_line)\n", + " else:\n", + " num_chars = 0\n", + " \n", + " bar = character * num_chars\n", + " lower = bin_edges[i]\n", + " upper = bin_edges[i+1]\n", + " print(f\"[{lower:>3.0f}, {upper:>3.0f}] : {bar}\")\n", " ### END SOLUTION\n", "\n", - " return hist,bin_edges" + " return hist, bin_edges" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0, 1] : ######\n", + "[ 1, 2] : ######\n", + "[ 2, 3] : #############\n", + "[ 3, 4] : ####################\n", + "[ 4, 4] : #############\n", + "[ 4, 5] : ####################\n", + "[ 5, 6] : #############\n", + "[ 6, 7] : ####################\n", + "[ 7, 8] : #############\n", + "[ 8, 9] : ####################\n" + ] + } + ], "source": [ "# Test your solution here\n", - "h,b=histogram(data,20)" + "# Create simple data from 0 to 10 to match your image\n", + "data = [0, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9]\n", + "\n", + "# This line will now print the graph to the screen\n", + "h, b = draw_histogram(data, n_bins=10)" ] }, { @@ -443,29 +535,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "def where(mylist,myfunc):\n", - " out= []\n", - " \n", - " ### BEGIN SOLUTION\n", + "def where(mylist, myfunc):\n", + " out = []\n", "\n", - " # Fill in your solution here \n", - " \n", + " ### BEGIN SOLUTION\n", + " for i in range(len(mylist)):\n", + " if myfunc(mylist[i]):\n", + " out.append(i)\n", " ### END SOLUTION\n", - " \n", + "\n", " return out" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 3]\n" + ] + } + ], "source": [ - "# Test your solution here" + "# Test your solution here\n", + "data = [0.1, 0.6, 0.3, 0.8, 0.2]\n", + "indices = where(data, lambda x: x > 0.5)\n", + "print(indices)" ] }, { @@ -483,9 +586,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True True False False False\n", + "False False True True False\n", + "Number of Entries passing F1: 5\n", + "Number of Entries passing F2: 0\n" + ] + } + ], "source": [ "def in_range(mymin,mymax):\n", " def testrange(x):\n", @@ -493,8 +607,8 @@ " return testrange\n", "\n", "# Examples:\n", - "F1=inrange(0,10)\n", - "F2=inrange(10,20)\n", + "F1=in_range(0,10)\n", + "F2=in_range(10,20)\n", "\n", "# Test of in_range\n", "print (F1(0), F1(1), F1(10), F1(15), F1(20))\n", @@ -506,24 +620,63 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", - " \n", + "def is_even(x):\n", + " return x % 2 == 0\n", + "\n", + "def is_odd(x):\n", + " return x % 2 != 0\n", + "\n", + "def greater_than(val):\n", + " def tester(x):\n", + " return x > val\n", + " return tester\n", + "\n", + "def less_than(val):\n", + " def tester(x):\n", + " return x < val\n", + " return tester\n", + "\n", + "def equal(val):\n", + " def tester(x):\n", + " return x == val\n", + " return tester\n", + "\n", + "def divisible_by(val):\n", + " def tester(x):\n", + " return x % val == 0\n", + " return tester \n", "### END SOLUTION" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Even indices: [1, 3, 5, 6]\n", + "Greater than 5 indices: [5, 6, 7]\n", + "Divisible by 3 indices: [2, 5, 7]\n" + ] + } + ], "source": [ - "# Test your solution" + "# Test your solution\n", + "data = [1, 2, 3, 4, 5, 6, 10, 15]\n", + "\n", + "print(\"Even indices:\", where(data, is_even))\n", + "\n", + "print(\"Greater than 5 indices:\", where(data, greater_than(5)))\n", + "\n", + "print(\"Divisible by 3 indices:\", where(data, divisible_by(3)))" ] }, { @@ -535,14 +688,30 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Even: 4\n", + "Odd: 4\n", + "Greater than: 8\n", + "Less than: 0\n", + "Equal: 0\n", + "Divisible by: 3\n" + ] + } + ], "source": [ "### BEGIN SOLUTION\n", - "\n", - " # Fill in your solution here \n", - " \n", + "print(\"Even:\", sum(map(lambda x: x % 2 == 0, data)))\n", + "print(\"Odd:\", sum(map(lambda x: x % 2 != 0, data)))\n", + "print(\"Greater than:\", sum(map(lambda x: x > 0.5, data)))\n", + "print(\"Less than:\", sum(map(lambda x: x < 0.5, data)))\n", + "print(\"Equal:\", sum(map(lambda x: x == 0, data)))\n", + "print(\"Divisible by:\", sum(map(lambda x: x % 3 == 0, data)))\n", "### END SOLUTION" ] }, @@ -561,30 +730,73 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def generate_function(func,x_min,x_max,N=1000):\n", " out = list()\n", " ### BEGIN SOLUTION\n", + " import random\n", "\n", - " # Fill in your solution here \n", + " y_max = 0\n", + " steps = 1000\n", + " step_size = (x_max - x_min) / steps\n", " \n", + " for i in range(steps):\n", + " val = func(x_min + i * step_size)\n", + " if val > y_max:\n", + " y_max = val\n", + " \n", + " while len(out) < N:\n", + " test_x = random.uniform(x_min, x_max)\n", + " p = random.uniform(0, y_max)\n", + " \n", + " if p <= func(test_x):\n", + " out.append(test_x)\n", " ### END SOLUTION\n", - " \n", " return out" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ -5, -5] : ####################\n", + "[ -5, -4] : ##################\n", + "[ -4, -4] : ################\n", + "[ -4, -3] : ##############\n", + "[ -3, -3] : ##########\n", + "[ -3, -3] : #########\n", + "[ -3, -2] : #######\n", + "[ -2, -2] : ####\n", + "[ -2, -1] : ##\n", + "[ -1, -1] : #\n", + "[ -1, -1] : #\n", + "[ -1, -0] : ##\n", + "[ -0, 0] : #####\n", + "[ 0, 1] : #######\n", + "[ 1, 1] : #########\n", + "[ 1, 1] : ###########\n", + "[ 1, 2] : ##############\n", + "[ 2, 2] : ###############\n", + "[ 2, 3] : #################\n", + "[ 3, 3] : ##################\n", + "([950, 863, 792, 686, 521, 432, 354, 219, 142, 54, 54, 137, 262, 362, 442, 565, 695, 741, 835, 894], [-4.999913621869641, -4.599928144478, -4.199942667086358, -3.7999571896947164, -3.3999717123030746, -2.999986234911433, -2.6000007575197914, -2.2000152801281496, -1.8000298027365078, -1.400044325344866, -1.0000588479532242, -0.6000733705615824, -0.20008789316994147, 0.19989758422170034, 0.5998830616133422, 0.999868539004984, 1.3998540163966258, 1.7998394937882676, 2.1998249711799094, 2.599810448571551, 2.999795925963193])\n" + ] + } + ], "source": [ "# A test function\n", "def test_func(x,a=1,b=1):\n", - " return abs(a*x+b)" + " return abs(a*x+b)\n", + "data = generate_function(test_func, x_min=-5, x_max=3, N=10000)\n", + "print(draw_histogram(data, n_bins=20))" ] }, { @@ -596,9 +808,38 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean: -0.0052738494072836215\n", + "Variance: 0.9638367958021714\n", + "[ -4, -3] : \n", + "[ -3, -3] : \n", + "[ -3, -3] : \n", + "[ -3, -2] : \n", + "[ -2, -2] : ##\n", + "[ -2, -1] : ###\n", + "[ -1, -1] : #########\n", + "[ -1, -1] : #############\n", + "[ -1, -0] : ################\n", + "[ -0, 0] : ####################\n", + "[ 0, 0] : ###############\n", + "[ 0, 1] : ###############\n", + "[ 1, 1] : ###########\n", + "[ 1, 2] : ######\n", + "[ 2, 2] : ###\n", + "[ 2, 2] : ##\n", + "[ 2, 3] : \n", + "[ 3, 3] : \n", + "[ 3, 3] : \n", + "[ 3, 4] : \n" + ] + } + ], "source": [ "import math\n", "\n", @@ -607,6 +848,17 @@ " return math.exp(-((x-mean)**2)/(2*sigma**2))/math.sqrt(math.pi*sigma)\n", " return f\n", "\n", + "g1 = gaussian(0, 1)\n", + "data = generate_function(g1, -5, 5, N=1000)\n", + "\n", + "calc_mean = sum(data) / len(data)\n", + "calc_var = sum([(x - calc_mean)**2 for x in data]) / len(data)\n", + "\n", + "print(f\"Mean: {calc_mean}\")\n", + "print(f\"Variance: {calc_var}\")\n", + "\n", + "draw_histogram(data, n_bins=20)\n", + "\n", "# Example Instantiation\n", "g1=gaussian(0,1)\n", "g2=gaussian(10,3)" @@ -621,19 +873,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "def integrate(func, x_min, x_max, n_points=1000):\n", - " \n", + " ### BEGIN SOLUTION\n", + " all_data = generate_function(func, x_min - 5, x_max + 5, N=n_points)\n", + " checker = in_range(x_min, x_max)\n", + " valid_indices = where(all_data, checker)\n", + " integral = len(valid_indices) / n_points\n", + " ### END SOLUTION\n", " return integral" ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.6908\n" + ] + } + ], + "source": [ + "g1 = gaussian(0, 1)\n", + "print(integrate(g1, -1, 1, n_points=5000))" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "ds", "language": "python", "name": "python3" }, @@ -647,7 +922,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.7" + "version": "3.11.14" } }, "nbformat": 4, From 929de98ef3bcfacba42b27a0f588b6135809c4f5 Mon Sep 17 00:00:00 2001 From: Subham-Kalwar Date: Fri, 27 Feb 2026 22:49:09 -0600 Subject: [PATCH 3/4] Solution to lab 5 --- .DS_Store | Bin 8196 -> 8196 bytes Labs/.DS_Store | Bin 10244 -> 10244 bytes Labs/Lab.5/Lab.5.ipynb | 429 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 426 insertions(+), 3 deletions(-) diff --git a/.DS_Store b/.DS_Store index a329cf562a6e93ba902b33647b1d7a75daadd887..ddf0417c31ffb1b5aee12fdd22ed963dd48208c9 100644 GIT binary patch delta 16 XcmZp1XmQwZKw$DwVfW4Kf`9n{I{*fe delta 25 gcmZp1XmQwZK!C&4%uq+c(9&Y^Sz-Il?1F#!0BfuWBLDyZ diff --git a/Labs/.DS_Store b/Labs/.DS_Store index 1df00a398015a3a3f519966ba6a5a080d3d82357..08a73716633baf8d931ce4a00d4b884caa729f3d 100644 GIT binary patch delta 106 zcmZn(XbG6$&nUDpU^hRb&}JTi`z)Io#WENthY8nhekEeg%+1Q+!;r|3#GuDuI$2-z zBBSZ#*CLYAW}Z3u$w@i+Nem1O0t^gHML=5bKNxH*e8;kxUEvqYW^u6~m_f#j0KWYq AZvX%Q delta 41 xcmZn(XbG6$&&aniU^hP_-)0_x`z)I;iJ38PEStzau_1IbyTUJ)%`e25nE^Aj4yynF diff --git a/Labs/Lab.5/Lab.5.ipynb b/Labs/Lab.5/Lab.5.ipynb index cba02709..e0dfc58d 100644 --- a/Labs/Lab.5/Lab.5.ipynb +++ b/Labs/Lab.5/Lab.5.ipynb @@ -20,7 +20,91 @@ " * Matrix instances `M` can be indexed with `M[i][j]` and `M[i,j]`.\n", " * Matrix assignment works in 2 ways:\n", " 1. If `M_1` and `M_2` are `matrix` instances `M_1=M_2` sets the values of `M_1` to those of `M_2`, if they are the same size. Error otherwise.\n", - " 2. In example above `M_2` can be a list of lists of correct size.\n" + " 2. In example above `M_2` can be a list of lists of correct size." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Q1 Tests ---\n", + "Q1 Initialization, Indexing, and Assignment tests passed!\n" + ] + } + ], + "source": [ + "class matrix:\n", + " def __init__(self, *args):\n", + " # I'm checking if the arguments are two integers (n, m) to create a zero matrix\n", + " if len(args) == 2 and isinstance(args[0], int) and isinstance(args[1], int):\n", + " self.n, self.m = args[0], args[1]\n", + " self.data = [[0 for _ in range(self.m)] for _ in range(self.n)]\n", + " \n", + " # Or if the argument is a list of lists, I need to copy it over\n", + " elif len(args) == 1 and isinstance(args[0], list):\n", + " input_list = args[0]\n", + " self.n = len(input_list)\n", + " self.m = len(input_list[0]) if self.n > 0 else 0\n", + " \n", + " # Making sure every row has the same number of columns to catch bad inputs\n", + " if not all(isinstance(row, list) and len(row) == self.m for row in input_list):\n", + " raise ValueError(\"All rows must have the same number of columns.\")\n", + " \n", + " self.data = [[val for val in row] for row in input_list]\n", + " else:\n", + " raise ValueError(\"Need either (n, m) or a list of lists.\")\n", + "\n", + " def __getitem__(self, index):\n", + " # Python passes M[i,j] as a tuple, so I unpack it\n", + " if isinstance(index, tuple):\n", + " i, j = index\n", + " return self.data[i][j]\n", + " # For M[i][j], the first brackets pass an int, returning the whole row\n", + " elif isinstance(index, int):\n", + " return self.data[index]\n", + " else:\n", + " raise TypeError(\"Index needs to be an int or tuple.\")\n", + "\n", + " def __setitem__(self, index, value):\n", + " # Allowing value assignment like M[0,1] = 5\n", + " if isinstance(index, tuple):\n", + " i, j = index\n", + " self.data[i][j] = value\n", + " elif isinstance(index, int):\n", + " self.data[index] = value\n", + "\n", + " def assign(self, other):\n", + " # The assignment operator '=' cannot be overloaded in Python. \n", + " # Writing M_1 = M_2 just creates a reference copy, it doesn't modify the object's values.\n", + " # So, I'm using an assign() method to handle the specific assignment logic requested.\n", + " if isinstance(other, matrix):\n", + " if self.n != other.n or self.m != other.m:\n", + " raise ValueError(\"Size mismatch.\")\n", + " self.data = [[val for val in row] for row in other.data]\n", + " elif isinstance(other, list):\n", + " if len(other) != self.n or not all(len(row) == self.m for row in other):\n", + " raise ValueError(\"Size mismatch.\")\n", + " self.data = [[val for val in row] for row in other]\n", + "\n", + " def __str__(self):\n", + " return '\\n'.join([str(row) for row in self.data])\n", + "\n", + "# --- EXPLICIT TESTS FOR Q1 ---\n", + "print(\"--- Q1 Tests ---\")\n", + "m1 = matrix(2, 3)\n", + "assert m1.data == [[0, 0, 0], [0, 0, 0]]\n", + "m2 = matrix([[1, 2], [3, 4]])\n", + "assert m2.data == [[1, 2], [3, 4]]\n", + "\n", + "m_target = matrix(2, 2)\n", + "m_target.assign(m2)\n", + "assert m_target.data == [[1, 2], [3, 4]]\n", + "print(\"Q1 Initialization, Indexing, and Assignment tests passed!\")" ] }, { @@ -37,6 +121,100 @@ " " ] }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Q2 Tests ---\n", + "Q2 Properties and Slicing tests passed!\n" + ] + } + ], + "source": [ + "class matrix:\n", + " # --- Q1 Methods ---\n", + " def __init__(self, *args):\n", + " if len(args) == 2 and isinstance(args[0], int) and isinstance(args[1], int):\n", + " self.n, self.m = args[0], args[1]\n", + " self.data = [[0 for _ in range(self.m)] for _ in range(self.n)]\n", + " elif len(args) == 1 and isinstance(args[0], list):\n", + " input_list = args[0]\n", + " self.n, self.m = len(input_list), (len(input_list[0]) if len(input_list) > 0 else 0)\n", + " if not all(isinstance(row, list) and len(row) == self.m for row in input_list):\n", + " raise ValueError(\"All rows must have the same number of columns.\")\n", + " self.data = [[val for val in row] for row in input_list]\n", + "\n", + " def __getitem__(self, index):\n", + " # Upgraded to handle slicing. If the index contains a 'slice' object (like 0:2),\n", + " # I use list comprehensions to grab those specific chunks.\n", + " if isinstance(index, tuple):\n", + " i, j = index\n", + " if isinstance(i, slice) or isinstance(j, slice):\n", + " if isinstance(i, int): i = slice(i, i+1)\n", + " if isinstance(j, int): j = slice(j, j+1)\n", + " return matrix([row[j] for row in self.data[i]])\n", + " return self.data[i][j]\n", + " elif isinstance(index, slice):\n", + " return matrix(self.data[index])\n", + " elif isinstance(index, int):\n", + " return self.data[index]\n", + "\n", + " def __setitem__(self, index, value):\n", + " if isinstance(index, tuple): i, j = index; self.data[i][j] = value\n", + " elif isinstance(index, int): self.data[index] = value\n", + "\n", + " def assign(self, other):\n", + " if isinstance(other, matrix):\n", + " if self.shape() != other.shape(): raise ValueError(\"Size mismatch.\")\n", + " self.data = [[val for val in row] for row in other.data]\n", + " elif isinstance(other, list):\n", + " self.data = [[val for val in row] for row in other]\n", + " \n", + " def __str__(self): return '\\n'.join([str(row) for row in self.data])\n", + "\n", + " # --- Q2 New Methods ---\n", + " def shape(self):\n", + " # Simply returns the dimensions stored during init\n", + " return (self.n, self.m)\n", + "\n", + " def transpose(self):\n", + " # Swapping rows and columns to create the transposed version\n", + " t_data = [[self.data[i][j] for i in range(self.n)] for j in range(self.m)]\n", + " return matrix(t_data)\n", + "\n", + " def row(self, n):\n", + " # Wrapping the row in an extra list bracket so it becomes a 1xm matrix\n", + " return matrix([self.data[n]])\n", + "\n", + " def column(self, n):\n", + " # Grabbing the nth element of every row to build an nx1 matrix\n", + " return matrix([[self.data[i][n]] for i in range(self.n)])\n", + "\n", + " def to_list(self):\n", + " # Using a list comprehension to return a clean copy, avoiding reference bugs\n", + " return [[val for val in row] for row in self.data]\n", + "\n", + " def block(self, n_0, n_1, m_0, m_1):\n", + " # Standard Python slicing: grab rows m_0 to m_1, then slice those rows from cols n_0 to n_1\n", + " return matrix([r[n_0:n_1] for r in self.data[m_0:m_1]])\n", + "\n", + "# --- EXPLICIT TESTS FOR Q2 ---\n", + "print(\"--- Q2 Tests ---\")\n", + "m_test = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", + "assert m_test.shape() == (3, 3)\n", + "assert m_test.transpose().data == [[1, 4, 7], [2, 5, 8], [3, 6, 9]]\n", + "assert m_test.row(1).data == [[4, 5, 6]]\n", + "assert m_test.column(2).data == [[3], [6], [9]]\n", + "assert m_test.to_list() == [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n", + "assert m_test.block(1, 3, 0, 2).data == [[2, 3], [5, 6]]\n", + "print(\"Q2 Properties and Slicing tests passed!\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -47,6 +225,49 @@ " * `eye(n)`: returns the n by n identity matrix." ] }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Q3 Tests ---\n", + "Q3 Special Matrices tests passed!\n" + ] + } + ], + "source": [ + "# --- Q3 Standalone Functions ---\n", + "\n", + "def constant(n, m, c):\n", + " # Creating an n by m matrix filled with the float version of c\n", + " val = float(c)\n", + " return matrix([[val for j in range(m)] for i in range(n)])\n", + "\n", + "def zeros(n, m):\n", + " # Reusing the constant function to avoid rewriting the same loops\n", + " return constant(n, m, 0.0)\n", + "\n", + "def ones(n, m):\n", + " # Same trick, reusing constant for 1.0\n", + " return constant(n, m, 1.0)\n", + "\n", + "def eye(n):\n", + " # Building the identity matrix: 1.0 on the diagonal (where i == j), 0.0 elsewhere\n", + " return matrix([[1.0 if i == j else 0.0 for j in range(n)] for i in range(n)])\n", + "\n", + "# --- EXPLICIT TESTS FOR Q3 ---\n", + "print(\"--- Q3 Tests ---\")\n", + "assert constant(2, 2, 5).data == [[5.0, 5.0], [5.0, 5.0]]\n", + "assert zeros(2, 3).data == [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]\n", + "assert ones(2, 2).data == [[1.0, 1.0], [1.0, 1.0]]\n", + "assert eye(3).data == [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]\n", + "print(\"Q3 Special Matrices tests passed!\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -74,6 +295,142 @@ " * M=N\n" ] }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Q4 & Q5 Tests ---\n", + "Q4 Math Methods and Q5 Overloaded Operators tests passed!\n" + ] + } + ], + "source": [ + "class matrix:\n", + " # --- Q1 & Q2 Methods ---\n", + " def __init__(self, *args):\n", + " if len(args) == 2 and isinstance(args[0], int) and isinstance(args[1], int):\n", + " self.n, self.m = args[0], args[1]\n", + " self.data = [[0 for _ in range(self.m)] for _ in range(self.n)]\n", + " elif len(args) == 1 and isinstance(args[0], list):\n", + " input_list = args[0]\n", + " self.n, self.m = len(input_list), (len(input_list[0]) if len(input_list) > 0 else 0)\n", + " if not all(isinstance(row, list) and len(row) == self.m for row in input_list):\n", + " raise ValueError(\"All rows must have the same number of columns.\")\n", + " self.data = [[val for val in row] for row in input_list]\n", + "\n", + " def __getitem__(self, index):\n", + " if isinstance(index, tuple):\n", + " i, j = index\n", + " if isinstance(i, slice) or isinstance(j, slice):\n", + " if isinstance(i, int): i = slice(i, i+1)\n", + " if isinstance(j, int): j = slice(j, j+1)\n", + " return matrix([row[j] for row in self.data[i]])\n", + " return self.data[i][j]\n", + " elif isinstance(index, slice): return matrix(self.data[index])\n", + " elif isinstance(index, int): return self.data[index]\n", + "\n", + " def __setitem__(self, index, value):\n", + " if isinstance(index, tuple): i, j = index; self.data[i][j] = value\n", + " elif isinstance(index, int): self.data[index] = value\n", + "\n", + " def assign(self, other):\n", + " if isinstance(other, matrix):\n", + " if self.shape() != other.shape(): raise ValueError(\"Size mismatch.\")\n", + " self.data = [[val for val in row] for row in other.data]\n", + " elif isinstance(other, list):\n", + " self.data = [[val for val in row] for row in other]\n", + "\n", + " def shape(self): return (self.n, self.m)\n", + " def transpose(self): return matrix([[self.data[i][j] for i in range(self.n)] for j in range(self.m)])\n", + " def row(self, n): return matrix([self.data[n]])\n", + " def column(self, n): return matrix([[self.data[i][n]] for i in range(self.n)])\n", + " def to_list(self): return [[val for val in row] for row in self.data]\n", + " def block(self, n_0, n_1, m_0, m_1): return matrix([r[n_0:n_1] for r in self.data[m_0:m_1]])\n", + " def __str__(self): return '\\n'.join([str(row) for row in self.data])\n", + "\n", + " # --- Q4 Math Operations ---\n", + " def scalarmul(self, c):\n", + " return matrix([[val * c for val in row] for row in self.data])\n", + "\n", + " def add(self, N):\n", + " if self.shape() != N.shape(): raise ValueError(\"Addition error: Size mismatch.\")\n", + " return matrix([[self.data[i][j] + N.data[i][j] for j in range(self.m)] for i in range(self.n)])\n", + "\n", + " def sub(self, N):\n", + " if self.shape() != N.shape(): raise ValueError(\"Subtraction error: Size mismatch.\")\n", + " return matrix([[self.data[i][j] - N.data[i][j] for j in range(self.m)] for i in range(self.n)])\n", + "\n", + " def mat_mult(self, N):\n", + " if self.m != N.n: raise ValueError(\"Matrix multiplication error: M columns must equal N rows.\")\n", + " result_data = []\n", + " for i in range(self.n):\n", + " new_row = []\n", + " for j in range(N.m):\n", + " # taking the dot product of M's row and N's column\n", + " new_row.append(sum(self.data[i][k] * N.data[k][j] for k in range(self.m)))\n", + " result_data.append(new_row)\n", + " return matrix(result_data)\n", + "\n", + " def element_mult(self, N):\n", + " if self.shape() != N.shape(): raise ValueError(\"Element multiplication error: Size mismatch.\")\n", + " return matrix([[self.data[i][j] * N.data[i][j] for j in range(self.m)] for i in range(self.n)])\n", + "\n", + " def equals(self, N):\n", + " if not isinstance(N, matrix) or self.shape() != N.shape(): return False\n", + " return self.data == N.data\n", + "\n", + " # --- Q5 Operator Overloading ---\n", + " \n", + " # Python uses magic methods like __add__ to know what to do when you type '+'\n", + " def __add__(self, other):\n", + " return self.add(other)\n", + "\n", + " def __sub__(self, other):\n", + " return self.sub(other)\n", + "\n", + " def __mul__(self, other):\n", + " # I need to check if 'other' is a matrix or a scalar to decide which math rule to apply\n", + " if isinstance(other, matrix):\n", + " return self.mat_mult(other)\n", + " elif isinstance(other, (int, float)):\n", + " return self.scalarmul(other)\n", + "\n", + " def __rmul__(self, other):\n", + " # This handles the case where the scalar comes first, like 2 * M\n", + " return self.scalarmul(other)\n", + "\n", + " def __eq__(self, other):\n", + " # Overloads the '==' operator\n", + " return self.equals(other)\n", + " \n", + " # Note on M=N from Q5 requirements: Python physically cannot overload the '=' operator. \n", + " # So Using the assign() method implemented in Q1 to assign values without creating a reference copy.\n", + "\n", + "# --- EXPLICIT TESTS FOR Q4 & Q5 ---\n", + "print(\"--- Q4 & Q5 Tests ---\")\n", + "M1 = matrix([[1, 2], [3, 4]])\n", + "M2 = matrix([[5, 6], [7, 8]])\n", + "\n", + "# Testing Q4 explicit methods\n", + "assert M1.scalarmul(3).data == [[3, 6], [9, 12]]\n", + "assert M1.mat_mult(M2).data == [[19, 22], [43, 50]]\n", + "\n", + "# Testing Q5 overloaded operators\n", + "assert (M1 + M2).data == [[6, 8], [10, 12]]\n", + "assert (M1 - M2).data == [[-4, -4], [-4, -4]]\n", + "assert (M1 * M2).data == [[19, 22], [43, 50]]\n", + "assert (M1 * 2).data == [[2, 4], [6, 8]]\n", + "assert (2 * M1).data == [[2, 4], [6, 8]]\n", + "assert (M1 == matrix([[1, 2], [3, 4]])) == True\n", + "\n", + "print(\"Q4 Math Methods and Q5 Overloaded Operators tests passed!\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -94,6 +451,72 @@ "$$" ] }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- Q6 Mathematical Demonstrations ---\n", + "\n", + "1. Demonstrating (AB)C = A(BC)\n", + "Is it true? True\n", + "\n", + "2. Demonstrating A(B+C) = AB + AC\n", + "Is it true? True\n", + "\n", + "3. Demonstrating AB != BA\n", + "Is it true? True\n", + "\n", + "4. Demonstrating AI = A\n", + "Is it true? True\n", + "\n", + "All Q6 linear algebra properties successfully demonstrated!\n" + ] + } + ], + "source": [ + "# Create test matrices\n", + "A = matrix([[1, 2], [3, 4]])\n", + "B = matrix([[5, 6], [7, 8]])\n", + "C = matrix([[9, 10], [11, 12]])\n", + "I = eye(2) \n", + "\n", + "print(\"--- Q6 Mathematical Demonstrations ---\\n\")\n", + "\n", + "# 1. Associativity: (AB)C = A(BC)\n", + "left_side = (A * B) * C\n", + "right_side = A * (B * C)\n", + "print(\"1. Demonstrating (AB)C = A(BC)\")\n", + "print(f\"Is it true? {left_side == right_side}\\n\")\n", + "assert left_side == right_side\n", + "\n", + "# 2. Distributivity: A(B+C) = AB + AC\n", + "left_side = A * (B + C)\n", + "right_side = (A * B) + (A * C)\n", + "print(\"2. Demonstrating A(B+C) = AB + AC\")\n", + "print(f\"Is it true? {left_side == right_side}\\n\")\n", + "assert left_side == right_side\n", + "\n", + "# 3. Non-commutativity: AB != BA\n", + "AB = A * B\n", + "BA = B * A\n", + "print(\"3. Demonstrating AB != BA\")\n", + "print(f\"Is it true? {not (AB == BA)}\\n\")\n", + "assert not (AB == BA)\n", + "\n", + "# 4. Identity: AI = A\n", + "AI = A * I\n", + "print(\"4. Demonstrating AI = A\")\n", + "print(f\"Is it true? {AI == A}\\n\")\n", + "assert AI == A\n", + "\n", + "print(\"All Q6 linear algebra properties successfully demonstrated!\")" + ] + }, { "cell_type": "code", "execution_count": null, @@ -104,7 +527,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "base", "language": "python", "name": "python3" }, @@ -118,7 +541,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.12" + "version": "3.12.12" } }, "nbformat": 4, From de382cd53883c6311509c821735313a9f476566c Mon Sep 17 00:00:00 2001 From: Subham-Kalwar Date: Fri, 20 Mar 2026 19:21:52 -0500 Subject: [PATCH 4/4] Completed Lab 6 --- Labs/.DS_Store | Bin 10244 -> 10244 bytes Labs/Lab.6/.DS_Store | Bin 0 -> 6148 bytes Labs/Lab.6/Lab.6.ipynb | 1145 +++++++++++++++++++++++++++++++++++++- Labs/Lab.6/lab-6-uml.pdf | Bin 0 -> 510224 bytes 4 files changed, 1142 insertions(+), 3 deletions(-) create mode 100644 Labs/Lab.6/.DS_Store create mode 100644 Labs/Lab.6/lab-6-uml.pdf diff --git a/Labs/.DS_Store b/Labs/.DS_Store index 08a73716633baf8d931ce4a00d4b884caa729f3d..03044209e83c424eb07d8f83cbbc74f4c7359860 100644 GIT binary patch delta 153 zcmZn(XbG6$&nUhzU^hRb_+}n~n_QdU2|i<-{6xxXGM@++quFE`!G_7x!~=n>cY>x& zQZkd}CGJSa3-A|b`u9{wvSU0RXTIF=hY& delta 32 ocmZn(XbG6$&nUDpU^hRb&}JTin_QF6$XISHd&#nyUEwb~0KL8o(EtDd diff --git a/Labs/Lab.6/.DS_Store b/Labs/Lab.6/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..36125665bc7a11b23a74826a77b230d159310f11 GIT binary patch literal 6148 zcmeHLyH3ME5S)b+ks_p&l=lH(iH7{}AsLb;1)V#-if@D22gt_IQoydX zJ9m3KzGMpTodL*dzc~Yz0OoW>yl9x3uB%V%ATo+#&p5{^_IN~xW>WoqLb*q*zeP*# zkiWwQ_m|!FuI;uhtMn(n(of#ZI06>9GG;?&g9q&Jj3=~TSSwaG1C~)UqynixDv%1K z0{>J2_H4EJ!ZBkikP4&%p9<*vq0kj;VDD(J4hB8G>-tPljbpn@5KGK!VDHEknmCo{ zREaBwIGy=8k=n%k(w&LSKUC}Y?YGChZbmomt%!7dH Kl9memh63->hbXxK literal 0 HcmV?d00001 diff --git a/Labs/Lab.6/Lab.6.ipynb b/Labs/Lab.6/Lab.6.ipynb index 3bc4e512..3cc6d7a7 100755 --- a/Labs/Lab.6/Lab.6.ipynb +++ b/Labs/Lab.6/Lab.6.ipynb @@ -29,6 +29,66 @@ "1. Begin by creating a classes to represent cards and decks. The deck should support more than one 52-card set. The deck should allow you to shuffle and draw cards. Include a \"plastic\" card, placed randomly in the deck. Later, when the plastic card is dealt, shuffle the cards before the next deal." ] }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class Player:\n", + " def __init__(self, name, starting_chips=1000):\n", + " self.name = name\n", + " self.chips = starting_chips\n", + " self.hand = []\n", + " \n", + " # Storing the bet on the player object so we can easily calculate \n", + " # payouts or losses at the end of the round.\n", + " self.current_bet = 0 \n", + " \n", + " def receive_card(self, card):\n", + " self.hand.append(card)\n", + "\n", + " def calculate_score(self):\n", + " \"\"\"Calculates the best possible hand value.\"\"\"\n", + " score = 0\n", + " aces = 0\n", + " \n", + " # Logic: It's easier to assume all Aces are 11s initially. \n", + " # We can just downgrade them to 1s later if the total goes over 21.\n", + " for card in self.hand:\n", + " if card.rank in ['J', 'Q', 'K']:\n", + " score += 10\n", + " elif card.rank == 'A':\n", + " aces += 1\n", + " score += 11\n", + " else:\n", + " score += int(card.rank)\n", + " \n", + " # If we bust, check if we have an Ace we can shrink from 11 to 1.\n", + " # We subtract 10 for each Ace we convert until we are safe.\n", + " while score > 21 and aces > 0:\n", + " score -= 10\n", + " aces -= 1\n", + " \n", + " return score\n", + " \n", + " def clear_hand(self):\n", + " # Resetting for the next simulation round\n", + " self.hand = []\n", + " self.current_bet = 0\n", + "\n", + "\n", + "class Dealer(Player):\n", + " # The dealer is just a player with forced actions, so inheritance makes sense here.\n", + " def __init__(self):\n", + " super().__init__(\"Dealer\", starting_chips=0) # Dealer chips don't matter\n", + "\n", + " def should_hit(self):\n", + " # Assignment requirement: Dealer hits on 16 and stands on 17.\n", + " # Returning True means \"Hit\", False means \"Stand\".\n", + " return self.calculate_score() < 17" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -43,6 +103,153 @@ "3. Begin with implementing the skeleton (ie define data members and methods/functions, but do not code the logic) of the classes in your UML diagram." ] }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class Card:\n", + " \"\"\"Represents a single playing card.\"\"\"\n", + " def __init__(self, rank, suit):\n", + " # Storing basic card properties. \n", + " self.rank = rank\n", + " self.suit = suit\n", + "\n", + " def __str__(self):\n", + " pass\n", + "\n", + " def __repr__(self):\n", + " pass\n", + "\n", + "\n", + "class Deck:\n", + " \"\"\"Manages the shoe of multiple decks.\"\"\"\n", + " def __init__(self, num_decks=6):\n", + " self.num_decks = num_decks\n", + " # Using a list to hold Card objects so we maintain drawing order\n", + " self.cards = [] \n", + " # Flag to tell the Game loop when the plastic card was hit\n", + " self.needs_reshuffle = False \n", + "\n", + " def build_deck(self):\n", + " pass\n", + "\n", + " def shuffle(self):\n", + " pass\n", + "\n", + " def draw(self):\n", + " pass\n", + "\n", + "\n", + "class Player:\n", + " def __init__(self, name, strategy=\"Human\", starting_chips=1000):\n", + " self.name = name\n", + " self.chips = starting_chips\n", + " self.current_bet = 0\n", + " self.hand = []\n", + " self.strategy = strategy \n", + "\n", + " def receive_card(self, card):\n", + " self.hand.append(card)\n", + "\n", + " def calculate_score(self):\n", + " score = 0\n", + " aces = 0\n", + " \n", + " for card in self.hand:\n", + " if card.rank in ['J', 'Q', 'K']:\n", + " score += 10\n", + " elif card.rank == 'A':\n", + " aces += 1\n", + " score += 11\n", + " else:\n", + " score += int(card.rank)\n", + " \n", + " while score > 21 and aces > 0:\n", + " score -= 10\n", + " aces -= 1\n", + " \n", + " return score\n", + "\n", + " def clear_hand(self):\n", + " self.hand = []\n", + " self.current_bet = 0\n", + "\n", + " def place_bet(self):\n", + " \"\"\"Routes betting logic based on player strategy.\"\"\"\n", + " if self.strategy == \"Human\":\n", + " while True:\n", + " try:\n", + " bet = int(input(f\"{self.name}, you have {self.chips} chips. Enter bet: \"))\n", + " if 0 < bet <= self.chips:\n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + " break\n", + " else:\n", + " print(\"Invalid amount. Must be greater than 0.\")\n", + " except ValueError:\n", + " print(\"Please enter a valid number.\")\n", + " else:\n", + " # Automated bot logic: Always bet 10 chips to keep the simulation simple\n", + " if self.chips > 0:\n", + " bet = 10 if self.chips >= 10 else self.chips\n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + "\n", + " def decide_action(self, dealer_upcard, true_count):\n", + " \"\"\"Routes hitting/standing logic based on player strategy.\"\"\"\n", + " if self.strategy == \"Human\":\n", + " while True:\n", + " choice = input(f\"Your score is {self.calculate_score()}. Hit or Stand? (h/s): \").lower()\n", + " if choice in ['h', 's']:\n", + " return \"Hit\" if choice == 'h' else \"Stand\"\n", + " print(\"Invalid input. Please type 'h' or 's'.\")\n", + " \n", + " elif self.strategy == \"Dealer\":\n", + " # Dealer bots ignore the true_count and just hit if under 17\n", + " if self.calculate_score() < 17:\n", + " return \"Hit\"\n", + " return \"Stand\"\n", + "\n", + "\n", + "class Dealer(Player):\n", + " \"\"\"The dealer is a specific type of player with fixed rules.\"\"\"\n", + " def __init__(self):\n", + " # Calling the parent Player __init__, but hardcoding the name and strategy.\n", + " # Dealers don't need chips, so we set it to 0.\n", + " super().__init__(name=\"Dealer\", strategy=\"Fixed Rules\", starting_chips=0)\n", + "\n", + " def should_hit(self):\n", + " # This will override normal player logic since the dealer must hit on 16.\n", + " pass\n", + "\n", + "\n", + "class Game:\n", + " \"\"\"The central controller that runs the simulation.\"\"\"\n", + " def __init__(self, num_players=1, decks_in_shoe=6):\n", + " # Aggregating our other classes here to build the actual table environment\n", + " self.deck = Deck(num_decks=decks_in_shoe)\n", + " self.dealer = Dealer()\n", + " self.players = []\n", + " \n", + " # Tracking the global card counting state\n", + " self.running_count = 0\n", + " self.true_count = 0.0\n", + "\n", + " def update_count(self, card):\n", + " # This will adjust the running_count based on the drawn card's value\n", + " pass\n", + "\n", + " def play_round(self):\n", + " # This will handle the sequence: bets -> deal -> player turns -> dealer turn -> payouts\n", + " pass\n", + "\n", + " def run_simulation(self, num_games):\n", + " # The main loop to run play_round() thousands of times for our data analysis\n", + " pass" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -50,6 +257,225 @@ "4. Complete the implementation by coding the logic of all functions. For now, just implement the dealer player and human player." ] }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "\n", + "class Card:\n", + " def __init__(self, rank, suit):\n", + " self.rank = rank\n", + " self.suit = suit\n", + " def __str__(self): return f\"{self.rank} of {self.suit}\"\n", + " def __repr__(self): return self.__str__()\n", + "\n", + "class Deck:\n", + " suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']\n", + " ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']\n", + "\n", + " def __init__(self, num_decks=6):\n", + " self.num_decks = num_decks\n", + " self.cards = []\n", + " self.needs_reshuffle = False\n", + " self.build_deck()\n", + " self.shuffle()\n", + "\n", + " def build_deck(self):\n", + " self.cards = [Card(rank, suit) for _ in range(self.num_decks) for suit in self.suits for rank in self.ranks]\n", + "\n", + " def shuffle(self):\n", + " random.shuffle(self.cards)\n", + " self.needs_reshuffle = False\n", + " total_cards = len(self.cards)\n", + " insert_idx = random.randint(total_cards // 2, int(total_cards * 0.85))\n", + " self.cards.insert(insert_idx, \"PLASTIC_CARD\")\n", + "\n", + " def draw(self):\n", + " if not self.cards:\n", + " self.build_deck()\n", + " self.shuffle()\n", + " drawn_item = self.cards.pop(0)\n", + " if drawn_item == \"PLASTIC_CARD\":\n", + " self.needs_reshuffle = True\n", + " return self.draw()\n", + " return drawn_item\n", + "\n", + "class Player:\n", + " def __init__(self, name, strategy=\"Human\", starting_chips=1000):\n", + " self.name = name\n", + " self.chips = starting_chips\n", + " self.current_bet = 0\n", + " self.hand = []\n", + " self.strategy = strategy \n", + "\n", + " def receive_card(self, card):\n", + " self.hand.append(card)\n", + "\n", + " def calculate_score(self):\n", + " score = 0\n", + " aces = 0\n", + " for card in self.hand:\n", + " if card.rank in ['J', 'Q', 'K']: score += 10\n", + " elif card.rank == 'A':\n", + " aces += 1\n", + " score += 11\n", + " else: score += int(card.rank)\n", + " \n", + " while score > 21 and aces > 0:\n", + " score -= 10\n", + " aces -= 1\n", + " return score\n", + "\n", + " def clear_hand(self):\n", + " self.hand = []\n", + " self.current_bet = 0\n", + "\n", + " def place_bet(self, true_count=0.0):\n", + " if self.chips <= 0:\n", + " self.current_bet = 0\n", + " return \n", + "\n", + " if self.strategy == \"Human\":\n", + " while True:\n", + " try:\n", + " bet = int(input(f\"{self.name}, you have {self.chips} chips. Enter bet: \"))\n", + " if 0 < bet <= self.chips:\n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + " break\n", + " else: print(\"Invalid amount.\")\n", + " except ValueError: print(\"Please enter a valid number.\")\n", + " elif self.strategy == \"Counter\":\n", + " if true_count >= 2.0: bet = 50 if self.chips >= 50 else self.chips\n", + " else: bet = 10 if self.chips >= 10 else self.chips\n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + " else:\n", + " bet = 10 if self.chips >= 10 else self.chips\n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + "\n", + " # CRITICAL FIX: The base player now officially accepts running_count\n", + " def decide_action(self, dealer_upcard, true_count, running_count=0):\n", + " if self.strategy == \"Human\":\n", + " while True:\n", + " choice = input(f\"Your score is {self.calculate_score()}. Hit or Stand? (h/s): \").lower()\n", + " if choice in ['h', 's']: return \"Hit\" if choice == 'h' else \"Stand\"\n", + " print(\"Invalid input.\")\n", + " elif self.strategy == \"Dealer\":\n", + " if self.calculate_score() < 17: return \"Hit\"\n", + " return \"Stand\"\n", + " elif self.strategy == \"Counter\":\n", + " dealer_val = 10 if dealer_upcard.rank in ['J', 'Q', 'K', 'A'] else int(dealer_upcard.rank)\n", + " score = self.calculate_score()\n", + " if score >= 17: return \"Stand\"\n", + " elif score >= 12 and dealer_val <= 6: return \"Stand\"\n", + " else: return \"Hit\"\n", + "\n", + "class Dealer(Player):\n", + " def __init__(self):\n", + " super().__init__(name=\"Dealer\", strategy=\"Fixed Rules\", starting_chips=0)\n", + " def should_hit(self):\n", + " return self.calculate_score() < 17\n", + "\n", + "class Lab6Player(Player):\n", + " def __init__(self, name, starting_chips=1000, hit_threshold=-1):\n", + " super().__init__(name=name, strategy=\"Count_Action\", starting_chips=starting_chips)\n", + " self.hit_threshold = hit_threshold\n", + "\n", + " def decide_action(self, dealer_upcard, true_count, running_count=0):\n", + " if self.calculate_score() >= 21: return \"Stand\"\n", + " if running_count <= self.hit_threshold: return \"Hit\"\n", + " else: return \"Stand\"\n", + "\n", + "class Game:\n", + " def __init__(self, players_list, decks_in_shoe=6, verbose=True):\n", + " self.deck = Deck(num_decks=decks_in_shoe)\n", + " self.dealer = Dealer()\n", + " self.players = players_list \n", + " self.running_count = 0\n", + " self.true_count = 0.0\n", + " self.verbose = verbose \n", + "\n", + " def update_count(self, card):\n", + " if card.rank in ['2', '3', '4', '5', '6']: self.running_count += 1\n", + " elif card.rank in ['10', 'J', 'Q', 'K', 'A']: self.running_count -= 1\n", + " decks_remaining = max(1, len(self.deck.cards) / 52)\n", + " self.true_count = self.running_count / decks_remaining\n", + "\n", + " def deal_and_count(self, person):\n", + " card = self.deck.draw()\n", + " self.update_count(card)\n", + " person.receive_card(card)\n", + "\n", + " def play_round(self):\n", + " if self.verbose: print(\"\\n--- NEW ROUND ---\")\n", + " if self.deck.needs_reshuffle:\n", + " if self.verbose: print(\"Dealer is shuffling the shoe...\")\n", + " self.deck.build_deck()\n", + " self.deck.shuffle()\n", + " self.running_count = 0 \n", + " self.true_count = 0.0\n", + "\n", + " for player in self.players: \n", + " if player.chips > 0: player.place_bet(self.true_count)\n", + "\n", + " for _ in range(2):\n", + " for player in self.players: \n", + " if player.current_bet > 0: self.deal_and_count(player)\n", + " self.deal_and_count(self.dealer)\n", + "\n", + " if self.verbose: print(f\"Dealer shows: {self.dealer.hand[0]} (Hidden Card)\")\n", + "\n", + " for player in self.players:\n", + " if player.current_bet == 0: continue\n", + " if self.verbose: print(f\"\\n{player.name}'s turn. Hand: {player.hand}\")\n", + " while player.calculate_score() < 21:\n", + " action = player.decide_action(self.dealer.hand[0], self.true_count, self.running_count)\n", + " if action == \"Hit\":\n", + " self.deal_and_count(player)\n", + " if self.verbose: print(f\"Drew a card. Hand: {player.hand}\")\n", + " else: break\n", + " if player.calculate_score() > 21 and self.verbose: print(f\"{player.name} BUSTS!\")\n", + "\n", + " if self.verbose: print(f\"\\nDealer's turn. Hand reveals: {self.dealer.hand}\")\n", + " while self.dealer.should_hit():\n", + " self.deal_and_count(self.dealer)\n", + " if self.verbose: print(f\"Dealer hits. Hand: {self.dealer.hand}\")\n", + "\n", + " dealer_score = self.dealer.calculate_score()\n", + "\n", + " for player in self.players:\n", + " if player.current_bet == 0: continue\n", + " player_score = player.calculate_score()\n", + " if player_score <= 21:\n", + " if dealer_score > 21 or player_score > dealer_score:\n", + " player.chips += (player.current_bet * 2)\n", + " if self.verbose: print(f\"{player.name} WINS!\")\n", + " elif player_score == dealer_score:\n", + " player.chips += player.current_bet\n", + " if self.verbose: print(f\"{player.name} PUSHES.\")\n", + " else: \n", + " if self.verbose: print(f\"{player.name} LOSES.\")\n", + " else:\n", + " if self.verbose: print(f\"{player.name} LOSES.\")\n", + " player.clear_hand()\n", + " \n", + " self.dealer.clear_hand()\n", + "\n", + " def run_simulation(self, num_games=1, target_player_name=None):\n", + " for i in range(1, num_games + 1):\n", + " if target_player_name:\n", + " target_player = next((p for p in self.players if p.name == target_player_name), None)\n", + " if target_player and target_player.chips <= 0:\n", + " print(f\"Simulation stopped early at round {i}: {target_player.name} is out of money!\")\n", + " break\n", + " self.play_round()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -57,6 +483,128 @@ "5. Test. Demonstrate game play. For example, create a game of several dealer players and show that the game is functional through several rounds." ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def place_bet(self):\n", + " \"\"\"Handles betting for both humans and computer players.\"\"\"\n", + " if self.strategy == \"Human\":\n", + " # ... (Keep your existing human input loop here) ...\n", + " pass\n", + " else:\n", + " # Logic: Automated testing. Computer players bet a flat 10 chips \n", + " # so we can easily track their win/loss rate over time.\n", + " if self.chips > 0:\n", + " bet = 10 if self.chips >= 10 else self.chips\n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + "\n", + "def decide_action(self, dealer_upcard, true_count, running_count=0):\n", + " \"\"\"Routes the decision based on the player's assigned strategy.\"\"\"\n", + " if self.strategy == \"Human\":\n", + " # ... (Keep your existing human input loop here) ...\n", + " pass\n", + " elif self.strategy == \"Dealer\":\n", + " # Logic: These players mimic the dealer. They ignore the true_count \n", + " # and dealer_upcard, and simply hit if they are under 17.\n", + " if self.calculate_score() < 17:\n", + " return \"Hit\"\n", + " return \"Stand\"\n", + " \n", + "def __init__(self, players_list, decks_in_shoe=6):\n", + " self.deck = Deck(num_decks=decks_in_shoe)\n", + " self.dealer = Dealer()\n", + " \n", + " # Logic: Instead of hardcoding one human, we pass a list of Player objects\n", + " # so we can test different table compositions (e.g., 3 bots, 1 human).\n", + " self.players = players_list \n", + " \n", + " self.running_count = 0\n", + " self.true_count = 0.0" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting automated test for 3 rounds...\n", + "\n", + "\n", + "--- NEW ROUND ---\n", + "Dealer shows: 4 of Diamonds (Hidden Card)\n", + "\n", + "Bot Alice's turn. Hand: [4 of Clubs, J of Spades]\n", + "\n", + "Bot Bob's turn. Hand: [4 of Diamonds, 2 of Spades]\n", + "\n", + "Bot Charlie's turn. Hand: [9 of Diamonds, 6 of Spades]\n", + "\n", + "Dealer's turn. Hand reveals: [4 of Diamonds, 4 of Clubs]\n", + "Dealer hits. Hand: [4 of Diamonds, 4 of Clubs, 2 of Diamonds]\n", + "Dealer hits. Hand: [4 of Diamonds, 4 of Clubs, 2 of Diamonds, 5 of Clubs]\n", + "Dealer hits. Hand: [4 of Diamonds, 4 of Clubs, 2 of Diamonds, 5 of Clubs, J of Hearts]\n", + "\n", + "--- NEW ROUND ---\n", + "Dealer shows: A of Hearts (Hidden Card)\n", + "\n", + "Bot Alice's turn. Hand: [6 of Clubs, 9 of Spades]\n", + "\n", + "Bot Bob's turn. Hand: [K of Spades, 6 of Hearts]\n", + "\n", + "Bot Charlie's turn. Hand: [2 of Diamonds, 6 of Diamonds]\n", + "\n", + "Dealer's turn. Hand reveals: [A of Hearts, A of Clubs]\n", + "Dealer hits. Hand: [A of Hearts, A of Clubs, Q of Hearts]\n", + "Dealer hits. Hand: [A of Hearts, A of Clubs, Q of Hearts, 7 of Spades]\n", + "\n", + "--- NEW ROUND ---\n", + "Dealer shows: 6 of Clubs (Hidden Card)\n", + "\n", + "Bot Alice's turn. Hand: [A of Spades, Q of Hearts]\n", + "\n", + "Bot Bob's turn. Hand: [9 of Clubs, 6 of Diamonds]\n", + "\n", + "Bot Charlie's turn. Hand: [9 of Spades, K of Clubs]\n", + "\n", + "Dealer's turn. Hand reveals: [6 of Clubs, 2 of Spades]\n", + "Dealer hits. Hand: [6 of Clubs, 2 of Spades, Q of Clubs]\n", + "\n", + "--- FINAL CHIP COUNTS ---\n", + "Bot Alice: 1800 chips\n", + "Bot Bob: 0 chips\n", + "Bot Charlie: 1800 chips\n" + ] + } + ], + "source": [ + "# --- SIMULATION TEST ---\n", + "\n", + "# 1. Create our automated players\n", + "bot_1 = Player(name=\"Bot Alice\", strategy=\"Dealer\", starting_chips=1000)\n", + "bot_2 = Player(name=\"Bot Bob\", strategy=\"Dealer\", starting_chips=1000)\n", + "bot_3 = Player(name=\"Bot Charlie\", strategy=\"Dealer\", starting_chips=1000)\n", + "\n", + "# 2. Initialize the game with these players\n", + "test_table = Game(players_list=[bot_1, bot_2, bot_3], decks_in_shoe=6)\n", + "\n", + "# 3. Run a short simulation to prove it works\n", + "print(\"Starting automated test for 3 rounds...\\n\")\n", + "test_table.run_simulation(num_games=3)\n", + "\n", + "# 4. Print final results to verify chips updated correctly\n", + "print(\"\\n--- FINAL CHIP COUNTS ---\")\n", + "for p in test_table.players:\n", + " print(f\"{p.name}: {p.chips} chips\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -71,6 +619,66 @@ " * Hit if sum is very negative, stay if sum is very positive. Select a threshold for hit/stay, e.g. 0 or -2. " ] }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "class Lab6Player(Player):\n", + " def __init__(self, name, starting_chips=1000, hit_threshold=-1):\n", + " # Call the parent __init__ to set up the hand, chips, etc.\n", + " super().__init__(name=name, strategy=\"Count_Action\", starting_chips=starting_chips)\n", + " \n", + " # Storing the threshold so we can easily test different values later (like 0 or -2)\n", + " self.hit_threshold = hit_threshold\n", + "\n", + " def decide_action(self, dealer_upcard, true_count, running_count=0):\n", + " \"\"\"\n", + " LAB 6 STRATEGY: \n", + " Ignore the dealer's card and our own hand score (mostly).\n", + " Hit if the sum is very negative, stay if very positive.\n", + " \"\"\"\n", + " # Absolute safeguard: It is mathematically useless to hit on a 21 or higher.\n", + " if self.calculate_score() >= 21:\n", + " return \"Stand\"\n", + " \n", + " # The core Lab 6 logic: Compare the running count sum to our threshold\n", + " if running_count <= self.hit_threshold:\n", + " return \"Hit\"\n", + " else:\n", + " return \"Stand\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "--- NEW ROUND ---\n", + "Dealer shows: 10 of Diamonds (Hidden Card)\n", + "\n", + "Q6 Bot's turn. Hand: [J of Spades, 6 of Diamonds]\n", + "Drew a card. Hand: [J of Spades, 6 of Diamonds, 3 of Hearts]\n", + "\n", + "Dealer's turn. Hand reveals: [10 of Diamonds, Q of Clubs]\n", + "Q6 Bot LOSES.\n" + ] + } + ], + "source": [ + "count_bot = Lab6Player(name=\"Q6 Bot\", hit_threshold=-2)\n", + "\n", + "# Load it into a game and play just ONE round to see the prints\n", + "q6_table = Game(players_list=[count_bot], decks_in_shoe=6)\n", + "q6_table.run_simulation(num_games=1)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -78,6 +686,159 @@ "7. Create a test scenario where one player, using the above strategy, is playing with a dealer and 3 other players that follow the dealer's strategy. Each player starts with same number of chips. Play 50 rounds (or until the strategy player is out of money). Compute the strategy player's winnings. You may remove unnecessary printouts from your code (perhaps implement a verbose/quiet mode) to reduce the output." ] }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "class Game:\n", + " # 1. Added the verbose parameter here\n", + " def __init__(self, players_list, decks_in_shoe=6, verbose=True):\n", + " self.deck = Deck(num_decks=decks_in_shoe)\n", + " self.dealer = Dealer()\n", + " self.players = players_list \n", + " self.running_count = 0\n", + " self.true_count = 0.0\n", + " self.verbose = verbose \n", + "\n", + " def update_count(self, card):\n", + " if card.rank in ['2', '3', '4', '5', '6']: self.running_count += 1\n", + " elif card.rank in ['10', 'J', 'Q', 'K', 'A']: self.running_count -= 1\n", + " decks_remaining = max(1, len(self.deck.cards) / 52)\n", + " self.true_count = self.running_count / decks_remaining\n", + "\n", + " def deal_and_count(self, person):\n", + " card = self.deck.draw()\n", + " self.update_count(card)\n", + " person.receive_card(card)\n", + "\n", + " def play_round(self):\n", + " # 2. Wrapped print statements in \"if self.verbose:\" checks\n", + " if self.verbose: print(\"\\n--- NEW ROUND ---\")\n", + " \n", + " if self.deck.needs_reshuffle:\n", + " if self.verbose: print(\"Dealer is shuffling the shoe...\")\n", + " self.deck.build_deck()\n", + " self.deck.shuffle()\n", + " self.running_count = 0 \n", + " self.true_count = 0.0\n", + "\n", + " for player in self.players: \n", + " player.place_bet(self.true_count)\n", + "\n", + " for _ in range(2):\n", + " for player in self.players: self.deal_and_count(player)\n", + " self.deal_and_count(self.dealer)\n", + "\n", + " if self.verbose: print(f\"Dealer shows: {self.dealer.hand[0]} (Hidden Card)\")\n", + "\n", + " for player in self.players:\n", + " if self.verbose: print(f\"\\n{player.name}'s turn. Hand: {player.hand}\")\n", + " while player.calculate_score() < 21:\n", + " action = player.decide_action(self.dealer.hand[0], self.true_count, self.running_count)\n", + " if action == \"Hit\":\n", + " self.deal_and_count(player)\n", + " if self.verbose: print(f\"Drew a card. Hand: {player.hand}\")\n", + " else: break\n", + " if player.calculate_score() > 21:\n", + " if self.verbose: print(f\"{player.name} BUSTS!\")\n", + "\n", + " if self.verbose: print(f\"\\nDealer's turn. Hand reveals: {self.dealer.hand}\")\n", + " while self.dealer.should_hit():\n", + " self.deal_and_count(self.dealer)\n", + " if self.verbose: print(f\"Dealer hits. Hand: {self.dealer.hand}\")\n", + "\n", + " dealer_score = self.dealer.calculate_score()\n", + "\n", + " for player in self.players:\n", + " player_score = player.calculate_score()\n", + " if player_score <= 21:\n", + " if dealer_score > 21 or player_score > dealer_score:\n", + " player.chips += (player.current_bet * 2)\n", + " if self.verbose: print(f\"{player.name} WINS!\")\n", + " elif player_score == dealer_score:\n", + " player.chips += player.current_bet\n", + " if self.verbose: print(f\"{player.name} PUSHES.\")\n", + " else: \n", + " if self.verbose: print(f\"{player.name} LOSES.\")\n", + " else:\n", + " if self.verbose: print(f\"{player.name} LOSES.\")\n", + " player.clear_hand()\n", + " \n", + " self.dealer.clear_hand()\n", + "\n", + " # 3. Updated simulation loop to check for bankruptcy\n", + " def run_simulation(self, num_games=1, target_player_name=None):\n", + " for i in range(1, num_games + 1):\n", + " # If a target player is provided, check if they are broke before dealing\n", + " if target_player_name:\n", + " target_player = next((p for p in self.players if p.name == target_player_name), None)\n", + " if target_player and target_player.chips <= 0:\n", + " print(f\"Simulation stopped early at round {i}: {target_player.name} is out of money!\")\n", + " break\n", + " \n", + " self.play_round()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting 50-round simulation... (Quiet Mode Active)\n", + "\n", + "--- FINAL RESULTS AFTER 50 ROUNDS ---\n", + "Dealer Bot 1:\n", + " Ending Chips: 930\n", + " Net Winnings: -70 chips\n", + "\n", + "Dealer Bot 2:\n", + " Ending Chips: 830\n", + " Net Winnings: -170 chips\n", + "\n", + "Dealer Bot 3:\n", + " Ending Chips: 950\n", + " Net Winnings: -50 chips\n", + "\n", + "Strategy Player:\n", + " Ending Chips: 790\n", + " Net Winnings: -210 chips\n", + "\n" + ] + } + ], + "source": [ + "# --- STEP 7: TEST SCENARIO ---\n", + "\n", + "# 1. Create the players (Each starts with exactly 1000 chips)\n", + "bot_1 = Player(name=\"Dealer Bot 1\", strategy=\"Dealer\", starting_chips=1000)\n", + "bot_2 = Player(name=\"Dealer Bot 2\", strategy=\"Dealer\", starting_chips=1000)\n", + "bot_3 = Player(name=\"Dealer Bot 3\", strategy=\"Dealer\", starting_chips=1000)\n", + "\n", + "# The Lab 6 Strategy Player. We will use a threshold of 0 for this test.\n", + "strat_player = Lab6Player(name=\"Strategy Player\", starting_chips=1000, hit_threshold=0)\n", + "\n", + "# 2. Initialize the game table. Note that we set verbose=False!\n", + "q7_table = Game(players_list=[bot_1, bot_2, bot_3, strat_player], decks_in_shoe=6, verbose=False)\n", + "\n", + "# 3. Play 50 rounds, targeting our Strategy Player for the bankruptcy check\n", + "print(\"Starting 50-round simulation... (Quiet Mode Active)\\n\")\n", + "q7_table.run_simulation(num_games=50, target_player_name=\"Strategy Player\")\n", + "\n", + "# 4. Compute and print the final winnings\n", + "print(\"--- FINAL RESULTS AFTER 50 ROUNDS ---\")\n", + "for p in q7_table.players:\n", + " winnings = p.chips - 1000\n", + " print(f\"{p.name}:\")\n", + " print(f\" Ending Chips: {p.chips}\")\n", + " print(f\" Net Winnings: {winnings} chips\\n\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -85,6 +846,122 @@ "8. Create a loop that runs 100 games of 50 rounds, as setup in previous question, and store the strategy player's chips at the end of the game (aka \"winnings\") in a list. Histogram the winnings. What is the average winnings per round? What is the standard deviation. What is the probabilty of net winning or lossing after 50 rounds?\n" ] }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running 100 games of 50 rounds each... Please wait.\n", + "\n", + "--- FINAL STATISTICAL REPORT ---\n", + "Average Winnings (Per 50-Round Game): -208.60 chips\n", + "Average Winnings (PER ROUND): -4.17 chips\n", + "Standard Deviation of Winnings: 67.25 chips\n", + "Probability of a Net Win: 0.0%\n", + "Probability of a Net Loss: 100.0%\n", + "Probability of Breaking Even: 0.0%\n", + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAIzCAYAAAA+gOlQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAerhJREFUeJzt3Qd4VNX29/EVIIQWeg9FFBCVLopdiqCioGJXFDtc5aqAYpemYOWiomC7CBawK1ZEEUSsgCgiCCJSQpcWaoDM+/z2fU/+MycTSELizEm+n+cZhzlzZmbPnpPxrNlrr50QCoVCBgAAAADIVOz//gkAAAAAIFACAAAAgCgYUQIAAAAAHwIlAAAAAPAhUAIAAAAAHwIlAAAAAPAhUAIAAAAAHwIlAAAAAPAhUAIAAAAAHwIlAPbSSy9ZQkKCzZo1K2pvnH322XbIIYdEbNPtq666Kle9980339igQYNs8+bN9HoOvf7663bUUUdZ6dKl3Wc0d+7cqPtNmzbN3f/WW2/lS9/q89XnfjC2b99u999/vzVu3NiSkpKsSpUq1r59e1u8ePEBH/v333/bXXfdZUceeaSVLVvWKlSoYE2aNLErrrjCfvnll3/smHrttdds5MiRFu/++usv9/l7l2LFirn+7tKli3377bcR++p+9VnQ6HhMTk62vXv3Rmz/6aef3HuqVatWlsfMmDHD3ffkk0+62/rO8n+XFYS8fD8CiD8lYt0AAMH07rvvWvny5XP1GJ3UDh482J1AVKxYscDaVlisX7/eBQZnnHGGPfPMMy7YUNARBNu2bXNB0apVq+zOO++05s2b25YtW9wxsGPHjgM+9rjjjnPXt99+u7Vo0cJ27txpixYtsnfeeccFi3q+f+KYUqD066+/2q233mpB8O9//9suu+wy27dvn82fP9/1jT4HBUutWrWyINP7+Oijj9wPOjo+wn8kUDC9Zs0aW7hwoQuow+/zHiv33Xef3XLLLXH5/Qgg/hAoAciTIJ507dmzx/26XKJEML76FBiozT169LBTTz3VguTee++1BQsWuNGfQw89NHN7t27dDvjYN9980/744w+bOnVq5gmup1+/fpaRkZHnding0uhcYVWvXr3MIOLEE0+0hg0bWseOHV2g/fzzz1u8C4VCtmvXrqifkXcsKPjxB0rnnHOOffnll+7iD5SqVq1qTZs2dbcPO+ywf+R9BPH7EUBWpN4ByJfUEp28PvDAA3b44Ye7kxz9uq9f/Z944gl3v1J9NDogDRo0yEwR8n7x1eMfeeQRd5KjkZPq1avblVdeaStXrsxyIjVs2DCrX7++lSpVytq0aWNTpkyxdu3auYs/Fe3ll1+2/v37W0pKintenYBrpObGG290aV3lypVzr9WhQweXphMtnenRRx+1hx9+2L1nvTe9jhfEaLSkdu3aLjXsvPPOs3Xr1uWo/yZNmmTHH3+8lSlTxqUTderUKSJFSn170kknuX9ffPHFrh3h7y+vNMLQtm1bq1y5svvFu3Xr1vbiiy+6fs3ul3F9juprBTxeCtP+aMTohRdesAsvvDAiSMoppd1JtFQqUVpZTo4pL31Qo1A6cdV70PuXp59+2k455RT32Ws0olmzZu7402fqUX9rBGPZsmURaW2e9PR0d8x7x2y1atXs6quvdsdXuN27d7tjsGbNmu7z1uvOnj074m9Ix5oC+OHDh2d5v1999ZV7XQWQueUFFHoP2cnJ34OOj0aNGtnpp5+e5fEa+dPxf9NNN2Vu27p1q912223ucylZsqT7+9OonNIxw+l99enTx8aMGWNHHHGE68dx48ZFbWfLli2tUqVKmZ+v972hduqz0o8JCpTCPx/9Tek+73OLlnrntUHfFWqDPiONYn744YcR++l4074aqbv00kvde65Ro4Zdc801brR0f9+P3vfRhAkT7J577nHfGfr7O+200+z333/P03fcgb5zARy8YPysCuAfoXQdf/6/ZHcSHU4nmTqR0EiCTgR1wqk0GG/uyHXXXWcbN260p556yp24eifBOjmTf/3rX/bcc8+5Exad3OrEUWkyOsGYM2eO+1VYdJKhk8kbbrjBunfvbitWrHDPrdeLlpameS4KSHQiphNsnQR6J7IDBw50J6860VNAoJOQL774IktAopNqnYDoWu9HJ71du3Z1AUdiYqL997//dSeiOjFUWxQEHSid6/LLL7fOnTu7EyedSKv/vNdXgKT3fuyxx7qTT5006df0/EjlUb/26tXLjTzId99959K1UlNT3XyicEpx08mtPlf106uvvurSlnQCqveaHQUBOiHWibU+14kTJ7rb6kMFKmedddZ+26jPSxQo33333XbyySe7+TZ+BzqmRMeORrZ0XOqkXUGRLFmyxKWoeSfyP//8sz344IPumNXnKRqF0XGmfXV8hNNJqkYxdJI+YMAAO+GEE9wxoGNKn6PSw7xREQVPmmum/RSA/Pbbby6oVjARfmKt0TYdp9qvePHimfeNGjXKnVjrMbmlHwZEQVx21IcH+nvQSb6OEx0PmmOmz9Yzfvx49168QEmBsoIW/cihz0+fu4ILHV/z5s2zzz//PCLgfO+991w/6n69vv5Go9Hfr75b9Hh9Tymw1DG6adMm93r6/tJ78OjY1giif1QyGgXEP/74ow0ZMsQFi/p7VH8riPEH++eff7778eLaa69170ffMeIdN/uj/tBIn35IUJ/dcccd7rtEx6j3mef0O+5A37kA8kEIQJE3duxYRUL7vdSvXz+in3S7Z8+embfPPvvsUMuWLffbl48++qh7rqVLl0ZsX7Bggdt+4403Rmz//vvv3fa7777b3d64cWMoKSkpdPHFF0fs9+2337r9Tj311MxtX375pdt2yimnHPDz3bt3b2jPnj2hjh07hs4777zM7WqnnqNFixahffv2ZW4fOXKk296tW7eI57n11lvd9i1btmT7Wnqe2rVrh5o1axbxnGlpaaHq1auHTjjhhCzv4c033zzge8jNvuFt0fseMmRIqEqVKqGMjIyIzzchISE0d+7ciMd06tQpVL58+dD27duzfd4JEya4tmi/E088MTRp0qTQhx9+GGrfvr17zk8//fSAbVObSpYsmXn8NWjQINS7d+/Qzz//nKNjynsPxYsXD/3+++856ofx48e7/XWcec4666wsx374e3z77bcjtv/4449u+zPPPONuz58/392+4447oj4+/G/I+wzffffdzG2pqamhEiVKhAYPHrzf9+Adqw8//LB7L7t27QrNnj07dMwxx7jtH330Uea+uj1w4MBc/z1s3bo1lJycHLrlllsi9j/yyCPdZ+sZPnx4qFixYq4vwr311lvutT/++OOItlSoUCGiz/fH+9v75ptv3O3HH388VKtWLffv3377zd3366+/utvqM93Wdo/62/95ap8aNWq49+dZs2aNew96Lx71mfZ95JFHIh6v761SpUpl+fuJ9tl26dIl4rFvvPGG267vsNx+x+XkOxfAwSH1DkDEL8P6VdV/8VLA9kejH/pVXik8kydPjvi1/EC8dBl/lSg9p1Jh9Ku29wuxRl8uuuiiLOlF2VWy0q+/0eiXe6WdKbVFv0xrZEiv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57zqqqvs3HPPzdfnBAAAQOFFoBRAOulXMNG7d+8s9914443uPu0TSwsXLnTt+P777yO2t23b1pKSkiKqDGqumOaIPae0GjNXhfDMM8/M1/Y88cQT9tJLL1m801yea6+91ho0aGClS5e2ww47zAYOHOj6KNzy5cuta9euVrZsWatatardfPPNWfaZPHmyHXfccZacnOzmCZ1//vmueMmBfPTRR+5z0uvrubt3757r1wYAAAg6AqWAUgGKiRMn2s6dOzO37dq1yyZMmGD16tWzWGvSpInVqlXLvvzyy8xt27Zts59++smqV69u33zzTeZ2BVN6H+3bt3e3a9as6YKp/FShQgWrWLGixTsFmCow8uyzz9r8+fPtP//5j40ZM8buvvvuzH203tdZZ51l27dvt6+//todB2+//bb1798/c58///zTzjnnHOvQoYPNnTvXBU0bNmzIEvT46XmuuOIKu/rqq+3nn3+2mTNn2mWXXZar1wYAACgMCJQCqnXr1i4geueddzK36d8KoFq1apWlRPMjjzxihx56qBslaNGihb311lsRJ7/hoxiHH364G4GJlrr22GOPuQCoSpUqdtNNN7lKZtlp166dTZs2LfP2jBkzrHHjxtatW7eI7fp3SkqKKx/tT73TCItu670pkNLIk9r/7bffZj5eI0UKghQMHHHEEW69njPOOMONTPnbH942jYQMGDDAKleu7IKzQYMGZQlaTjrpJCtVqpQdeeSR9vnnn0e0TaMoffr0cf2hfQ455BAbPny4HQy1e+zYsda5c2f3eamvbrvttojP+bPPPrPffvvNXnnlFfdZn3baafb444/b888/b1u3bnX7zJkzx32uDzzwgBuV0vGi51Hwk91npkWXb7nlFnv00UfdaKU+Kx0LF1xwQa5eGwAAoDAgUAow/eqvk2rPf//7X7vmmmuy7Hfvvfe6/UaPHu1GKfr27Ws9evSw6dOnu/s1gqEFQd944w13Enz//fe7EQzdDqfRoSVLlrjrcePGuQBlf+lsCmw06qATcO/xClBOPfXUiJEm/dsbTcrOPffc4070NTqiE/hLL70083lFqXwK4l5++WX76quvXHqY9t8fvQelj2lES4HkkCFDbMqUKZl9osBKgZnuV1qg2hDuySeftEmTJrl++v33313woGApPDjT+z1YW7ZsccGcR0Fi06ZN3dpfntNP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vctDDz0U66a5fvvoo4/s3//+d+a2UCjkAsLatWtb6dKlrV27djZ//vzM+5OSkuy2226zO+64I0atBoqg668369v3f9cAgMC4vvX11ve4vu46SErEugHIGwVGY8eOdf9es2aN3XvvvXb22Wfb8uXLs33Mnj17LDExMWZdPmTIELved4KTnJxssTZq1Ci78MILI9ryyCOP2IgRI+yll16yxo0b2wMPPGCdOnWy33//PXO/yy+/3G6//XZbsGCBHXHEETF8B0ARMXBgrFsAAMiDge2C+f3NiFJAaUSjZs2a7qI0OI1srFixwtavX+/u/+uvv9yIzRtvvOFGQ0qVKmWvvPKKu08Blk7sta1Jkyb2zDPPRDy3nkvBQZkyZezQQw+1++67zwVZ2Vm6dKk1bNjQ/vWvf1lGRka2+ynA8NrsXcqWLeseU6dOHRszZkzE/nPmzHHv4c8//3S3t2zZYjfccINVr17dypcvbx06dLCff/45S0rgyy+/7EawKlSoYJdccomlpaVl2ya99ptvvmndunWLGE0aOXKk3XPPPda9e3dr2rSpjRs3znbs2GGvvfZa5n4ayTvhhBNswoQJ2T4/AAAAgokRpWyM+HaEuxxI61qtbdKlkyK2dZvQzeasnnPAx/Y7vp+7HKxt27bZq6++6oIVnbz7g57HH3/cBUcKrp5//nkbOHCgG0Vp1aqV/fTTT26URwFLz549MwMajaQo7WzevHnufm0bMGBAltf+9ddfrXPnzu6xw4cPz1P7ixUr5gIavYfevXtnbldQcvzxx7tgTcHLWWedZZUrV7aPP/7YBUHPPvusdezY0RYtWuS2y5IlS+y9996zDz/80DZt2mQXXXSRS+978MEHs02727x5s7Vp0yYi8NMond6XR3136qmn2jfffGO9evXK3H7sscfajBkz8vS+AQAAEL8IlLKxdfdWS01LPWAH1q1QN8u29TvW5+ixeo28UiBQrlw59+/t27dbrVq13DYFHeFuvfVWNyriGTp0qAucvG0NGjSw3377zQUdXqCkND6PRmb69+9vr7/+epZA6dtvv3XpfnfddZebr3MgCtrCn9t7HxrxUhqbUt2WLVtm9evXdyM9EydOtLvvvtvt9+WXX7qgbd26dS5okccee8wFRW+99ZYbaRI9TkGelx6nIg1ffPFFtoGSRt6KFy/uRqk8CpKkRo0aEfvqttoXLiUlxT0HAAAAChcCpWyUTypvKckpB+zAamWqRd2Wk8fqNfKqffv2Nnr0aPfvjRs3uvS5M88803744QcXaHjCR0qUlqf0vGuvvTZirtDevXvdCI1HgYdSz/744w83WqX7leoWTnOhTjvtNDd3p68mV+eA5vOoEIU/0BCNbikNUGlsd955p02fPt0FRRoRElWXU1v8I2Y7d+50o0jhgV34XCMFkHqe7OjxCryU4ufn36ZRLf82FXpQSh6Af0CdOmapqfriMFu5ki4HgICoM6KOG0TQ+fHKfsH5/iZQKoC0OH8qXkFQqpxS7TxHH320C3aUWqfgJXw/jzd/SPu0bds24vk0qiLfffedS4MbPHiwnX766e45NbKjUahw1apVc6l5uk+Blz+QiqZq1aoRbfbTqJLS7RQo6Vqvr8d4bVfQM23atCyPq1ixYua//cUqFNjsb96Unl+BTnp6upUsWdJt09wpb2RJr+lRwOUfZVKQqr4AAABA4UIxh0JCAYHS7jRCkh2d5GsER8URFLCEX5SCJzNnznQjUipkoNGoRo0aZUk380ZSlDanghAKaPZXMCGnLrvsMpdep9EjjWopcPK0bt3aBS4lSpTI0nYvmMoLbz0opR961BcKlqZMmZK5TYGURrlUvME/R0ujYQAAAChcCJQCSgueKnDQReWptQaQUtO6du2638epMpyKLjzxxBOuCIICExV60PwgUeChtDqNFCml7cknn7R333036nNptErrDyl4UdqfXn9/FEx5bfYuW7dujQhQFIhohErpfuecc07mfUrzU2GHc8891yZPnuzmBamwguY8zZo1y/JKo0EKwr7++uuIoFNzu7QArd67giGlDKoKoIK5cCrkEF70AQAAAIUDgVJAffrppy4tTBel0f3444+uzLUKI+zPddddZy+88IIreNCsWTNXyU3/9kaUFJxozlGfPn3caIuCEZUHz44KSnzyySdu/k6XLl1cYYns3H///Zlt9i7+AhEaRVLJbxWb0KhVePCianennHKKXXPNNa58uVIEFTD50+FyS4UgVHEvnNqlYOnGG290I2upqan22WefRcx/UjELlSy/4IILDur1AQAAEH8SQjrDLcQ0YqF5Njqh9c+j2bVrlysFrSBBKWQomnQcHH744W4UTaNWOaVFapV251XmQ/b9W9j/zrTml+YJnnvHVKtar4XF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bJ81a5aVLVs2X9sHAJKWluZ+yKlab4cllpofl52yp+wOa3nffS4I+f777y0e7dq1y7VNwVw0jXftcoGS9vv0008tVlTMqG3btlaqVKmYtQEAgiT9/2eg6TrW/w9SjYQCC5SWLFliZ511lvu3RnX0YqpG17dvXzfaEy1IyS8KxBQoaQQrO3fddZf169cvYkSpbt26LsgqX758gbUNQNGlip9Dhw61rv0/sSp1j7J49PeKefbB40Nt5syZ1rJlS4vXftT/Q07p8aRVqNEoy/17QiUzr+fuOCEGLTTbsnaxffXKzXHdjwAQb0p+X9Js9/+KsumHpljyss0KJFCqXLmy+/VUUlJSXInwZs2a2ebNm23Hjh1WkP7++29bsWLFfkeuFLxFS8srUaKEuwBAQYww6FeyfRkJlhEqHpcdrLapjWprvH4Xev1Yrlpjq1SnRdb7iydmXleqE5sgJQj9CADxrESMvztz8/q5bunJJ5/s5iYpOLrooovslltusalTp7ptHTt2zNVzbdu2zf7444/M25qHpF8UFYzpMmjQIFc2XIHRX3/9ZXfffbfLDc/vuVAAAAAAcFCB0qhRo1x+uJfmlpiYaF9//bWbM6Qc/dzQvKH27dtn3vZS5nr27GmjR492i9uOHz/ejVYpWNK+r7/+upsbBQAAAAAFJU+pdx6lHgwYMMBd8qJdu3YWCoWyvX/y5Ml5el4AAAAAOBh5ThKcP3++7dv3f2VwixcvbkcdFZ+TmAEAwXfffd9aQihkoYSEWDcFAJALC25aYCELWYIlFM5AacaMGS41TovNynHHHeeKN3gjQqp8pxGg0047reBaCwAosnaXIu0aAIIoOSmY39/FcrrjM888Y1dccUXEti+//NIVYPjzzz9dUQfNKwIAAACAoMtxoKSRpGOPPTZim1Ym17pGhxxyiAuivv3224JoIwAAAADEZ+pdampqxPpF48aNs5o1a0YUedA6RwAAFIROXzxjpXal2a5SyTal4410MgAExIhvR9jW3VutfFJ563f8/6pcF6pASSW5lWanESRROfBwuq98+fL530IAABQoTX3GKm1ebZsq1iJQAoCABUqpaamWkpwSqEApx6l3bdu2dWsaZeell15y+wAAAABA0OV4REkV71TRrkqVKnb77bdb9erV3fZ169bZww8/bK+88op99tlnBdlWAAAAAIivQKl9+/b21FNPWd++fW3EiBEuzU4lwbds2WIlSpSwkSNHWocOHQq2tQAAAAAQbwvO3njjjda1a1d76623bPHixW5bo0aN7IILLrC6desWVBsBAAAAIH4DJVFApFElAAAAACisclzMAQAAAACKCgIlAAAAAPAhUAIAAACAvARKTz75pO3atcv9e/ny5RYKhXLyMAAA8s2yui1sSYM27hoAEByta7W24+oc564LXTEHraF0ySWXWKlSpaxBgwa2evXqzHWUAAD4Jzzd+1U6GgACaNKlkyyIchQo1a5d295++23r0qWLG01auXJl5giTX7169fK7jQAAAAAQf4HSvffea//+97+tT58+bpHZY445Jss+CqB03759+wqinQAAAAAQX4HSDTfcYJdeeqktW7bMmjdvbp9//rlVqVKl4FsHAAAAAPG84GxycrI1bdrUxo4dayeeeKIlJSUVbMsAAAhz05jLLXnbBksrV5X5SgAQIN0mdLP1O9ZbtTLVAjVfKceBkqdnz57uevbs2bZgwQKXbnfEEUdY69bBqmIBAAiW+it+tkqbV9umirVi3RQAQC7MWT3HUtNSLSU5xYIk14HSunXrXAW8adOmWcWKFd3cpC1btlj79u1t4sSJVq1atYJpKQAAAADE64KzKuqwdetWmz9/vm3cuNE2bdpkv/76q9t28803F0wrAQAAACCeR5Q+/fRTV8xB6XaeI4880p5++mnr3LlzfrcPAAAAAOJ/RCkjI8MSExOzbNc23QcAAAAARS5Q6tChg91yyy22atWqzG2pqanWt29f69ixY363DwAAAADiP1AaNWqUpaWl2SGHHGKHHXaYNWzY0Bo0aOC2PfXUUwXTSgAAAACI5zlKdevWtTlz5tiUKVNs4cKFruqd5iiddtppBdNCAAAAAIj3QMnTqVMndwEAAACAwibPgRIAAP+kKR1utFK70mxXqWQ6HgACpN/x/Wzr7q1WPqm8BQmBEgAgEKZ0vDHWTQAA5DFQKhLFHAAAAACgsMtVoLR3714bN26crVmzpuBaBAAAAABBCpRKlChh//rXv2z37t0F1yIAAKJI2pVmpXZuddcAgOBI253m5ijpulDPUWrbtq3NnTvX6tevXzAtAgAgiqFDj7dKm1fbpoq1bMCDv9JHABAQRzx9hKWmpVpKcoqt7LfSCm2gdOONN1q/fv1sxYoVdvTRR1vZsmUj7m/evHl+tg8AAAAA4j9Quvjii931zTffnLktISHBLTyr63379uVvCwEAAAAg3gOlpUuXFkxLAAAAACCogRJzkwAAAAAUdnlaR+nll1+2E0880WrXrm3Lli1z20aOHGnvv/9+frcPAAAAAOI/UBo9erQr5tClSxfbvHlz5pykihUrumAJAAAAAIpcoPTUU0/Z888/b/fcc48VL148c3ubNm1s3rx5+d0+AAAAAIj/QEnFHFq1apVle1JSkm3fvj2/2gUAAAAAwQmUGjRo4Bac9fvkk0/syCOPzK92AQAAAEBwqt7dfvvtdtNNN9muXbvc2kk//PCDTZgwwYYPH24vvPBCwbQSAFDkjer1ipXYu8f2lkgs8n0BAEHy/iXvW/q+dCtZvKQV6kDp6quvtr1799qAAQNsx44ddtlll1lKSoo98cQTdskllxRMKwEARd7yei2LfB8AQBAdXftoC6JcB0py/fXXu8uGDRssIyPDqlevnv8tAwAAAIAgBUqybt06+/333y0hIcFdqlWrlr8tAwAAAICgBEpbt251c5Q0L0mjSaIy4RdffLE9/fTTVqFChYJoJwCgiGs+b7Il7tllexJL2S/NTo91cwAAOfThog9t556dVjqxtJ3d+GwrtIHSdddd56reffTRR3b88ce70aRvvvnGbrnlFpeO98YbbxRMSwEARVqPif2t0ubVtqliLRtAoAQAgdH7w96WmpZqKckptrLfSiu0gZICpMmTJ9tJJ52Uue300093i9CeccYZ+d0+AAAAAIj/dZSqVKkSNb1O2ypVqpRf7QIAAACA4ARK9957r/Xr189Wr16duW3NmjVufaX77rsvv9sHAAAAAPGZeteqVSs3F8mzePFiq1+/vtWrV8/dXr58uSUlJdn69eutV69eBddaAAAAAIiXQOncc88t+JYAAAAAQJACpYEDBxZ8SwAAAAAg6AvOyrZt2zLXUvKUL1/+YNsEAAAAAMEq5rB06VI766yzrGzZspmV7nSpWLEiVe8AAAAAFM0Rpcsvv9xd//e//7UaNWpEFHkAAKCg7EoqaztLlXPXAIDgKFeynCWXTHbXhTpQ+uWXX2z27Nl2+OGHF0yLAACI4v77v6dfACCAFvZZaEUi9e6YY46xFStWFExrAAAAACCII0ovvPCC9e7d21JTU61p06aWmJgYcX/z5s3zs30AAAAAEP+BkhaVXbJkiV199dWZ2zRPKRQKuet9+/bldxsBAAAAIL4DpWuuucZatWplEyZMoJgDAOAfc8E7A63Mzs22o3RFe6v7YHoeAALi9s9ut027NlmlUpXs0c6PWqENlJYtW2aTJk2yhg0bFkyLAACI4tjZb1ulzattU8VaBEoAECATfp1gqWmplpKcEqhAKdfFHDp06GA///xzwbQGAAAAAOJArkeUunbtan379rV58+ZZs2bNshRz6NatW362DwAAAADiP1BSxTsZMmRIlvso5gAAAACgSAZKGRkZBdMSAAAAAAjqHCUAAAAAKOxyPaIULeUu3P33338w7QEAAACA4AVK7777bsTtPXv22NKlS61EiRJ22GGHESgBAAAAKHqB0k8//ZRl29atW+2qq66y8847L7/aBQAAAADBCZSiKV++vEvJO/vss+2KK67Ij6cEABSABQsWBLZtvxzV2cru2GTby1T6x9oEADh4ZzU6yzbu2miVS1W2IhcoyebNm23Lli359XQAgHy0Y+taS0goZj169Ahsv75y2YhYNwEAkAfPdn3WgijXgdKTTz4ZcTsUCtnq1avt5ZdftjPOOCM/2wYAyCfpO7ZYKJRh7XqOsYo1G8dlv66Y/7nN/nBYrJsBAEDeAqX//Oc/EbeLFStm1apVs549e9pdd92V26cDAPyDFCRVrdciLvt885pFsW4CAAB5D5RU4Q4AAAAACrN8m6MEAEBBuufhDlZh6zrbUr66PXjHVDobAAKizXNtbM22NVazXE2bdcMsK3SB0jXXXHPAfRISEuzFF1882DYBAJCFgqRKm1fTMwAQMGu2rbHUtFQLmhwHSps2bcr2vn379tnnn39uu3fvJlACAAAAEHg5DpTefffdqNvff/99u/vuuy0pKcnuv//+/GwbAAAAAMREsbw+cObMmXbSSSfZZZdd5haa/fPPP+3OO+/M39YBAAAAQBACpfnz51vXrl2tXbt2dvjhh9vvv/9uDz/8sFWqxErpAAAAAIpYoLRixQq7+uqrrWXLllaiRAn75Zdf3HykOnXqFGwLAQAAACBe5yhp9EhV7fr3728nnHCCLV682F38unXrlt9tBAAAAID4DJR27drlrh955JFs91EgpQp4AAAAAFAkAqWMjIyCbQkAAAAABC1QAgAglt46d5CVTN9p6SVL80EAQIA80ukR27Fnh5VJLGOFrpjDt99+m+Mn3L59u6uMlxNfffWVq6BXu3Ztl7b33nvvRdwfCoVs0KBB7v7SpUu7Sns5fW4AQOHywzEX2NcnXuGuAQDBcVmzy+y61te560IXKF155ZXWqVMne+ONN2zbtm1R9/ntt9/cwrMNGza0OXPm5DioatGihY0aNSrq/ZoPNWLECHf/jz/+aDVr1nTtSEtLy9HzAwAAAECBpd4pCHr22Wft/vvvt8svv9waN27sRnlKlSplmzZtsoULF7qgp3v37jZlyhRr2rRpjl78zDPPdJdoNJo0cuRIu+eee9zzyrhx46xGjRr22muvWa9evXLzPgEAAAAgfwOlxMRE69Onj7totGjGjBn2119/2c6dO92IUN++fa19+/ZWuXJlyy9Lly61NWvWWOfOnTO3JSUl2amnnmrffPMNgRIAFDE11i624vv22b7ixW1tjUaxbg4AIId+3/C77c3YayWKlbDDqx5uhbaYQ+vWrd2loClIEo0ghdPtZcuWZfu43bt3u4tn69at7nrv3r3uAgD5TVVBS5YsacWLhaxYQnwukVCiuAW+jf2fPM8qbV5tmyrWsjuH/RyTNqptaqM+c/6fAgA503F8R0tNS7WU5BT76+a/LJZy890d91XvVOTBn5Ln3xZu+PDhNnjw4CzbZ82aZWXLli2QNgIo2jRv8r777rOq9XZYYqn4LDjT7PhKdmqDYLexZLE9mdfHVonNe9hTdoe1vO8+27Bhg33//fcxaQMABE16enrmday/OzVdKPCBkgo3eCNLtWrVyty+bt26LKNM4e666y7r169fxIhS3bp1rU2bNla+fPkCbjWAomju3Lk2dOhQ69r/E6tS9yiLR3/O+t2+eiXYbeyekWj6uSs9I9F++Ds27+HvFfPsg8eH2syZM61ly5YxaQMABE3J70ua7f5f1kDbtm1j2hYv2yzQgVKDBg1csKTiEK1atcqMQqdPn24PP/xwto/TPCZd/EqUKOEuAJDfihUr5r6f9mUkWEaoeFx28N59VqjaGKv3oLapjfrM+X8KAORerL87c/P6MW2pSo3/8ccfEQUc9MusikLUq1fPbr31Vhs2bJg1atTIXfTvMmXK2GWXBasGOwAAAIBgyXWgpGBGoz35QfOGVC3P46XM9ezZ01566SUbMGCAq6x34403ujLkGqr77LPPLDk5OV9eHwAAAADyJVDSgrKnnHKKXXvttXbBBRe4tZTyql27dq44Q3ZUtGHQoEHuAgAAAAD/lGK5fcDPP//s5gz179/fzSHSwq8//PBDwbQOAAAAAIIQKDVt2tRGjBhhqampNnbsWFeV7qSTTrKjjjrKbV+/fn3BtBQAAAAA4jVQCq8Ycd5559kbb7zhqtAtWbLEbrvtNqtTp45deeWVtnr16vxtKQAAAAD8Q0ocTCGG//73vzZx4kS3kKuCJM1bWrVqld1///12zjnnkJIHAMg3Dw743Ipl7LOMYvFZ3hwAEN2P1/9o+0L7rHhC8cIdKCm9Til3v//+u3Xp0sXGjx/vrrWmhKgi3rPPPmtNmjQpiPYCAIqoLRX+txA5ACBYaiXXsiDKdaA0evRou+aaa+zqq692xRyi0RpIL774Yn60DwAAAADiP1BavHjxAfcpWbKkWwsJAAAAAIpEoKS0u3LlytmFF14Ysf3NN9+0HTt2ECABAArEyV+Ps1K7t9uupLI24yR+jAOAoHhu9nO2LX2blStZzm44+gYrtFXvHnroIatatWqW7dWrV7dhw4blV7sAAIjQ9ZNH7aJ37nPXAIDgGDJ9iPX/rL+7DpJcB0rLli1zBRv86tevb8uXL8+vdgEAAABAcAIljRz98ssvWbb//PPPVqVKlfxqFwAAAAAEJ1C65JJL7Oabb7Yvv/zS9u3b5y5Tp061W265xd0HAAAAAEWumMMDDzzg0u86duxoJUr87+EZGRl25ZVXMkcJAAAAQNEMlFT6+/XXX7ehQ4e6dLvSpUtbs2bN3BwlAMGjuYUbNmyweKYCMlqfDYgXCxYssHi2e/duS0pKsnjG3zWAQhcoeRo3buwuAIIdJDVpcoTt3LnD4lnp0mVs4cIFBEuIuR1b11pCQjHr0aOHxTO1MRTKiHUz9ou/awCFLlDSnKSXXnrJvvjiC1u3bp1Luwun+UoAgkEjSQqS2vUcYxVrxucPH5vXLLJp43q7tjKqhFhL37HFBSDx/DezYv7nNvvDYXHdRv6uARTKQElFGxQonXXWWda0aVNLSEgomJYB+MfoZKpqvRb0OFAI/mYUhMR7GwGgUAZKEydOtDfeeMO6dOlSMC0CACCKtdUPs52lytvW8tXoHwAIkMZVGluFUhWsRtkaVuiLOTRs2LBgWgMAQDYev+V9+gYAAmhqz6lFYx2l/v372xNPPGGhUKhgWgQAAAAAQRtR+vrrr91is5988okdddRRlpiYGHH/O++8k5/tAwAAAID4D5QqVqxo5513XsG0BgAAAACCGCiNHTu2YFoCAMB+XDe2l5Xb/rdtK1vFXrj6WfoKAALi8ncutw07NljVMlXt1e6vWqFecHbv3r02bdo0W7JkiV122WWWnJxsq1atsvLly1u5cuXyv5UAgCKv8R8zrdLm1bapYq0i3xcAECTT/5puqWmplpKcYkGS60Bp2bJldsYZZ9jy5ctt9+7d1qlTJxcoPfLII7Zr1y4bM2ZMwbQUAAAAAOK16p0WnG3Tpo1t2rTJSpcunbld85a++OKL/G4fAAAAAASj6t3MmTPdekrh6tevb6mpqfnZNgAAAAAIxohSRkaG7du3L8v2lStXuhQ8AAAAAChygZLmJI0cOTLzdkJCgm3bts0GDhxoXbp0ye/2AQAAAED8p9795z//sfbt29uRRx7pijeo6t3ixYutatWqNmHChIJpJQAAAADEc6BUu3Ztmzt3rguK5syZ41Lxrr32Wrv88ssjijsAAAAAQFDlaR0lBUTXXHONuwAAAACAFfVAafz48fu9/8orrzyY9gAAENWME6600ru22s5S5ekhAAiQ61tfb1t2b7EKSRWsUAdKWkcp3J49e2zHjh2uXHiZMmUIlAAABeKDswbQswAQQAPbDbQiUfVOC82GX1Tx7vfff7eTTjqJYg4AAAAACoVcB0rRNGrUyB566KEso00AAAAAUGQDJSlevLitWrUqv54OAAAAAIIzR2nSpEkRt0OhkK1evdpGjRplJ554Yn62DQCATI/c09QqbV5tmyrWsgEP/krPAEBA1BlRx1LTUi0lOcVW9ltphTZQOvfccyNuJyQkWLVq1axDhw72+OOP52fbAAAAACAYgZIWmAUAAACAwizf5igBAAAAQJEdUerXr1+O9x0xYkRunx4AAAAAghco/fTTTzZnzhzbu3evHX744W7bokWLXNW71q1bR8xdAgAAAIAiESh17drVkpOTbdy4cVapUiW3TQvPXn311XbyySdb//79C6KdAAAAABC/c5RU2W748OGZQZLo3w888ABV7wAAAAAUzUBp69attnbt2izb161bZ2lpafnVLgAAAAAITqB03nnnuTS7t956y1auXOku+ve1115r3bt3L5hWAgAAAEA8z1EaM2aM3XbbbdajRw/bs2fP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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# --- 1. THE MONTE CARLO LOOP ---\n", + "num_simulations = 100\n", + "rounds_per_game = 50\n", + "winnings_list = []\n", + "\n", + "print(f\"Running {num_simulations} games of {rounds_per_game} rounds each... Please wait.\\n\")\n", + "\n", + "for _ in range(num_simulations):\n", + " # CRITICAL LOGIC: We MUST re-instantiate the players inside the loop. \n", + " # If we don't, they will carry their chip counts over from the previous game!\n", + " # We need everyone starting fresh with exactly 1000 chips.\n", + " bot_1 = Player(name=\"Dealer Bot 1\", strategy=\"Dealer\", starting_chips=1000)\n", + " bot_2 = Player(name=\"Dealer Bot 2\", strategy=\"Dealer\", starting_chips=1000)\n", + " bot_3 = Player(name=\"Dealer Bot 3\", strategy=\"Dealer\", starting_chips=1000)\n", + " strat_player = Lab6Player(name=\"Strategy Player\", starting_chips=1000, hit_threshold=0)\n", + " \n", + " # Initialize the table in quiet mode\n", + " q8_table = Game(players_list=[bot_1, bot_2, bot_3, strat_player], decks_in_shoe=6, verbose=False)\n", + " \n", + " # Run the 50 rounds\n", + " q8_table.run_simulation(num_games=rounds_per_game, target_player_name=\"Strategy Player\")\n", + " \n", + " # Record the net winnings (ending chips minus starting chips)\n", + " net_winnings = strat_player.chips - 1000\n", + " winnings_list.append(net_winnings)\n", + "\n", + "# --- 2. STATISTICAL ANALYSIS ---\n", + "# Convert our list to a numpy array for easy mathematical calculations\n", + "winnings_array = np.array(winnings_list)\n", + "\n", + "# 1. Average winnings per game, and per round\n", + "avg_winnings_per_game = np.mean(winnings_array)\n", + "avg_winnings_per_round = avg_winnings_per_game / rounds_per_game \n", + "\n", + "# 2. Standard Deviation\n", + "std_dev = np.std(winnings_array)\n", + "\n", + "# 3. Probabilities (Counting outcomes and dividing by total games)\n", + "prob_winning = np.sum(winnings_array > 0) / num_simulations\n", + "prob_losing = np.sum(winnings_array < 0) / num_simulations\n", + "prob_breaking_even = np.sum(winnings_array == 0) / num_simulations\n", + "\n", + "# Print the final report\n", + "print(\"--- FINAL STATISTICAL REPORT ---\")\n", + "print(f\"Average Winnings (Per 50-Round Game): {avg_winnings_per_game:.2f} chips\")\n", + "print(f\"Average Winnings (PER ROUND): {avg_winnings_per_round:.2f} chips\")\n", + "print(f\"Standard Deviation of Winnings: {std_dev:.2f} chips\")\n", + "print(f\"Probability of a Net Win: {prob_winning * 100:.1f}%\")\n", + "print(f\"Probability of a Net Loss: {prob_losing * 100:.1f}%\")\n", + "print(f\"Probability of Breaking Even: {prob_breaking_even * 100:.1f}%\\n\")\n", + "\n", + "# --- 3. HISTOGRAM GENERATION ---\n", + "plt.figure(figsize=(10, 6))\n", + "# Using 15 bins to get a nice distribution curve\n", + "plt.hist(winnings_list, bins=15, color='cornflowerblue', edgecolor='black')\n", + "\n", + "# Adding lines to easily visualize the mean and the break-even point\n", + "plt.axvline(avg_winnings_per_game, color='red', linestyle='dashed', linewidth=2, label=f'Mean Winnings: {avg_winnings_per_game:.2f}')\n", + "plt.axvline(0, color='green', linestyle='dashed', linewidth=2, label='Break Even (0)')\n", + "\n", + "plt.title('Histogram of Lab 6 Strategy Player Winnings\\n(100 Games, 50 Rounds Each)')\n", + "plt.xlabel('Net Winnings (Chips)')\n", + "plt.ylabel('Frequency (Number of Games)')\n", + "plt.legend()\n", + "plt.grid(axis='y', alpha=0.75)\n", + "\n", + "# Display the chart\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

Conclusion & Analysis

\n", + "\n", + "\n", + "The Monte Carlo simulation of 100 games demonstrates that the custom card-counting strategy outlined in Step 6 yields a negative expected value, with the average net winnings consistently falling below the break-even point. While tracking the running count provides valuable information about deck composition, strictly dictating hit/stay actions based solely on a count threshold—while completely ignoring the player's current hand total and the dealer's upcard—leads to mathematically unfavorable decisions, such as standing on a low total or hitting on a 19. Ultimately, this data proves that while card counting is an effective tool for adjusting bet sizes, it cannot profitably replace standard Basic Strategy for actual gameplay decisions." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -92,19 +969,281 @@ "9. Repeat previous questions scanning the value of the threshold. Try at least 5 different threshold values. Can you find an optimal value?" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting threshold scan. Testing 5 values...\n", + "Threshold -4: Average Net Winnings = -138.70 chips\n", + "Threshold -2: Average Net Winnings = -183.90 chips\n", + "Threshold 0: Average Net Winnings = -205.60 chips\n", + "Threshold 2: Average Net Winnings = -246.80 chips\n", + "Threshold 4: Average Net Winnings = -272.80 chips\n" + ] + }, + { + "data": { + "image/png": "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8skn2+eff24zZ860RYsW2eTJk+2BBx6wlJQU69q1q51++um2ePHiyLccAAAAAPLSUMPff//dxo4day1atMjw9g4dOli/fv1s2LBh9uabb9q4ceOsQYMGOd1WAAAAAMi7gdenn34a0oMVLlzYbrjhhsNtEwAAAADkKYdd1XD79u02evRoW7BgQc60CAAAAADye+B1wQUX2Msvv+z+vWfPHmvfvr3b17JlS/vss88i0UYAAAAAyF+B1/jx461Tp07u31988YX5fD7bunWrvfjii/bII49Eoo0AAAAAkL8Cr23btvnX7RozZoydd955VqxYMTvzzDOpZggAAAAAORF41axZ05WQ37Vrlwu8TjvtNLd/y5YtVqRIkXAfDgAAAADyvJCqGga65ZZb7JJLLrESJUq4hZO1oLI3BDGzcvMAAAAAkJ+FHXipXLzW7Vq1apVbMLlAgf1Js3r16jHHCwAAAAByIvASVTLUpsIa2uLi4twcLwAAAABADq3j9eabb1rz5s3dnC5t+vcbb7yRnYcCAAAAgDwv7IzXfffdZ88//7zdfPPN1rFjR7dPxTZuvfVWW758OcMNAQAAAOBwA69XX33VXn/9dbvooov8+84++2y3gLKCMdbyAgAAAIDDHGqYmprq5nel165dO0tJSQn34QAAAAAgzws78Lr00ktd1iu91157zZWZBwAAAADkQFVDFdf48ccf7dhjj3W///HHH668/OWXX24DBw70H/fcc89l5+EBAAAAIH8HXnPnzrW2bdu6fy9dutT9rFixott0m0cl5gEAAAAA2Qi8xo4dy3kDAAAAgEiv4wUAAAAAyOGM17nnnmsjR460UqVKuX9n5fPPPw/jzwMAAABA3hdS4FW6dGn/nC39GwAAAACQw4HXiBEjMvw3AAAAAODQmOMFAAAAANEWeK1bt84uu+wyq1atmhUsWNDi4+ODNgAAAADAYZaT79u3r61cudLuu+8+q1q1Kut1AQAAAEBOB14TJ060CRMmWOvWrcO9KwAAAADkS2EPNaxZs6b5fL7ItAYAAAAA8qCwA6+hQ4fa4MGDbfny5ZFpEQAAAADkx6GGZcuWDZrLtWvXLjvqqKOsWLFilpCQEHTs5s2bc76VAAAAAJDXAy9luQAAAAAAEQy8rrjiCs4vAAAAAER6jteaNWts0KBBtn379oNu27Ztm91+++1ujS8AAAAAQDYDr+eee84FXaVKlTrottKlS9uOHTvcMQAAAACAbAZeY8aMscsvvzzT23XbN998E+rDAQAAAEC+EXLgtWzZMqtVq1amt9eoUYMS8wAAAABwOIFX0aJFswysdJuOAQAAAABkM/A65phj7N1338309nfeecc6dOgQ6sMBAAAAQL4RUjl5UUXDrl27ukIaqmBYuXJlt1+VDJ966ikbOXKk/fjjj5FsKwAAAADk7cCrS5cu9n//9382YMAAe/755111w7i4OFdKPiEhwV566SU7+eSTI9taAAAAAMjLQw3l2muvtaVLl9ozzzxjF198sfXp08eeffZZW7JkiV1//fWRa6WZPfroo3bcccdZsWLFrEyZMhkes3LlSuvRo4cVL17cKlSoYP/73/9s3759QcfMmTPHTjzxRDcfrXr16jZkyBDz+XwRbTsAAACA/C3kjJdHwcqtt95qR5oCqN69e1vHjh3tzTffPOj21NRUO/PMM61ixYo2ceJE27Rpk11xxRUuqFI2TrQOmYZLKns3depU+/vvv61v374uULvtttuO+HMCAAAAkD+EFHhNnjzZBTyh2LVrl6tw2KxZM8tJDz30kPupuWQZ0fyy+fPn26pVq6xatWpun7JxCqyULdPQyPfff9/27t3rHqNw4cLWvHlzF3xp4eeBAwe6oZMAAAAAkCtDDbU4sjJFn3zyie3cuTPDYxT03H333Va/fn2bPn26HWkKDhVIeUGXdOvWzZKSkmzatGn+YzTMUEFX4DFr1qxhDTIAAAAAuZvxUlA1fPhwu//+++2SSy6xhg0bugCnSJEitmXLFlu4cKHLdJ177rn2008/uQDoSEtMTPRXWvSULVvWChUq5G7zjqlTp07QMd59dFvdunUzfGwFb9o8GrIoaWlpbstN+vsaTpnb7QCyg/6LWEb/RSyj/yKWpUXZ9W+o7Qgp8FLVwptuusltymZNmDDBZYj27NljrVq1cnO+NG+qXLlyYTXywQcf9A8hzIzmYrVv3z6kx8toqKBelMD96Y/xCmtkNczw8ccfz7CdGzZscEMXc/uFVmVJPY8CBcKqlQLkOvovYhn9F7GM/otYlhZl1787duyITHGNtm3bui0nKJBTZcSspM9QZaZKlSr2559/Bu1TNi45Odmf1dIxXvbLs379evczfbYs0F133eXmgAVmvGrWrOkKeWjuWG53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t99+u33//ff2xx9/WLly5Q7rb5QoUcJtsUbByGuvvWYtW7YM6XhlYK688spDTvZUtqZ3797uvL/55psH3a779+zZ0x555BEXUKmqpypybt682T744AP/66ZjVJnz/fffd5M6b731Vjv33HPdOnYZUbC3du3aoH333Xef/fzzz67aZ6Tk9OuvCbWnnXaaDRs2zJ588skce1wAQN6gLxTLNyjvttZXtA6paEfKnhRbMW6F2zwU7UBOIeOVm9b2DxhemE2+VItff81hN0UX9MpyqXS/t2Za9+7d3cW4Fq++5557/MdqsemHH37YDaPThbQyMi+99FLQ7XLOOee4Dz3vdw01a916/wefaA21Xr162WOPPWaVK1d2WZ+HHnrIVblTwKdAT8sHvPXWW0FtvfPOO12AqEyRlg1Q0BCpxap37txpl1xyib3++utu+YFD2bhxoztnZ5999iGP1XNVkNSiRYsMb9ffu/76610wpOzjKaecYjfccINNmDDBf8z06dNdNU0FZ0cddZS1bdvWZZZmzZqV6TnR66y1rbxNFTi/+uor69evX5ZzopKSklyWSZk3ZeAaNGhwUMA4bdo01169NgrwFi1a5L8to9dffUR9Sa+/qgBde+21LiD1jBo1yp0frc2ndp566qm2a9cu/+06z/qiAACAcIp2dBnSxS7/5XIbvHWwXTP9Guv+cndrcXELK1Pn4BEoXsGOr/t/ba80fcWervi0fXDWBzbhsQm2/Lfltm/Xgf9vAVkh8Mote6f9V0gj1OGFGYuzFCuwd+L+aojZpAyKhqvpol4XuIF0Ya7A4+OPP/avmSZPP/20ywDpwv+uu+5yAYTWSBNvuJqGgSmzktXwtV9//dUtkD1+/Hh77rnn3MX5WWed5YKOP//8082T0qZhkB4NqRs5cqTNnz/fLY6toOj5558/5NC65cuXZysgPfPMM90FfygmTpzogo4mTZpYTtN5+vzzz11g7FGQo2p9OtcKwJTxevfdd10mSGvbhUJBlwJGBUJZufzyy+2jjz5yGb0FCxa4TFP6DJYC9Geffdb++usvVyJewVxWNPRw4cKFrh8ogPriiy9cQCrqOxdddJF7DP09vY7K5AX2ww4dOri+sWLFgW8mAQAIt2iHCnac+/65NmDZABv470Dr/WlvO/bWY636MdWtQELw5bJXtOPXe361t7u87YYnapji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DxzCeBDdFmcuI3bbmtuidtghGa8jZd++zLf0CyBndWxycmjHZoMyLlWqVHFb69atXeZl1apVtmHD/kX2li9f7jr+J5984rI1RYoUsffee8/dpoBNgYL2NW7c2F555ZWgx9ZjKdgoVqyY1atXz+677z4XtGVm2bJlVr9+fbv++ustLe3AmzE9BSxem72tePHi7j41atSwYcOGBR0/ffp09xz++ecf9/u2bdvsmmuusUqVKlmpUqXs5JNPtlmzZvmPV4ZK5+Ldd991GbbSpUtbnz59bMeOHZm2SX/7008/tbPPPjso2zV06FC755577Nxzz7XmzZvb22+/bbt377YPPvjAf5wyjccdd5x9+OGHmT4+AABArBft6PZcN+v/R38bvG2wXTnhSjv1yVOtUc9GVqxCujlfafsLdxySz9wwxPmj5lu0is5wMC967LHMb2vQQKmOA78//fTBAZanTh2NCzzw+9ChVmDnTrMC7uuAA/sffPCwmrtz5057//33XfCjYCB9EPXss8+6YEvB2uuvv24PPPCAy/K0adPGZsyY4bJQCoCuuOIKf4CkTI+G2c2ZM8fdrn133HHHQX977ty5dtppp7n7Pv7449lqf4ECBVyApOdw3XXX+fcryOnYsaML/hQMnXnmmVauXDn77rvvXFA1fPhwO+WUU+zvv/92+2Xp0qVu/tk333xjW7ZssQsuuMANZ3z00UczHWa4detWa9++fVAgqSyinpdH5+7EE0+033//3a699lr//g4dOtiECROy9bwBAADyUtGOeR/Ns6TtSSE9luZ+ac5Xy0tbWjQi4wU/BRYlSpRwm4Kir776yj7++GMXxAS65ZZbXNambt26LpB6+OGHXSDm7dPPW2+91QUxHg1bVCZHWaMePXrYbbfd5jJn6U2ePNkFIwMHDgwp6FIQ6LXZ23777Tf/sL1JkybZihUr/Jmojz76yC699FL3+9ixY10QqOyUgiQVtnjmmWesTJkyNmrUKP/f0P0UNCpL1alTJ1c045dffsm0TcoMxsfHuyyaR0GXVK5cOehY/e7d5qlevbp7DAAAgPxatKP1Fa2tx/AeVqVNlZDvqzlfuzcfKHEfbch4HSlZVbZLF9jY7bdnfmxgVktuucXSUlKsQMGCB98Wpi5dutirr77q/r1582Y3XLB79+42ZcoUq127tv+4wEyOhiFqOOJVV10VNNcqJSXFZZA8CmQ01G7JkiUum6bbNbQvkOaSnXrqqW7ukwK3UGg+lAqDpA9cRNk3DXvUsL3BgwfbuHHjbP369S5jJdOmTXNtSZ/R27Nnj8tyeRQsBs7Vqlq1qnuczOj+yma58cjppN+nb3XS71PhDQ1BBAAAyO+KlS/mr2J4KDquWLnQy9MfaQReR0qhQpE7VoFbDgReGhqooYUelTRX8KShhAqGAo/zePOvdMwxxxwT9HjK+sgff/zhhv099NBD1q1bN/eYyjwpSxaoYsWKLoOm2xTIpQ/MMlKhQoWgNqenrJeGFyrw0k/9fd3Ha7uCKC9DFkhZL0/64iEKlLKad6bHV+C0b98+K/Tfa6m5Z6Lslv6mRwFc+iyYgl6dCwAAgPyuUa9GtuDzBSEdq+BM63pFK4YaIlMKMDTMUBmczChoUIZJxSoUAAVuGnYoGu6njJkKS3hD+rzhf+kzPRruqAIdCpCyKmARqosvvtgNJ1R2S1k3BWKetm3bukCoYMGCB7XdC86yQ8U4ZP78A5M7dS4UfP3000/+fQrMlIXTEMz0c9yUrQMAAMjvmvVuZkXKFnFVC7MUZ+64puc3tWhF4IWgBXwViGhTOXOtQaWheJqTlRVV/tN8rBdeeMEVpVCgo8IbKp0uCmQ0jFCZLA3he/HFF90iwRlRNk3rXykY0jBH/f2sKDjz2uxt27dvDwp4FNgog6bhjT179vTfpmGNKrTRq1cv++GHH9y8KhW60Hy0v/76K9s9Q9kqBXUTJ04MCmI1N+6xxx5zz13BlYZIqsqjgsNAKqwRWIQDAAAgvypYpKBbHNnJLPj6b7+Oi9ZS8kLgBb8xY8a4YXDaNGxw6tSprvCESsdnpX///vbGG2+4AhQtWrRwxTH0by/jpWBHc7Zuuukmlw1ScKNy8plRgYzvv//ezX8644wzbNeuXZkee//99/vb7G3pKyUqy6US8Sr6oaxaYDCkaoadO3e2fv36uXL3GhKpACz98L9wqUS9KioGUrsUfN1www0u8/fvv//ajz/+GDR/TMVFVOL+/PPPP6y/DwAAkFc06tHI+ozu4xZo9uZyBf7U/j5f9nHHRbM4n65uERZlVDRPSRfIgfOQ9u7d68qGK+DQcLkjQS+fMjnKEGVUzAG5Q32hUaNGLsunrFqotOiyhhnenVUxljwk0v03N96TyD8011PzNFXBNH31VyDa0X8Ri1L2prh1ujTna1viNitdpbQ1ObeJG16Ym5muzGKD9KI3FwfEMF3kv/POO7Zx48awhnq2atUq5IqOAAAA+UnBIgXdGl3NL24ek198EXgBEaIhl+FQCXrNLwMAAEDeEzshIgAAAADEKAIvAAAAAIgwAq8IoF4JEB14LwIAgGhB4JWDEhIS3M/du3fn5MMCyCbvvei9NwEAAHILxTVyUHx8vJUpU8ZVWREtjhvpEu+Uk0csi1T/1eMq6NJ7Ue9JvTcBAAByE4FXDqtSpYr76QVfkaYLTK3FoVKarOOFWBPp/qugy3tPAgAA5CYCrxymi8eqVau6dQWSk5Mt0nTRumnTJitfvnxMrWMARLr/anghmS4AABAtCLwiRBd8R+KiTxeuusDUgr0EXog19F8AAJBfkCIBAAAAgAgj8AIAAACACCPwAgAAAIAIY47XYSzKun37douGOTI7duxgjhdiEv0XsYz+i1hG/0UsS4uy618vJvBihMwQeGWDXmipWbNmdu4OAAAAIA/GCKVLl8709jjfoUIzZBhlr1mzxkqWLJnra2cpwlYAuGrVKitVqlSutgUIF/0XsYz+i1hG/0Us2x5l178KpxR0VatWLcsMHBmvbNAJrVGjhkUTdbpo6HhAdtB/Ecvov4hl9F/EslJRdP2bVabLk/uDIgEAAAAgjyPwAgAAAIAII/CKcYULF7YHHnjA/QRiDf0XsYz+i1hG/0UsKxyj178U1wAAAACACCPjBQAAAAARRuAFAAAAABFG4AUAAAAAEUbglQclJSVZ69at3eLOM2fOzO3mAIe0fPlyu+qqq6xu3bpWtGhRO+qoo9yk2X379nH2EJVeeeUV11+LFCli7dq1swkTJuR2k4CQPP7443b00UdbyZIlrVKlStarVy9btGgRZw8x25/j4uLslltusVhA4JUH3XHHHW7lbCBWLFy40NLS0mz48OE2b948e/75523YsGF2991353bTgIN8/PHH7n/y99xzj82YMcM6depk3bt3t5UrV3K2EPXGjRtnN954o/3xxx/2008/WUpKip122mm2a9eu3G4aEJapU6faa6+9Zi1btrRYQVXDPOb777+3gQMH2meffWbNmjVzFwXKfgGx5umnn7ZXX33V/vnnn9xuChDkmGOOsbZt27r+6WnSpInLHOjbVyCWbNiwwWW+FJB17tw5t5sDhGTnzp3uc1ijDx555BF3rTt06FCLdmS88pB169bZ1Vdfbe+++64VK1Yst5sDHJZt27ZZuXLlOIuIKhr+Om3aNJchCKTff//991xrF3A4n7XC5y1iyY033mhnnnmmnXrqqRZLCuZ2A5AzfD6f9e3b16677jpr3769mzMDxKqlS5faSy+9ZM8++2xuNwUIsnHjRktNTbXKlSsH7dfviYmJnC3E3LWDRsmccMIJ1rx589xuDhCSjz76yKZPn+6GGsYaMl5R7sEHH3STBrPa/vrrL3eRun37drvrrrtyu8lA2P030Jo1a+z000+33r17W//+/TmbiErqu+kvYNPvA6LdTTfdZLNnz7YPP/wwt5sChGTVqlU2YMAAe++991xxo1jDHK8Y+HZVW1bq1Kljffr0sa+//jrof/z6VjY+Pt4uueQSe/vtt49Aa4Hs9V/vw1NBV5cuXdwcmpEjR1qBAnw3hOgbaqih3J9++qmdc845/v26EFAVWc2TAWLBzTffbKNHj7bx48e7Cp1ALBg9erT77NX1beD1rq5/dc2gyt6Bt0UbAq88QtW0lPHy6AK2W7duNmrUKHcRW6NGjVxtH3Ao//77rwu6VJpb32RF8wcn8jd9pqqfalK3p2nTptazZ0+KayDqKTuroOuLL76w3377zRo0aJDbTQJCtmPHDluxYkXQviuvvNIaN25sd955Z9QPmWWOVx5Rq1atoN9LlCjhfmo9JIIuRDt9UXDSSSe5fvzMM8+4KlueKlWq5GrbgPQ0J+ayyy5z82k7duzoyhnryy/NsQVioSjBBx98YF9++aVby8ubm1i6dGm3jiIQzUqWLHlQcFW8eHErX7581AddQuAFINf9+OOPtmTJErel/6JA384C0eTCCy+0TZs22ZAhQ2zt2rXuf/bfffed1a5dO7ebBhyStwyCvuwKNGLECFekC0DkMNQQAAAAACKMmesAAAAAQOAFAAAAALGNjBcAAAAARBiBFwAAAABEGIEXAAAAAEQYgRcAAAAARBiBFwAAAABEGIEXAAAAAEQYgRcAICJGjhxpZcqUichjx8XF2ejRo+1IWr58ufu7M2fOPKzHqVOnjg0dOjTXn99JJ51kt9xyS0T/BgDgAAIvAEBY+vbta7169Tpo/2+//eYChq1bt7rfL7zwQvv777/9tz/44IPWunXrQwYleozMNgUL+V2PHj3s1FNPzfC2yZMnu/M0ffr0I94uAEDWCh7idgAAsqVo0aJuC8fUqVMtNTXV/fv333+38847zxYtWmSlSpVy+woVKpSttvh8Pve4BQvG/v/2rrrqKjv33HNtxYoVVrt27aDb3nrrLRfctm3bNtfaBwDIGBkvAEDEhxrq3w899JDNmjXLn73SvvQqVqxoVapUcVu5cuXcvkqVKh20TzZu3GjnnHOOFStWzBo0aGBfffXVQdm3H374wdq3b2+FCxe2CRMmuADsqaeesnr16rmgsFWrVjZq1Cj//bZs2WKXXHKJa4du1+OOGDEiqI3//POPdenSxf1d3V9ZpkCfffaZNWvWzP1NZfCeffbZLM/T4sWLrXPnzlakSBFr2rSp/fTTT1kef9ZZZ7lzkv787d692z7++GMXmG3atMkuuugiq1GjhmtnixYt7MMPPwx7eKNev8C/8++//7pMZtmyZa18+fLWs2dPNwQTAHBoBF4AgIjTxfptt93mApK1a9e6TfsOhwK5Cy64wGbPnm1nnHGGC5g2b94cdMwdd9xhjz/+uC1YsMBatmxp9957rwukXn31VZs3b57deuutdumll9q4cePc8ffdd5/Nnz/fvv/+e3cfHVehQoWgx7znnnts0KBBbq5Xw4YNXYCTkpLibps2bZprU58+fWzOnDlueKUeM6MgU9LS0lz2Kj4+3v744w8bNmyY3XnnnVk+b2XtLr/8cveYCiQ9n376qe3bt8+dh71791q7du3sm2++sblz59o111xjl112mf3555/ZPt8K7BRwlihRwsaPH28TJ050/z799NPd3wUAZC32x1wAAI44XdDrojuQN0QwI8oe6XgFDcpc5dRcMwU98thjj9lLL71kU6ZMcYGAZ8iQIda1a1f37127dtlzzz1nv/76q3Xs2NHtU+ZLAcTw4cPtxBNPtJUrV1qbNm1clkyUsUpPQdeZZ57pD/4UTC5ZssQaN27sHv+UU05xwZYoMFMg9/TTT7v2pvfzzz+7AE9ZI2WnvOfSvXv3LJ97v3793GMqs6dgyBtmqCBO2Shtaqfn5ptvtjFjxrjg7JhjjrHs+Oijj6xAgQL2xhtvuOyYKIhVVkztOO2007L1uACQXxB4AQDCpot9ZYMCKZui7NGRogyWp3jx4layZElbv3590DFeACUKgJQJ8gIxj7I1Crbk+uuvd/PKVJxCgYSKiBx33HGZ/t2qVau6n/q7CrwURGn4XaDjjz/eVTFUYKrMViAdX6tWLX/QJV5QmBX9LbVLwZZei6VLl7qhlD/++KO7XX/riSeecEMPNTwwKSnJbTpP2aVsngJMnedAOqf6+wCArBF4AQDCpgv4+vXrB+1bvXr1ET2TCQkJQb8rC6Ohe4ECAw3vtm+//daqV68edJzmY4kyTSpaoWOUjVL26sYbb7Rnnnkmw7/rZX68x9bQP2+fJ3A4YHoZ3Zb+/pnRXK6bbrrJ/u///s9lnlRoQ+0VzSt7/vnnXcCn+V06Dyodn9WQQP3d9O1JTk72/1vPUcMX33///YPuqzlxAICsEXgBAI4IVSTMajhipKlwhQIsDSfUsMLMKIjQsEBtnTp1sttvvz0o8DrU39DQxUCqzqghh+mzXd7xas+aNWusWrVqbl/6Yh2Z0VyyAQMG2AcffGBvv/22XX311f6gTdkvZd68DKSCJhXxaNKkSZbPW3PvPDpe87o8qpSoDJoKe3hVJgEAoaO4BgDgiNB8qWXLlrmiFKpIqKFvR5KGyGnekwpqKFDR8LgZM2a4jJF+l/vvv9++/PJLN6ROxTc0ly2rYCU9FRD55Zdf7OGHH3ZrmOlxX3755aD5VoG0HlejRo1csQxVfFTApOIdodCcORUoufvuu13gFjiHTNlIVUdU0KfhjNdee60lJiZm+Xgnn3yya6uGWf7111923XXXBWX3VLRDhUYU0Kmdei1VlETB35HOdgJALCLwAgAcEZo7pcIXmpOk7MqhyptHggIiBVeqdKiAqlu3bvb1119b3bp1/Vm5u+66y83jUol3ZalUVCJUygp98skn7j7Nmzd3f0sFPjIqrCEqVvHFF1+4ILRDhw7Wv39/e/TRR0P+expuqBL4CuA0V8yj4h5qi56fFp1WQZOMFr0OpOGJNWvWdM/74osvdsGiStF79G9VM9TfUREPnT8V+dizZw8ZMAAIQZwvq8HnAAAAAIDDRsYLAAAAACKMwAsAAAAAIozACwAAAAAijMALAAAAACKMwAsAAAAAIozACwAAAAAijMALAAAAACKMwAsAAAAAIozACwAAAAAijMALAAAAACKMwAsAAAAAIozACwAAAAAssv4fikB9CVOqzUEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "CONCLUSION: The 'optimal' threshold found is -4, yielding -138.70 chips on average.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "thresholds_to_test = [-4, -2, 0, 2, 4] \n", + "num_simulations = 100\n", + "rounds_per_game = 50\n", + "\n", + "# Dictionary to store the average winnings for each threshold\n", + "results = {}\n", + "\n", + "print(f\"Starting threshold scan. Testing {len(thresholds_to_test)} values...\")\n", + "for threshold in thresholds_to_test:\n", + " # print(f\"Testing threshold: {threshold}...\")\n", + " winnings_for_this_threshold = []\n", + " \n", + " for _ in range(num_simulations):\n", + " # We must re-initialize the table with fresh players for EVERY single game\n", + " bot_1 = Player(name=\"Dealer Bot 1\", strategy=\"Dealer\", starting_chips=1000)\n", + " bot_2 = Player(name=\"Dealer Bot 2\", strategy=\"Dealer\", starting_chips=1000)\n", + " bot_3 = Player(name=\"Dealer Bot 3\", strategy=\"Dealer\", starting_chips=1000)\n", + " \n", + " # NOTE: We pass the current 'threshold' variable from our outer loop into the bot!\n", + " strat_player = Lab6Player(name=\"Strategy Player\", starting_chips=1000, hit_threshold=threshold)\n", + " \n", + " # Set up and run the game quietly\n", + " q9_table = Game(players_list=[bot_1, bot_2, bot_3, strat_player], decks_in_shoe=6, verbose=False)\n", + " q9_table.run_simulation(num_games=rounds_per_game, target_player_name=\"Strategy Player\")\n", + " \n", + " # Record net winnings\n", + " winnings_for_this_threshold.append(strat_player.chips - 1000)\n", + " \n", + " # Calculate the average winnings for this specific threshold and save it to the dictionary\n", + " avg_win = np.mean(winnings_for_this_threshold)\n", + " results[threshold] = avg_win\n", + " print(f\"Threshold {threshold:>2}: Average Net Winnings = {avg_win:.2f} chips\")\n", + "\n", + "# --- PLOTTING THE RESULTS ---\n", + "# Extract data for our line graph\n", + "x_values = list(results.keys())\n", + "y_values = list(results.values())\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(x_values, y_values, marker='o', linestyle='-', color='purple', linewidth=2, markersize=8)\n", + "\n", + "# Programmatically find the \"optimal\" (maximum) value in our dictionary\n", + "optimal_threshold = max(results, key=results.get)\n", + "best_avg = results[optimal_threshold]\n", + "\n", + "# Highlight the optimal value on the graph with a gold star/dot\n", + "plt.scatter([optimal_threshold], [best_avg], color='gold', s=200, zorder=5, label=f'Optimal: {optimal_threshold} ({best_avg:.1f} chips)')\n", + "plt.axhline(0, color='red', linestyle='dashed', alpha=0.5, label='Break Even (0)')\n", + "\n", + "plt.title('Average Winnings vs. Hit Threshold\\n(100 Games of 50 Rounds per Threshold)')\n", + "plt.xlabel('Hit Threshold Value')\n", + "plt.ylabel('Average Net Winnings (Chips)')\n", + "plt.xticks(thresholds_to_test)\n", + "plt.grid(True, alpha=0.3)\n", + "plt.legend()\n", + "\n", + "# Display the final chart\n", + "plt.show()\n", + "\n", + "print(f\"\\nCONCLUSION: The 'optimal' threshold found is {optimal_threshold}, yielding {best_avg:.2f} chips on average.\")" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "10. Create a new strategy based on web searches or your own ideas. Demonstrate that the new strategy will result in increased or decreased winnings. " ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

The Strategy: Martingale

\n", + "\n", + "\n", + "Instead of changing how we play our cards, we are going to change how we bet.\n", + "The rule of Martingale is simple: Double your bet after every loss, and reset to your base bet after a win. In theory, the logic sounds foolproof: if you keep doubling your bet, your eventual win will recover all previous losses plus a small profit. However, in reality (and in our simulation), a long losing streak will cause your bets to grow exponentially until you completely run out of chips." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "class MartingalePlayer(Player):\n", + " def __init__(self, name, starting_chips=1000, base_bet=10):\n", + " # Initialize using the parent class\n", + " super().__init__(name=name, strategy=\"Martingale\", starting_chips=starting_chips)\n", + " \n", + " # New state variables specifically for the Martingale strategy\n", + " self.base_bet = base_bet\n", + " self.last_bet = base_bet\n", + " self.last_chips = starting_chips \n", + " self.first_bet_made = False\n", + "\n", + " def place_bet(self, true_count=0.0):\n", + " if self.chips <= 0:\n", + " self.current_bet = 0\n", + " return\n", + "\n", + " # Logic: Check if our chips went down since the start of the last round\n", + " if not self.first_bet_made:\n", + " bet = self.base_bet\n", + " self.first_bet_made = True\n", + " else:\n", + " if self.chips < self.last_chips:\n", + " # We lost the last hand! Double the bet.\n", + " bet = self.last_bet * 2\n", + " else:\n", + " # We won or pushed. Reset to base bet.\n", + " bet = self.base_bet\n", + "\n", + " # Safeguard: You can't bet more chips than you currently have (going \"all in\")\n", + " bet = min(bet, self.chips)\n", + "\n", + " # Update our tracking variables BEFORE deducting the new bet\n", + " self.last_chips = self.chips\n", + " self.last_bet = bet\n", + " \n", + " self.current_bet = bet\n", + " self.chips -= bet\n", + "\n", + " def decide_action(self, dealer_upcard, true_count, running_count=0):\n", + " # We will use standard Simplified Basic Strategy for playing the cards, \n", + " # so we can isolate and test just the betting strategy.\n", + " dealer_val = 10 if dealer_upcard.rank in ['J', 'Q', 'K', 'A'] else int(dealer_upcard.rank)\n", + " score = self.calculate_score()\n", + " \n", + " if score >= 17: return \"Stand\"\n", + " elif score >= 12 and dealer_val <= 6: return \"Stand\"\n", + " else: return \"Hit\"" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simulating 100 games to compare Martingale vs. Flat Betting... \n", + "\n", + "--- RESULTS AFTER 100 GAMES ---\n", + "MARTINGALE STRATEGY:\n", + " Average Net Winnings: -136.10 chips\n", + " Bankruptcy Rate: 20.0%\n", + " Win Rate (Finished with >1000 chips): 62.0%\n", + "\n", + "CONTROL STRATEGY (Flat Betting):\n", + " Average Net Winnings: -35.40 chips\n", + " Bankruptcy Rate: 0.0%\n", + " Win Rate (Finished with >1000 chips): 37.0%\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAIzCAYAAABm07gMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfH1JREFUeJzt3Qd8FNX6//Ennd57l2YBVBRFEaWoKCgqKGLHXhAVQblyLYAKWBHLBawI9u4VOypiVxARxQJSBYL0DglJ9v/6nvub/e8uSciGJLPJft6v17rs7Ozu2ZnZOM+c5zwnIRAIBAwAAAAAAJS4xJL/SAAAAAAAIATlAAAAAAD4hKAcAAAAAACfEJQDAAAAAOATgnIAAAAAAHxCUA4AAAAAgE8IygEAAAAA8AlBOQAAAAAAPiEoBwAAAADAJwTlAFCEnn32WUtISHC3zz//fI/nA4GAtWzZ0j3ftWvXIt/2Y8aMsbfffnuP5WpLXm3yQ3G0x9vu3q1ixYp24IEH2qhRo2z79u2Fes9vvvnGRo4caZs2bdrjuQkTJrj9HWnp0qXu83N7riT8/fffNnDgQGvdurWVL1/eatSoYe3atbMrrrjCPed5//333XcrLnltH/z/YyS3W4cOHYKb6OKLL7ZmzZoVapO9+OKLNn78+AKvr79Hoe1ISUlxn33ZZZfZsmXLCtWGVatWuWNs7ty5ezyX3/Gnz9V3B4B4kex3AwCgLKpcubI9/fTTewTeM2fOtEWLFrnni4OC8rPOOsvOOOOMsOWHHXaYffvtt3bQQQdZWabvPnToUPfvbdu2ue1955132rx58+yNN94oVFCuoF4BQrVq1fYIOmvVqrVH8FC/fn23rVu0aGElbcWKFW5fq63aDvvvv79t3rzZfvvtN3v11Vdt8eLF1rhx42BQ9J///KfYAvO8tg/+v+uuu87OO++8sE1SqVKlItlECsp//fVXGzx4cIFf07x5c3vhhRfcvzMzM93rdfxPnz7d/vjjD6tQoULUQbleryD70EMPDXsuv+PvrbfesipVqkT1WQBQmhGUA0Ax6N+/vzu51Uln6MmlAvWjjz7atmzZUqSft3PnTtcrmhe14aijjrKyrm7dumHf84QTTnC9fNoXu3btsnLlyhV7G9LS0nzb1k8++aStW7fOfvjhB9tvv/2Cy3WR5t///rfl5OQU6n2V4aHtl98xhug1adIkpn6X2r+h7TnuuOPcb0a95V999ZX16NGjRNrRvn37EvkcAIgVpK8DQDE499xz3f1LL70UXKYeS/XWXnrppbm+Rj1KHTt2dOnGCqLV46kgXgFRKPU6nXrqqfbmm2+6k1edNOu1SjlVmvaUKVOCKaheT31u6eLqwVSv3F9//WW9evVy/1YvqnpYMzIy9uiBVS+0evjVC3v++efbrFmz9kjTnj17tp1zzjmujTrB1722RUHTX/X60047zW0DfS99P/Xw7ouqVau6diYlJYUt/+STT+z4449321o9gMccc4x9+umnwefVg3fzzTe7fyvADR2WoO81f/581xPvLffSjHNLX9d7aZleo+2hNukCgo4FHRehlCqvIEjbQPvklFNOcT3cev3eerXXr19viYmJVqdOnVyf13PevtcFIwlNWVbbvWWDBg2ySZMmuSEAutCg46qgx2l+20d0Ueqmm25y2zU1NdUaNmzoenQjhxkUZFt8+eWX7nHob80zdepU95yO1dz8/PPP7nm1P9IHH3zgnnvnnXfc47Vr19qVV17pfiPaHrVr13bHjI6jkqT9pmBZ+1hDNDQ04b777rPdu3cH19Hv/r333nO/u9D9Wxg6VkXp7KEWLlzoevnVDm0PHSfeMSX6nRxxxBHu35dcckmwDdpvezv+ItPXvb9f2se33nqrNWjQwB17uuj2559/hrVLx6Eyhpo2ber+hmg4gHr6tU2KY8gQABQFesoBoBjohFFB7DPPPGNXXXWVW6YTSgVF6kXPbaynTki1rnrP5LvvvnPprStXrrQ77rgjbN05c+bY77//brfddpsLbHRyrt7Q7t27W7du3ez2228PtiM/OpFXEKzAR8H4F198YXfddZc7Efc+U4GS3nPDhg127733ujHxH374ofseuX0HpUwrMFcglZ6ebhMnTnQn50qhVjpzXmbMmGEnn3yyC/gUDKoNL7/8svucHTt2FCgNWifkWVlZYenrCibVntCg4vnnn7eLLrrITj/9dPe8nnv88cftpJNOso8++sgF65dffrn7zo8++qi7AKK0dNEQAKXXav+qjUrTFgUme3PmmWe676Pt/csvv9jw4cPdch0nop7s3r17u4sTCl68YQfaLgWhLAwFO3379rUhQ4a4x7kdAzo+tF9ff/119/4e7zuKahMo4NVxUK9evWCgX5DjNL/to33Z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Y8YUeP2MjAxr0qSJ/fjjj8XaLgAAULZd8OYFdvILJ7t7APGJoLwUuvjiiy0hISF4q1mzpp188sk2b948i1XNmjULa7N3u+eee/xumttu7733nl133XXBZYFAwF18aNCggZUvX966du1q8+fPDz6flpZmN910k/3rX//yqdUAAAAAygKC8lJKQXh6erq7ffrpp5acnGynnnpqvq/ZvXu3+enOO+8Mttm7hQbCfnnsscesX79+Vrly5eCy++67z8aNG+eemzVrltWrV89OPPFE27p1a3Cd888/37788kv7/ffffWo5AAAAgNKOoLyUUk+tAkXdlEquHtu///7b1q5d655funSp64l+9dVXXS9vuXLl7Pnnn3fPTZ482Q488EC37IADDrAJEyaEvbfeq3Xr1lahQgVr3ry53X777fkG9EuWLLGWLVvaNddcYzk5OXmup6DXa7N3q1ixontNo0aNbNKkSWHrz5kzx32HxYsXu8ebN2+2K6+80urUqWNVqlSx7t27288//7xHWv1zzz3neuarVq1q55xzTlggHUmf/dprr9lpp50W1ks+fvx4u/XWW61v377Wtm1bmzJliu3YscNefPHF4HrKUOjUqZO99NJLeb4/AAAAAOSHQm95GPftOHfbm8PqH2bvnPtO2LLTXjrN5qTP2etrhxw9xN321bZt2+yFF15wgbECxcgA+8EHH3SBuAL5J5980kaMGOF6gNu3b28//fSTXXHFFS44HjBgQDB4fvbZZ13q9i+//OKe17Jhw4bt8dm//vqr9ejRw7127NixhWp/YmKiC571Ha6++urgcgXARx99tLswoED5lFNOsRo1atj777/vAu7HH3/cjj/+eFuwYIFbLosWLbK3337b3n33Xdu4caOdffbZLkV+9OjReaaub9q0yTp06BB2kWH16tXue3m07bp06WLffPONXXXVVcHlRx55pOstBwAAAIDCICjPw5aMLbZy68q9bsDGVRvvsWztjrUFeq0+o7AUdFaqVMn9e/v27Va/fn23TAFuqMGDB7veXs9dd93lgnRv2X777We//fabC3C9oPy2224Lrq8e56FDh9orr7yyR1D+7bffupT54cOHu/HVe6MLBKHv7X0P9eQrFVzp4suWLbOmTZu6HuyXX37Z/v3vf7v1ZsyY4S4QrFmzxgXI8sADD7gA/PXXX3c96KLX6YKC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169f73rFW7dubb169XI95nL55Zfb0KFDi6ONAAAAAACUSVEH5TfeeKOlpKTY8uXLrUKFCsHl/fv3tw8//LCo2wcAAAAAQJkV9ZhyFXRT1fVGjRqFLW/VqhVTogEAAAAAUJw95du3bw/rIfesW7fO0tLSon07AAAAAADiVtRB+XHHHWdTp04NPk5ISLCcnBy7//77rVu3bkXdPgAAAAAAyqyo09cVfHft2tVmz55tmZmZNmzYMJs/f75t2LDBvv766+JpJQAAAFAGHVb/MGtctbHVrlDb76YAKC1B+UEHHWTz5s2ziRMnWlJSkktn79u3r1177bVWv3794mklAAAAUAa9c+47fjcBQGkLyr15ykeNGlX0rQEAAAAAII4UKijftWuX6y1fs2aNG08e6rTTTiuqtgEAAAAAUKZFHZRrLvKLLrrIVVuPpKJv2dnZRdU2AAAAAADKtKirrw8aNMj69etn6enprpc89EZADgAAABTcaS+dZkc/fbS7BxCfou4pV8r6kCFDrG7dusXTIgAAACBOzEmfYyu3rrSGlRv63RQApaWn/KyzzrLPP/+8eFoDAAAAAEAcibqn/LHHHnPp619++aW1a9fOUlJSwp6//vrri7J9AAAAAACUWVEH5S+++KJ99NFHVr58eddjruJuHv2boBwAAAAAgGIKym+77Ta788477ZZbbrHExKiz3wEAAAAAwP+JOqrOzMy0/v37E5ADAAAAAFDSQfmAAQPslVde2dfPBQAAAAAg7kWdvq65yO+77z43rvzggw/eo9DbuHHj4n6jAgAAAABQLEH5L7/8Yu3bt3f//vXXX8OeCy36BgAAAAAAijgonzFjRrQvAQAAAJCLIUcPsS0ZW6xKWhW2DxCnog7KAQAAABRdUA4gvhUqKJ81a5a99tprtnz5cleNPdSbb75ZVG0DAAAAAKBMi7r6+ssvv2zHHHOM/fbbb/bWW2/Z7t273b8/++wzq1q1avG0EgAAAACAMijqoHzMmDH20EMP2bvvvmupqan28MMP2++//25nn322NWnSpHhaCQAAAJRBWzO2ujHlugcQn6IOyhctWmSnnHKK+3daWppt377dVV2/8cYb7YknniiONgIAAABl0oH/OdCq3lPV3QOIT1EH5TVq1LCtW/93Ja9hw4bBadE2bdpkO3bsiOq9vvjiC+vdu7c1aNDABfZvv/122PMXX3yxWx56O+qoo6JtMgAAAAAAZSMoP/bYY2369Onu30pZv+GGG+yKK66wc889144//vio3ku97Icccog99thjea5z8sknW3p6evD2/vvvR9tkAAAAAADKRvV1BdC7du1y/x4+fLilpKTYV199ZX379rXbb789qvfq2bOnu+VHKfL16tWLtpkAAAAAAJS9oFzp657ExEQbNmyYuxWXzz//3OrUqWPVqlWzLl262OjRo91jAAAAAADicp5ymT9/vmVnZwcfJyUlWZs2bawoqRe9X79+1rRpU1uyZInrie/evbv9+OOPrgc9NxkZGe7m2bJli7tXW0PbG2tycnIsMSnJcizJsgNRjyooEWqba2NOTkxvSwAAgMIKBAIlsvFyO5fi/MofnIejOETzey5wUP7ll1/akCFDbNasWe6xCq6psJv3h0tF2D766CM74YQTrKj0798/+O+2bdtahw4dXID+3nvvuXT53IwdO9ZGjRqVa9X4SpUqWazasGGDHdqhs61NLWfZGakWizakZtqhHXbZ2rVr+Z8GAAAok0oqKF+4cKG7z8rKCt57y1CyOA9Hcdi2bVvRB+UTJkywCy+8MGzZjBkzXJCsP16PPPKITZw4sUiD8kj169d3n5ffHyyNc9fFg9Ce8saNG1uLFi2sSpUqFqsWL15sc2d/ZRe0qWbN0ypYLFq8fofNnb3JLrhkoDVv3tzv5gAAABS5BQsWlMhWbdWqlbtPTk4O3nvLULI4D0dx8DK2izQoVw+5Kq2HatSokQuSRQG7N395cVm/fr39/fffLjjPi9Lac0ttV3q9brFK4/NzsrMt0bItKSHHYpHa5tqYmBjT2xIAAKCwlP1ZEnI7l+L8yh+ch6M4RPN7LnBQvnLlyrBgeMqUKWFV0VUATkFztF36f/31V/Cxxo3PnTvXvZduI0eOtDPPPNN97tKlS+3f//631apVy/r06RPV5wAAAAAAEIsKHJRXrlzZBc1ez3jkmG49F216+OzZs61bt27Bx17a+YABA1wq/C+//GJTp061TZs2ucBc677yyiuuLQAAAEBp999z/muZ2ZmWmhSbNYUAxFBQ3rFjRxcgd+3aNdfnn332WbdONPRe+RXTUOE4AAAAoKw6vMHhfjcBQGkJytWLrSJuNWvWtJtvvjk4V/iaNWvs3nvvteeff94+/vjj4mwrAAAAAADxGZQrdfzRRx+1G2+80caNG+dS1VUIY/Pmza5a5Pjx490c4gAAAAAAoIiDchk4cKD17t3bXn/99eC0ZJq64ayzznLTjgEAAAAouHcXvGs7d++08inl7dTWp7LpgDgUVVAuCr7VWw4AAABg31z97tW2cutKa1i5oa0YsoLNCcShxIKs9O233xb4Dbdv327z58/flzYBAAAAABAXChSUX3TRRXbiiSfaq6++6uYWz81vv/3m5hFv2bKlzZkzp6jbCQAAAABAfKavK+B+/PHH7Y477rDzzz/fWrdubQ0aNLBy5crZxo0b7Y8//nA95Jq7fPr06da2bdvibzkAAAAAAPEQlKekpNigQYPcTb3gX375pS1dutR27txphxxyiBtjrursNWrUKP4WAwAAAAAQr4XeDjvsMHcDAAAAAAAlMKYcAAAAAADEQE85AAAAABTU2rVrbcuWLTG7wZYtW2ZZWVl+NwNxjKAcAAAAKGHTpk1z97t27Qree8uKUu/evc3vgPyay8+zjG3rLVZt35Fh/6z+2zJ2V/W7KYhTBOUAAACAT8ollrPyieXdfVmkHnIF5EN7p1nj2uUtFn33+0YbPTXLsrPpLUcpCcqXLFli++23X/G0BgAAAIgjE9tMtHiggLxFw4oWi5b9s9PvJiDORV3orWXLlm76s+effz6YbgMAAAAAAEogKP/555+tffv2NnToUKtXr55dddVV9sMPPxTiowEAAAAAiG9RB+Vt27a1cePG2cqVK23y5Mm2evVq69y5s7Vp08YtVzEHAAAAAABQjPOUJycnW58+fezVV1+1e++91xYtWmQ33XSTNWrUyC666CJLT08v7FsDAAAAcWHyisn26LJH3T2A+FTooHz27Nk2cOBAq1+/vushV0CuwPyzzz5zveinn3560bYUAAAAKGO+2PiFTV8/3d0DiE9RV19XAK609T///NN69eplU6dOdfeJif+L71WZ/fHHH7cDDjigONoLAAAAAED8BuUTJ060Sy+91C655BJX6C03TZo0saeffroo2gcAAAAAQJkVdVC+cOHCva6TmppqAwYMKGybAAAAAACIC1GPKVfq+muvvbbHci2bMmVKUbULAAAAAIAyL+qg/J577rFatWrtsbxOnTo2ZsyYomoXAAAAAABlXtRB+bJly1wxt0hNmza15cuXF1W7AAAAAAAo86IOytUjPm/evD2W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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "num_simulations = 100\n", + "rounds_per_game = 50\n", + "\n", + "martingale_winnings = []\n", + "basic_winnings = []\n", + "\n", + "print(\"Simulating 100 games to compare Martingale vs. Flat Betting... \\n\")\n", + "\n", + "for _ in range(num_simulations):\n", + " # 1. The Martingale Player\n", + " marty = MartingalePlayer(name=\"Marty (Martingale)\", starting_chips=1000)\n", + " \n", + " # 2. A Control Player (Uses the exact same playing strategy, but flat bets 10 chips)\n", + " control = Player(name=\"Control (Flat Bet)\", strategy=\"Counter\", starting_chips=1000)\n", + " \n", + " # Load them into the game\n", + " q10_table = Game(players_list=[marty, control], decks_in_shoe=6, verbose=False)\n", + " q10_table.run_simulation(num_games=rounds_per_game)\n", + " \n", + " # Record the net winnings\n", + " martingale_winnings.append(marty.chips - 1000)\n", + " basic_winnings.append(control.chips - 1000)\n", + "\n", + "# --- STATISTICAL ANALYSIS ---\n", + "marty_array = np.array(martingale_winnings)\n", + "control_array = np.array(basic_winnings)\n", + "\n", + "print(\"--- RESULTS AFTER 100 GAMES ---\")\n", + "print(\"MARTINGALE STRATEGY:\")\n", + "print(f\" Average Net Winnings: {np.mean(marty_array):.2f} chips\")\n", + "print(f\" Bankruptcy Rate: {(np.sum(marty_array <= -1000) / num_simulations) * 100:.1f}%\")\n", + "print(f\" Win Rate (Finished with >1000 chips): {(np.sum(marty_array > 0) / num_simulations) * 100:.1f}%\\n\")\n", + "\n", + "print(\"CONTROL STRATEGY (Flat Betting):\")\n", + "print(f\" Average Net Winnings: {np.mean(control_array):.2f} chips\")\n", + "print(f\" Bankruptcy Rate: {(np.sum(control_array <= -1000) / num_simulations) * 100:.1f}%\")\n", + "print(f\" Win Rate (Finished with >1000 chips): {(np.sum(control_array > 0) / num_simulations) * 100:.1f}%\")\n", + "\n", + "# --- PLOTTING THE COMPARISON ---\n", + "plt.figure(figsize=(12, 6))\n", + "\n", + "# Plot both histograms on top of each other with transparency (alpha)\n", + "plt.hist(basic_winnings, bins=20, alpha=0.6, color='gray', label='Control (Flat Bet)')\n", + "plt.hist(martingale_winnings, bins=20, alpha=0.7, color='orange', edgecolor='black', label='Martingale')\n", + "\n", + "plt.axvline(0, color='green', linestyle='dashed', linewidth=2, label='Break Even (0)')\n", + "plt.title('Martingale Betting Strategy vs. Flat Betting\\n(100 Games, 50 Rounds Each)')\n", + "plt.xlabel('Net Winnings (Chips)')\n", + "plt.ylabel('Frequency (Games)')\n", + "plt.legend()\n", + "plt.grid(axis='y', alpha=0.5)\n", + "\n", + "plt.show()" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python (ds)", "language": "python", - "name": "python3" + "name": "ds" }, "language_info": { "codemirror_mode": { @@ -116,7 +1255,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.12" + "version": "3.11.14" } }, "nbformat": 4, diff --git a/Labs/Lab.6/lab-6-uml.pdf b/Labs/Lab.6/lab-6-uml.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8a3e05ad2e91c0835ceceae36d1af8e02848e685 GIT binary patch literal 510224 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⪻k7`d45~H-&UB!8 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

e=;aB5KuX-muzzJE69#Hc<=ZF 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

sbzc(`J|RSi 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

C%4C)gR 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³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 b*8AHc2N;e&bP9Co4nIEuGc#04mf$}CI4A