{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 10wk-1: 퀴즈6\n", "\n", "최규빈 \n", "2024-05-08\n", "\n", "\n", "\n", "> **Caution**\n", ">\n", "> - 전북대 학생들을 시험당일 학생증을 지참할 것. (출석체크 및\n", "> 본인확인) 학생증 외에 신분증 여권등도 가능.\n", "> - 부정행위 (카카오톡 채팅을 통한 코드공유, 생성형모델 사용, 대리시험\n", "> 등) 적발시 F 처리함.\n", "> - 퀴즈 중 지각할 경우 지각사실을 기록함. 하지만 별 다른 감점은 하지\n", "> 않음.\n", "> - `.ipynb` 파일 형태로 제출된 답안지만 채점하며 그 외의 형식\n", "> (`.hwp`, `.py` 등)은 채점하지 않음. 즉 0점 처리함." ], "id": "10eb4a38-70c8-44d3-be1b-90156d55cfdb" }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [] }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import urllib.request" ], "id": "f4e7c4f4-d8b9-4418-9553-df9108f7630e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. MNIST – 40점\n", "\n", "> 모두 맞출경우만 정답으로 인정\n", "\n", "아래의 코드를 실행하여 MNIST 자료를 불러오라." ], "id": "3640a674-90a8-4363-aa2b-86421fb62e23" }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [] }, "outputs": [], "source": [ "# URL 설정\n", "url = 'https://github.com/guebin/PP2023/raw/main/posts/02_DataScience/mnist.npz'\n", "\n", "# URL에서 파일 다운로드\n", "urllib.request.urlretrieve(url, './mnist.npz')\n", "\n", "# 데이터 로드\n", "data = np.load('./mnist.npz')\n", "xtrain, ytrain, xtest, ytest = data['x_train']/255, data['y_train'], data['x_test']/255, data['y_test']\n", "\n", "# mnist.npz 삭제\n", "!rm mnist.npz" ], "id": "30b2da13-6b5c-4bf9-b0fe-6e4fab93c256" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(1)` xtrain, xtest를 합쳐서 shape이 (70000,28,28) 인 numpy array를\n", "생성하고 이것을 `X`에 저장하라.\n", "\n", "`(풀이)`" ], "id": "e39e4465-1984-4fc1-8eef-5192c0425751" }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [] }, "outputs": [], "source": [ "X = np.concatenate([xtrain,xtest])\n", "y = np.concatenate([ytrain,ytest])" ], "id": "633c482b-287d-4985-8e75-d4cd68ab8a0d" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(2)` 아래의 코드에 43052대신 본인 학번 끝의 5자리를 입력하여 (3,3)\n", "크기의 난수를 생성하라." ], "id": "fc00d403-1dfd-4bcb-b9a9-db0b7f7fd686" }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [] }, "outputs": [], "source": [ "np.random.seed(43052)\n", "np.random.binomial(n=1,p=0.5,size=(3,3))" ], "id": "543eb619-bcf3-4bb9-87f5-9fa9e2b5279e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "위에서 생성된 난수를 저장된 `X`의 평균이미지를 concat하여 시각화하라.\n", "\n", "> 주의: 시각화하는 이미지는 (84,84) 의 shape을 가지고 있어야 한다.\n", "\n", "`(풀이)`" ], "id": "cc69bd42-c214-497b-9967-611c73e6cc31" }, { "cell_type": "code", "execution_count": 22, "metadata": { "tags": [] }, "outputs": [], "source": [ "X0 = X[y==0].mean(axis=0)\n", "X1 = X[y==1].mean(axis=0)" ], "id": "b5122649-da64-4f24-b121-b4d693560dcd" }, { "cell_type": "code", "execution_count": 24, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGgCAYAAADsNrNZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9h\nAAAPYQGoP6dpAAA8bElEQVR4nO3dfXBV9Z0/8HcS8iRJLiQhNwkkECg2Pm4VFaJuHzSWYW0Xl4xb\nO3SLD1NHN6jA7FrTit1qNdTdWalbxNVlEadSVmYVW53q1LjqaMNTXK2WbgiYkiAkPObeJJAHkvP7\ng/H+ej7fD5x7b0745t68XzN3xu/JOfeeez738PV8P+fzPSmO4zggIiI6x1Jt7wAREY1P7ICIiMgK\ndkBERGQFOyAiIrKCHRAREVnBDoiIiKxgB0RERFawAyIiIivYARERkRXsgIiIyIpR64DWrFmDGTNm\nICsrC3PnzsX27dtH66OIiCgBpYzGXHD/9V//he9+97t4+umnMXfuXKxevRqbN29Gc3MzioqKzrrt\n8PAwDhw4gNzcXKSkpPi9a0RENMocx0F3dzdKS0uRmnqW6xxnFFx11VVObW1tpD00NOSUlpY69fX1\nntu2t7c7APjiiy+++ErwV3t7+1n/vfd9CG5gYABNTU2orq6OLEtNTUV1dTUaGxuN9fv7+xEOhyMv\nh5NzExElhdzc3LP+3fcO6MiRIxgaGkIwGHQtDwaD6OjoMNavr69HIBCIvMrLy/3eJSIissArjWL9\nLri6ujqEQqHIq7293fYuERHROTDB7zcsLCxEWloaOjs7Xcs7OztRXFxsrJ+ZmYnMzEy/d4OIiMY4\n36+AMjIyMGfOHDQ0NESWDQ8Po6GhAVVVVX5/HBERJSjfr4AAYMWKFViyZAmuuOIKXHXVVVi9ejV6\ne3tx2223jcbHERFRAhqVDuhb3/oWDh8+jIceeggdHR340pe+hNdff924MYGIiMavUSlEHYlwOIxA\nIGB7N4iIaIRCoRDy8vLO+Hfrd8EREdH4xA6IiIisYAdERERWjMpNCOTtXE60OsbSfElHxlKLbTTr\neG2jxVEu82qfaRn551yd28kQR14BERGRFeyAiIjICnZARERkBTsgIiKygjch+EAmHSdMMA9rdna2\nq609J0Muy8jIcLWHh4eNbeSygYEBY52+vj5X++TJk672iRMnjG0GBwdd7aGhIWOdZEiCSjKW8mmO\nWmzlZLo5OTnGOrIYTxZbn3feecY28rO02Pb09LjaoVDorG0A6O3t9XxfGe9kjHU0/Di3tXPdj3Nb\nnteAP+f2uYw1r4CIiMgKdkBERGQFOyAiIrKCOaA4eOUJ0tPTjW3kOPDUqVONdUpKSlxtmTfQxmbl\nOHA4HDbWOXbs2Fnb2vvK8WdtjDrR8wJawWBaWpqrnZWV5Wpr4/lTpkxxtbXYTp8+/azr5OfnG9vI\nPIE2ni8fc9/W1uZqt7a2GtscOHDA1T569KixjvwsLQeYbLTfgx/ntjyvAX/ObXkea8viObeZAyIi\noqTHDoiIiKxgB0RERFYwB+QDr5wQYI4dT5w40VhH5gEKCwtdbW1stru723MdWfcRzySXySCamg5Z\n0zNp0iRXu7S01NimoqLC1f7CF77guY58OrD2EEa5f7J+AwCOHz/uahcVFbnaWk2S/C1qsZY5H1lf\nkoy/D40f57aW3/Pj3Jbntba/Y/3c5hUQERFZwQ6IiIisYAdERERWsAMiIiIreBOCD6J5CqWkFbTJ\n4jSZvDx16pSxjbZMksnr/v7+s/4dsFuc5odoigploSdgxqC4uNjVnjVrlrHN+eef72rLolPALFaV\nNwdo+ytvBNBumpg8ebKrLeOkFRBHM6mlTHDL38x4KEwF/Dm35W8K8Ofc1s7bRDu3eQVERERWsAMi\nIiIr2AEREZEVzAGNgmiKv7QckCxGlHkDWQwIAF1dXa62HAMGzEkM5UST2gPJxtI4sV9kDkV7CJw8\n5jKfM3PmTGOb8vJyV1srPJTkBKBabOX4vZYDkrkk+buSOSzALHCUxawAcOTIkbNuM15yQFI857ZW\nZOzHua1NPJxo5zavgIiIyAp2QEREZAU7ICIisoIdEBERWcGbEHwQTbGaXKYVQcrktZwx+fDhw8Y2\nMsmoJSZlAlkmPLWCN62AMZFosxbLma5lESdgznY9Y8YMV7usrMzYRs6YrSXo5U0HnZ2drrYWWxkn\n7TcjbzKYNm2aq52dnW1sI2fM1p7YuX///rPur3azSzLy49zWbkrx49yW5zWQeOc2r4CIiMgKdkBE\nRGRFzB3Qu+++i29+85soLS1FSkoKtmzZ4vq74zh46KGHUFJSguzsbFRXV6OlpcWv/SUioiQRcw6o\nt7cXf/EXf4Hbb78dixYtMv7++OOP48knn8SGDRtQUVGBlStXYv78+di1axeysrJ82emxThtjlePE\n2rGQ+Qc5Ni/zCAAQCoU81+np6XG15djyWBoT9ks0RZuyGBAwcyiyreWNZGxlEScA7Nu3z9X+05/+\n5Gp3dHQY28jxfO03I4sV5aSmskgWMJ/YqR0HmdfS8k/jUTzntvYUXT/ObXleA4l3bsfcAS1YsAAL\nFixQ/+Y4DlavXo0HH3wQCxcuBAA8//zzCAaD2LJlC2655ZaR7S0RESUNX3NAra2t6OjoQHV1dWRZ\nIBDA3Llz0djYqG7T39+PcDjsehERUfLztQP6fBhB3mIYDAbVIQYAqK+vRyAQiLy021yJiCj5WK8D\nqqurw4oVKyLtcDiclJ2QHJuXY+yAWXMi6we0CQtlfcaxY8eMdeR2Y31cOB7y+Go5C3nMtfoX+dsr\nLCx0tbXckhyb37t3r7GOvBFH5oBkLgcwJyPVanrk9y4oKHC15f4DZg5ItgEgNzfX1WYO6My8zm15\nXgP+nNvaNol2bvt6BfR5UZw8cJ2dneqsvMDp4sC8vDzXi4iIkp+vHVBFRQWKi4vR0NAQWRYOh7Ft\n2zZUVVX5+VFERJTgYh6C6+npwZ49eyLt1tZWfPjhh8jPz0d5eTmWLVuGn/zkJ5g9e3bkNuzS0lLc\ndNNNfu43EREluJg7oJ07d+JrX/tapP15/mbJkiV47rnncP/996O3txd33nknurq6cO211+L1118f\nNzVAREQUnZg7oK9+9atnfYJeSkoKHn74YTz88MMj2rFEph0fOTmmVpwmn74pi8q0GwwOHjzoasvi\nNcBMZifD000lmQjWnnYqE/JTp0411pF3cMoEfW9vr7FNe3u7q717925jHXljwqFDh1ztvr4+YxsZ\nJ22SUzkhpWxr7yuPjfZ0Xvk/jNo641E857Y8rwF/zm15Xp9p/8YyzgVHRERWsAMiIiIr2AEREZEV\n1gtRxwuZS5g9e7axjixOk7mFtrY2Y5toHhSWaOPC8UhLS3O1ZSElYOZ3tEJUWUQoC/tk7gaA665Q\n4PSdoZKcCUTmkrT8TjTFtXL/5Pto7xtNsaI8nrIt9w0YH78zjde5rT2Qzo9zOxmON6+AiIjICnZA\nRERkBTsgIiKygh0QERFZwZsQRoE2Y7KcjLWiosJzO1mcpiW3ZeFhos2G6xeZJNdmGy8qKnK15czR\nwOnJcf+cnKV6//79xjYyoazdqCBvOoimONjrRgDAvDFB7r+2jfyNyKLIaPdvPIrn3Na24bl9Gq+A\niIjICnZARERkBTsgIiKygjkgH8jJCLWH6s2cOdPV1orTTp065Wrv27fP1T5w4ICxDcfqT5OTZWo5\nIHnMc3JyjHXk8ZNj9VoMZM5Hm7DUK05aYaf8TtoEq/J7yrbMCWn7ou2vXCZ/m+OFH+e2dux4bp/G\nKyAiIrKCHRAREVnBDoiIiKxgDigOcrxejrPLSS8BoKyszNWOpjagpaXF1T5x4oSxTTKOC8dD1sNo\nk5HKZVp+RNbEHD9+3NU+evSosU1PT4+rHc2DwuRvSHvgm8xRyTomwHyo3pQpU1xtbQJTWV8ivyNg\n1j/JB9sl4+9Oy8P5cW5rD5vjuX0ar4CIiMgKdkBERGQFOyAiIrKCHRAREVnBmxA8RFMgKIv/SktL\njW3kxJfak0sPHz7sasuJL7WCNrl/4/VJlTImWVlZxjoyoSyLDAHzJoSTJ0+62jIZD5iTRGrvKxPT\ncn+1mybkE1tnzZplrDNjxgxXe/LkyWfdN8BMisvfHWDemKD9XhNdNDeC+HFua8fXj3M7Gc5rXgER\nEZEV7ICIiMgKdkBERGQFc0CCHGfVCkblpJByDFg+oAow8w9acZocFw6Hw662lluQy7QckJekGEsW\nx0H7TtF8T/kAt2gmBJUFo9rnyP2bOHGiq639ZuSDzWbPnm2sIwtR5f5q+Qc58eXBgweNdWQOSHto\nXSLRzgt5bmux9ePc1h5iyHP7NF4BERGRFeyAiIjICnZARERkBTsgIiKyYlzfhKAl9WTiT5sxWT4V\nUSYqtacmDg0NudodHR3GOjIZLAvatBsiZNI8midXjvXEZDxkwaVWMCqXyZgAQHZ2tqstk86y8BMw\nf0faE0blzQHyNyNvJgCA8vJyV1ubDVu+r5ytu7293dimra3N1dZ+i3LG7ER7IqqMiZbkl+e2dt76\ncW5rN3nw3D6NV0BERGQFOyAiIrIipg6ovr4eV155JXJzc1FUVISbbroJzc3NrnX6+vpQW1uLgoIC\n5OTkoKamBp2dnb7uNBERJb6YckDvvPMOamtrceWVV+LUqVP4wQ9+gK9//evYtWtXpLBu+fLleO21\n17B582YEAgEsXboUixYtwvvvvz8qX2AktHHhaAoP5QSFsq09hVI+8fDQoUPGOvIplHJsWRsnlsu0\np3HK/EiijRNHw+tJpoCZH9HyLjLPMnPmTFdbFpACwPTp011tOYEpYMYpEAi42jLXAJgFrtrEorLQ\ntLW11dXeu3evsY3MAR05csRYR+bLtM8ey+S5rU00Ks9teR5ry+I5t+V5DfhzbmsxSbRzO6YO6PXX\nX3e1n3vuORQVFaGpqQlf/vKXEQqFsG7dOmzcuBHXXXcdAGD9+vW44IILsHXrVsybN8+/PSciooQ2\nohxQKBQCAOTn5wMAmpqaMDg4iOrq6sg6lZWVKC8vR2Njo/oe/f39CIfDrhcRESW/uDug4eFhLFu2\nDNdccw0uvvhiAKdvP8zIyDAuW4PBoHqrJ3A6rxQIBCKvsrKyeHeJiIgSSNx1QLW1tfjkk0/w3nvv\njWgH6urqsGLFikg7HA6PWickawPkffaAOcar5YDkw8Pkw8+0sVl5ZdfT02OsI5fFM06s5bUSbfw+\nHjJnod34InMfhYWFxjoyNxMMBl1tbTJK+dnaw9vk2Hw0DxeTtThaPcmePXtc7d27d7va+/btM7aR\nx0b7LSZ63Y88t7XcjTy3tYcC+nFua8fXj3M7Gc7ruDqgpUuX4tVXX8W7776LadOmRZYXFxdjYGAA\nXV1drqugzs5O9cQFTheDacWeRESU3GIagnMcB0uXLsXLL7+Mt956y5gufs6cOUhPT0dDQ0NkWXNz\nM9ra2lBVVeXPHhMRUVKI6QqotrYWGzduxCuvvILc3NxIXicQCCA7OxuBQAB33HEHVqxYgfz8fOTl\n5eGee+5BVVUV74AjIiKXmDqgtWvXAgC++tWvupavX78et956KwDgiSeeQGpqKmpqatDf34/58+fj\nqaee8mVniYgoecTUAUVT5JSVlYU1a9ZgzZo1ce/UaJFJPC1hLxN/WvJSriOPizYZpUzqap8tCxij\nSQRH85TERCtOi4dM/GvFlTJhr8VWksliLZcpk9eygBQwC2U/L2H4nHaDgbyBQO4/AHz66aeutnza\nqSy+BczCSe13lmi/Ga9zW0vyy/hr6/hxbmuFyX6c24kWIw3ngiMiIivYARERkRXsgIiIyIpx9UA6\nOWaqjaHK4i45dg+YhWVynF2OsQNmYZyWA5LjwnJCTa2gTe6f9pC1aL53opPfW+ZYAHOiTm08X04k\nKXMsf1739jk584eWS5Cxk5+zf/9+Y5vPPvvM1dZmEzl27JirLb+T9vtNxslpvX7jWtGmPDba+eXH\nua3le/w4t7W4JVoseQVERERWsAMiIiIr2AEREZEV7ICIiMiKFGeMZa3C4bAxI/Fo0W4E8KOATXtf\nWVSmrSNDIZOQctZlbZ1kmCF3tMQTWzkbcnZ2tuc2WgGhjK0snNViK5dpNxTIBPd4uOEkGqNVdB7P\nua3FYLyc26FQCHl5eWf8O6+AiIjICnZARERkBTsgIiKyYlwVokramKpcphWRaeO1NPZFU2QcTXEi\njX0y1tq5Ls9tntfnHq+AiIjICnZARERkBTsgIiKygh0QERFZwQ6IiIisYAdERERWsAMiIiIr2AER\nEZEV7ICIiMgKdkBERGQFOyAiIrKCHRAREVnBDoiIiKxgB0RERFawAyIiIivYARERkRXsgIiIyAp2\nQEREZAU7ICIisoIdEBERWRFTB7R27VpceumlyMvLQ15eHqqqqvCb3/wm8ve+vj7U1taioKAAOTk5\nqKmpQWdnp+87TUREiS+mDmjatGlYtWoVmpqasHPnTlx33XVYuHAh/vCHPwAAli9fjl//+tfYvHkz\n3nnnHRw4cACLFi0alR0nIqIE54zQ5MmTnf/4j/9wurq6nPT0dGfz5s2Rv/3xj390ADiNjY1Rv18o\nFHIA8MUXX3zxleCvUCh01n/v484BDQ0NYdOmTejt7UVVVRWampowODiI6urqyDqVlZUoLy9HY2Pj\nGd+nv78f4XDY9SIiouQXcwf08ccfIycnB5mZmbjrrrvw8ssv48ILL0RHRwcyMjIwadIk1/rBYBAd\nHR1nfL/6+noEAoHIq6ysLOYvQUREiSfmDuiLX/wiPvzwQ2zbtg133303lixZgl27dsW9A3V1dQiF\nQpFXe3t73O9FRESJY0KsG2RkZOALX/gCAGDOnDnYsWMHfvazn+Fb3/oWBgYG0NXV5boK6uzsRHFx\n8RnfLzMzE5mZmbHveYJLSUk5Z5/lOM45+6zxSMZSi20063hto8VRLvNqn2kZRSee2MYTa8Cf2I71\nWI+4Dmh4eBj9/f2YM2cO0tPT0dDQEPlbc3Mz2traUFVVNdKPISKiJBPTFVBdXR0WLFiA8vJydHd3\nY+PGjXj77bfxxhtvIBAI4I477sCKFSuQn5+PvLw83HPPPaiqqsK8efNGa/+JiChBxdQBHTp0CN/9\n7ndx8OBBBAIBXHrppXjjjTdwww03AACeeOIJpKamoqamBv39/Zg/fz6eeuqpUdlxIiJKbCnOGBsk\nDIfDCAQCtncjJnL8dsIEs1/Pzs52tXNzc4115LKMjAxXe3h42NhGLhsYGDDW6evrc7VPnjzpap84\nccLYZnBw0NUeGhoy1hljPx1fyFimprpHqbXYyhxmTk6OsU5eXp6rLX/j5513nrGN/Cwttj09Pa52\nKBQ6axsAent7Pd9Xxns8xhowY6Dlq2W8vWINmPHWflcyLl6x1pbJWGvvO5qxDoVCxvH4c5wLjoiI\nrGAHREREVrADIiIiK2KuAyLvseP09HRjG5nfmTp1qrFOSUmJqy3HTrWxWZnf0aYyOnbs2Fnb2vvK\n3JKWf0r0vIBWe5GWluZqZ2Vludpa7m7KlCmuthbb6dOnn3Wd/Px8YxuZA9RydXKWkba2Nle7tbXV\n2ObAgQOu9tGjR4115GdpOcBEEk+sATPeMtaAGUuvWANmvGWsATMGXrEGzHjLWANmvG3GmldARERk\nBTsgIiKygh0QERFZwQ6IiIis4E0IPoimoE3emDBx4kRjHZmYLCwsdLW1pH93d7fnOrIYLZ5JLpNB\nNAXDstBQPl6ktLTU2KaiosLV/nyy3rOtEwwGXW2tWFHunywOBoDjx4+72kVFRa62VhQrf4tarGUi\nWhYvj/Xfhx+xBsx4yzgCZry9Yg2Y8db2T8bbK9aAGW/thigZO69Ya9v4hVdARERkBTsgIiKygh0Q\nERFZwRyQD+J5CJQ2NisLT2VO6NSpU8Y22jJJjiX39/ef9e+AWXg61sf8Ja3wUObmtOI/GQP5MMVZ\ns2YZ25x//vmutixEBMwCRjlWr+2vHJvX8gSTJ092tWWctAJiORmlLGYGzLyh/M2MtcJUrzxsPLEG\nzHjLWANmvL1ire2vdjxlvL1iDcQ3ObFXrM+0f37gFRAREVnBDoiIiKxgB0RERFawAyIiIit4E8Io\niKawU7sJQRanyWSmViDW1dXlamsJRDlDtpz9VktUJvpNCBqZ1NWeQiqPuUwwz5w509imvLzc1dZm\ntpbkjMRabOXNIdpNCF6Fh1piXRYvywJHADhy5MhZtxlrNyFIfsQaMOMtYw14x1ubbVzGW7sRSH6H\naIpMZbxl3AAz3l6xBngTAhERJRl2QEREZAU7ICIisoI5IB9EU4gql2mFcXIsWU5iePjwYWMbmb/R\nnogqx3Tl+LNWzKoVMCYSbUJYOfmkLOwDzMknZ8yY4WqXlZUZ28hJLLXxcpkH6OzsdLW12Mo4ab8Z\nOeY/bdo0Vzs7O9vYRk5iKZ/ECwD79+8/6/5quUabZLz9iDVgxlubsFTG2yvWgBlvLQco4+0Va8CM\ntzZhqYy3V6yB0Ys3r4CIiMgKdkBERGQFOyAiIrKCOaBRoOVPZA4oKyvLWEeOScuxWq2eIBQKea7T\n09Pjasu8UaLnezTR1MzIOhDAHFeXbS2XIGMr6yoAYN++fa72n/70J1e7o6PD2EbmBbTfjKwDk5Nc\nanUr8mGI2nGQuQ4t/zSWeNXMxBNrILoJQGW8vWINmPHWckAy3l6xBsx4aw++lMfCZqx5BURERFaw\nAyIiIivYARERkRXsgIiIyArehHCOyIShVtAmC+FkYaqWqJRFY8eOHTPWkdsl400H8vhqiVR5zLUC\nTFl4WFhY6GprNzfIGz/27t1rrNPS0uJqy8S0TDAD5gSVWlGp/N4FBQWuttx/wExMa4nq3NxcV3ss\n3YSgJd/l/vkRa8CMt3aTj4y3V6wBM97aZKQy3l6xBszvoMVWLrMZa14BERGRFeyAiIjIihF1QKtW\nrUJKSgqWLVsWWdbX14fa2loUFBQgJycHNTU16txCREQ0vsWdA9qxYwf+/d//HZdeeqlr+fLly/Ha\na69h8+bNCAQCWLp0KRYtWoT3339/xDubKLRiNTlZoiw6BcwHYsmCUS2/c/DgQVdbFqYC5vhyMjxc\nTpLj49oDyOT4+NSpU4115ASwcry8t7fX2Ka9vd3V3r17t7GOzBMcOnTI1e7r6zO2kXHSJjmVE83K\ntva+8thoDzaTRZDaOrZoOSD5nfyINWDGW8YaMOPtFWvAjIt2Tsp4e8Vae1/tPJCxtBnruK6Aenp6\nsHjxYjz77LOuSuFQKIR169bhX//1X3Hddddhzpw5WL9+PX73u99h69atvu00ERElvrg6oNraWtx4\n442orq52LW9qasLg4KBreWVlJcrLy9HY2Ki+V39/P8LhsOtFRETJL+YhuE2bNuGDDz7Ajh07jL91\ndHQgIyPDuAUyGAyqc10BQH19PX784x/HuhtERJTgYroCam9vx3333YcXXnhBnRgxHnV1dQiFQpGX\nNsZKRETJJ6YroKamJhw6dAiXX355ZNnQ0BDeffdd/PznP8cbb7yBgYEBdHV1ua6COjs7jaf5fS4z\nM9N4emEykgnO2bNnG+vIwlPZGbe1tRnbRPOkymS86UBKS0tztWVxHWAmnbXiRHn1Lot2tYTynj17\nXO3W1lZjHTkCIJPb2g0G0RTXyv2T76O9bzSFyPJ4yrZ2I8C5+p3JfQHMePsRa8CMt4w1YMbbK9aA\nGZdoimu9Yq0t8yPW2v75FeuYOqDrr78eH3/8sWvZbbfdhsrKSnz/+99HWVkZ0tPT0dDQgJqaGgBA\nc3Mz2traUFVV5csOExFRcoipA8rNzcXFF1/sWjZx4kQUFBRElt9xxx1YsWIF8vPzkZeXh3vuuQdV\nVVWYN2+ef3tNREQJz/e54J544gmkpqaipqYG/f39mD9/Pp566im/P4aIiBLciDugt99+29XOysrC\nmjVrsGbNmpG+dcLSJqyUObCKigrP7WThqZZbkMVoyTjRaDTkuLU22WtRUZGrrU3mKPORctLI/fv3\nG9vIXJ2WJ5J5gGiKg6MZm5d5Arn/2jbyNyILnqPdP1u07yTj7UesATPe2k1SMt5esQbM46l9J7nM\nK9baNtq/BzLeNmPNueCIiMgKdkBERGQFOyAiIrKCD6TzgZxoNC8vz1hn5syZrras+QGAU6dOudr7\n9u1ztQ8cOGBsM5bH6s8lOYGilgOSxzwnJ8dYRx4/mYfTYuCVAwC846TVgcjvpE0sKb+nbGt5Arkv\n2v7KZfK3aZM2Wab83n7EGjDj7Vd+T8Zb+04y3l6xBsx4a/knub82Y80rICIisoIdEBERWcEOiIiI\nrGAHREREVvAmhDjIBKJM/MmJEAGgrKzM1daKVWUStKWlxdU+ceKEsc14velAkkV62mSkcpmWoJdF\nesePH3e1jx49amzT09PjakdTeBhNElomzmVxJWA+6XPKlCmutjaBqSxelt8RMIsyo3mC57mifScZ\nWz9iDZjxlrEG/LnBRLtJQsbbK9aAeWy0p6bK7+kVa2D04s0rICIisoIdEBERWcEOiIiIrGAOyEM0\n47eyIKy0tNTYRk6GqD047vDhw662nAhRKxCT+2fzQWE2yZhoT+yVeQBZQAyYeYGTJ0+62tr4uJzw\nUXtfmfOT+6vlrORD1GbNmmWsM2PGDFd78uTJZ903wMw1yt8dYOYJtN+rLVq+TMbbj1gDZry14ynf\n2yvWgBlv7YF5Mt5esdb2TyuulfG2GWteARERkRXsgIiIyAp2QEREZAU7ICIisoI3IQgyia8VjMpZ\nauUNBvLpp4CZFNWSg/Kmg3A47GpriVS5TLsJwUsy3KQgj4P2naL5nvKJktHMSC2LCLXPkfs3ceJE\nV1v7zcin5s6ePdtYRxYnyv3VbjCQMzwfPHjQWEcmprWnptqinQfymPsRa8CMdzSzanvFGojuCcky\n3l6xBsx4a7O3y3jbjDWvgIiIyAp2QEREZAU7ICIismJc54C0fIkcv9UmMZRPPJU5IO2JqENDQ652\nR0eHsY4cm5UFYVo+So5jR/M0w2TI+UiyAE8rGJXLZEwAIDs729WWY/WyGBAwf0faE0bleL38zcjx\nfQAoLy93tbXJSOX7yskz29vbjW3a2tpcbe23KCexHEtPRNWKQWVs/Yg1YMZb+zdDxtsr1oAZbxlr\nwIy3V6wBM94y1oAZb5ux5hUQERFZwQ6IiIisYAdERERWjOsckFZPEE3dh5x8VLa1B2bJh8kdOnTI\nWEc+GEqOW2s5ILlMexiaHDNPxhxQPA8X0/Iuctx95syZrrZW0zF9+nRXW5vUUsYpEAi42lqeQNac\naLkPWffR2trqau/du9fYRuYFjhw5YqwTzSSctmh1Kl4PDown1oAZbxlrwIy3V6wBM95afZE85l6x\nBsx4azkgGW+bseYVEBERWcEOiIiIrGAHREREVrADIiIiK8bVTQiyiEwWcQLmDQTaTQjyaYbyaYxa\nEk9OLNrT02OsI5fFcxOCdmPFWEogjxaZSO3s7DTWkQnZwsJCYx2ZMA4Gg662VqwoP1t7oqS88UP+\nFrUbQ2SBoDZp6J49e1zt3bt3u9r79u0ztpHHRvstjqXCU0krMpbfyY9YA2a8tc+W8faKtbaOjDVg\nxtsr1oAZb+08kPG2GWteARERkRXsgIiIyIqYOqB/+qd/QkpKiutVWVkZ+XtfXx9qa2tRUFCAnJwc\n1NTUqJeAREREMeeALrroIrz55pv//w3+LAexfPlyvPbaa9i8eTMCgQCWLl2KRYsW4f333/dnb0dI\n5ke0fInMqWhFpXIdOZ6rTUYpx1m1z5YFbdGMzUbzALpkLDyV5Di8Vlwpx9C12EoyD6flgGROUCsq\nlMWToVDI1dbyO3I8X+4/AHz66aeutnwAmTZhpSyK1n5nY/k3o+XYZLz9iDVgxlvGGjDj7RVrwIy3\nlquT38Er1oAZbxlrwIy3zVjH3AFNmDBBPQlDoRDWrVuHjRs34rrrrgMArF+/HhdccAG2bt2KefPm\njXxviYgoacScA2ppaUFpaSlmzpyJxYsXR+42aWpqwuDgIKqrqyPrVlZWory8HI2NjWd8v/7+foTD\nYdeLiIiSX0wd0Ny5c/Hcc8/h9ddfx9q1a9Ha2oq//Mu/RHd3Nzo6OpCRkWHMixYMBtXnjXyuvr4e\ngUAg8iorK4vrixARUWKJaQhuwYIFkf++9NJLMXfuXEyfPh0vvvii8XCnaNXV1WHFihWRdjgcZidE\nRDQOjKgQddKkSTj//POxZ88e3HDDDRgYGEBXV5frKqizs1PNGX0uMzNTferoaJDJNi35Jos2tZl3\nZSFXNIk/WfSq3YQgk4Nyhl+tYFDun5ZIjeZ7Jzr5vbXEr5w9WLtZRM5SLhO/06ZNM7aRV/1awbCM\nnfyc/fv3G9t89tlnrrY2knDs2DFXW34n7feb6LOja79xGW8/Yg2Y8ZaxBsx4e8UaMOMtYw2Y8faK\nNWDGWytCH0vxHlEdUE9PD/bu3YuSkhLMmTMH6enpaGhoiPy9ubkZbW1tqKqqGvGOEhFRconpCugf\n/uEf8M1vfhPTp0/HgQMH8KMf/QhpaWn49re/jUAggDvuuAMrVqxAfn4+8vLycM8996Cqqop3wBER\nkSGmDmj//v349re/jaNHj2LKlCm49tprsXXrVkyZMgUA8MQTTyA1NRU1NTXo7+/H/Pnz8dRTT43K\njhMRUWJLccbSgCBO34SgPUFwNGh5GLlMG8+XRW3RTAgqC0a1dWQo5HiuNhFiNGO+dFo8sZUTzWo3\n28htopl8UhZTarGVy7R8jldR4Rg7vc8ZP2INmPHWClq9JpbVCmdlbKM5t6MpIB1r8Q6FQsjLyzvj\n3zkXHBERWcEOiIiIrGAHREREVozrHBAREY0e5oCIiGhMYgdERERWsAMiIiIr2AEREZEV7ICIiMgK\ndkBERGQFOyAiIrKCHRAREVnBDoiIiKxgB0RERFawAyIiIivYARERkRXsgIiIyAp2QEREZAU7ICIi\nsoIdEBERWcEOiIiIrGAHREREVrADIiIiK9gBERGRFeyAiIjICnZARERkBTsgIiKygh0QERFZwQ6I\niIisYAdERERWTLC9A+NVSkrKOfssx3HO2WeR7lzFm7G2j7GOHq+AiIjICnZARERkRcwd0GeffYbv\nfOc7KCgoQHZ2Ni655BLs3Lkz8nfHcfDQQw+hpKQE2dnZqK6uRktLi687TUREiS+mHNDx48dxzTXX\n4Gtf+xp+85vfYMqUKWhpacHkyZMj6zz++ON48sknsWHDBlRUVGDlypWYP38+du3ahaysLN+/wFgg\nx3wnTDAPa3Z2tqudm5trrCOXZWRkuNrDw8PGNnLZwMCAsU5fX5+rffLkSVf7xIkTxjaDg4Ou9tDQ\nkLFOMoxBx0ob35fxlrEGzNh6xRowY6vFX8bbK9aAGW8Za8CM93iMNeDPua2d636c2zLWgD/n9rmM\ndUwd0E9/+lOUlZVh/fr1kWUVFRWR/3YcB6tXr8aDDz6IhQsXAgCef/55BINBbNmyBbfccotPu01E\nRIkupiG4X/3qV7jiiitw8803o6ioCJdddhmeffbZyN9bW1vR0dGB6urqyLJAIIC5c+eisbFRfc/+\n/n6Ew2HXi4iIkl9MHdCnn36KtWvXYvbs2XjjjTdw9913495778WGDRsAAB0dHQCAYDDo2i4YDEb+\nJtXX1yMQCEReZWVl8XwPIiJKMDF1QMPDw7j88svx2GOP4bLLLsOdd96J733ve3j66afj3oG6ujqE\nQqHIq729Pe73IiKixBFTDqikpAQXXniha9kFF1yA//7v/wYAFBcXAwA6OztRUlISWaezsxNf+tKX\n1PfMzMxEZmZmLLthnUxMpqa6+/H09HRjG5mInDp1qrHOnx8zAMjLy3O1teSgTERqQ5jHjh07a1t7\n32gS4OMhMe0Va8CMt5Z0lvH2ijVgHl8t6Szj7RVr7X2jSYCPx1gD/pzbMtaAP+e2Fls/zu1zGeuY\nroCuueYaNDc3u5bt3r0b06dPB3D6hoTi4mI0NDRE/h4Oh7Ft2zZUVVX5sLtERJQsYroCWr58Oa6+\n+mo89thj+Nu//Vts374dzzzzDJ555hkAp/8PYtmyZfjJT36C2bNnR27DLi0txU033TQa+09ERAkq\npg7oyiuvxMsvv4y6ujo8/PDDqKiowOrVq7F48eLIOvfffz96e3tx5513oqurC9deey1ef/31pK0B\nIiKi+MQ8Gek3vvENfOMb3zjj31NSUvDwww/j4YcfHtGOJZJ48gQTJ0401snPz3e1CwsLXW1tbLa7\nu9tznd7e3rPur7bNeBjzj0e8eQIZb69YA2YMZKy1dbxirW3DWJ+ZH+e2jDXgz7ktY63t71g/tzkX\nHBERWcEOiIiIrGAHREREVvCBdD6IZ0xdyxPI2gA5dnzq1CljG22ZJCcf7O/vP+vfgfFZBxKNeMfU\nZby9Yg2YsfUj1to647XGKxp+nNtajZcf57Z23ibauc0rICIisoIdEBERWcEOiIiIrGAHREREVvAm\nhFEQTaJauwkhEAi42lOmTHG1tadbdnV1udpa0llOYiifkqg9RXUsJSrHumgS1TLeXrEGzHjLWANm\nvL1iDZjx5k0I0Yvn3JaxBvw5t7WJhxPt3OYVEBERWcEOiIiIrGAHREREVjAH5INocgByWUZGhrGO\nLE6TjzY/fPiwsY0c49XGheWkhnK8WSt40/ICFF1stXVkvL1iDZjx1sbzZby9Yg2Y8Wasz8yPc1sr\nMvbj3NYmp020c5tXQEREZAU7ICIisoIdEBERWcEOiIiIrOBNCKMgmsI+7RHlpaWlrnZJSYmrffTo\nUWObUCjkuU5PT4+rHU0hIkUvmsI+GW+vWANmLGWstXW8Yq3tL0UvnnNbxhrw59yWsQYS79zmFRAR\nEVnBDoiIiKxgB0RERFYwB3SOpKSkuNqTJk0y1pkxY4arLQvYtKLCzs5OV/vYsWPGOnK7sT4unOhk\nrAEz3l6xBsy4yVgDZrwZ63PP69yWsQb8Obe1bRIt3rwCIiIiK9gBERGRFeyAiIjICnZARERkBW9C\nGAVaIWJqqruv14rTpk+f7mrLojLtBoODBw+62lqx4uDgoOf+Ufzk8ZSxBsx4e8UaMOMtYw2Y8Was\nR1c857aMNeDPuS1jfab9G8t4BURERFawAyIiIivYARERkRXMAZ0jEydOdLVnz55trCOL09rb213t\ntrY2YxtZrNbf32+sk2jjwolOxhow4+0Va8CMt1aIKuPNWJ97Xue2VmTsx7mdDLHmFRAREVnBDoiI\niKyIqQOaMWMGUlJSjFdtbS0AoK+vD7W1tSgoKEBOTg5qamrUYQMiIqKYckA7duzA0NBQpP3JJ5/g\nhhtuwM033wwAWL58OV577TVs3rwZgUAAS5cuxaJFi/D+++/7u9dj3IQJ5mEtLi52tSsqKjy3k7UB\nra2txjbd3d2udqJNRpgMZNxkrAEz3l6xBsx4y1gDjPe5Fs+5rW3Dc/u0mDqgKVOmuNqrVq3CrFmz\n8JWvfAWhUAjr1q3Dxo0bcd111wEA1q9fjwsuuABbt27FvHnz/NtrIiJKeHHngAYGBvCLX/wCt99+\nO1JSUtDU1ITBwUFUV1dH1qmsrER5eTkaGxvP+D79/f0Ih8OuFxERJb+4O6AtW7agq6sLt956KwCg\no6MDGRkZxrMwgsEgOjo6zvg+9fX1CAQCkVdZWVm8u0RERAkk7g5o3bp1WLBggTqnWSzq6uoQCoUi\nL60egoiIkk9chaj79u3Dm2++iZdeeimyrLi4GAMDA+jq6nJdBXV2dqpJ2c9lZmYiMzMznt0YM+Rk\nhHl5ecY6M2fOdLW14rRTp0652vv27XO1Dxw4YGzDySfPLW2iURlvGWvAjLdXrAEz3skw+WSi8ePc\nlrEGeG5/Lq4roPXr16OoqAg33nhjZNmcOXOQnp6OhoaGyLLm5ma0tbWhqqpq5HtKRERJJeYroOHh\nYaxfvx5Llixx3V4YCARwxx13YMWKFcjPz0deXh7uueceVFVV8Q44IiIyxNwBvfnmm2hra8Ptt99u\n/O2JJ55Aamoqampq0N/fj/nz5+Opp57yZUeJiCi5xNwBff3rXz/jWGRWVhbWrFmDNWvWjHjHxrKU\nlBRXW+awgsGgsY28uy+a4rSWlhZX+8SJE8Y2yTguPJZ4xRow463dyelVeCpjDZjxZqxHl4w14M+5\nrRUZ89w+jXPBERGRFeyAiIjICnZARERkBTsgIiKygk9E9aAlJtPT011tOf2QNjtEQUGBq609ufTw\n4cOu9v79+11traBN7p+2v+MhmekXefy8Yg2Y8ZaxBsx4e8UaMOOtxVYuY6yj5xVrwJ9zW8Ya8Ofc\nToZY8wqIiIisYAdERERWsAMiIiIrmAMS5DirVjB63nnnudpyDFibfFUWtGnFaXJcWD4bSZsIUy7T\n8gRekmEsOR7asZLx9oo1YMZbK1aV8faKNWDGVos/4x2deGIN+HNua/k9ntun8QqIiIisYAdERERW\nsAMiIiIrxnUOSBtTleOu2ni+fCiVHCfWHlo1NDTkamuPKT948KCrLesJtHxUWlqaq63VE0hjfVx4\ntMh4a+PuMt5esdbWkbEGzHh7xRow4y1jDXjHm7E+LZ5YA/6c2zLWAM/tz/EKiIiIrGAHREREVrAD\nIiIiK9gBERGRFeP6JgQtMSknJNSK0+QEhbKdkZFhbCOfeHjo0CFjna6uLldbJje1RKVcNjg4aKwz\nPDzsaidaotIvMt7a5JMy3l6xBsx4a0+3lPH2ijVgxlaLv4w3Y32aH7HWlsVzbstYA/6c2zLWQOLF\nm1dARERkBTsgIiKygh0QERFZMa5yQLI4TSvsk2O8Wg4oNzfX1c7KynK1tbFZOflgT0+PsY5cFs84\nsZbX0vYn2WlFxjLe2ni+jLdXrAHz+GoTi8rYesUaiC4HJOM9HmMNeJ/b8cQa8Ofc1s51P87tZIg1\nr4CIiMgKdkBERGQFOyAiIrKCHRAREVkxrm5CiOYJkzLxpyUv5Tqy+Ku3t9fYRs5kq332yZMnz7qN\nJpqnJCZacZofonnCpJb4lfH2ijVgxluLm/xsxtpfXud2PLEG/Dm3Zay1bTRe8U6GWPMKiIiIrGAH\nREREVrADIiIiK8ZVDkiOmWpjqLK4a2BgwFhHFpYdPXrU1dYmo5SFcVqOQo4LHz9+/Kyfq+2fVtAY\nzfdONtp3lMu0Qj55PL1iDZjx1gqcZby9Yq19tvZblPEej7EGvL93PLEG/Dm3tXyPH+d2NL/xsY5X\nQEREZAU7ICIisiKmDmhoaAgrV65ERUUFsrOzMWvWLDzyyCOuyz7HcfDQQw+hpKQE2dnZqK6uRktL\ni+87TkREiS2mHNBPf/pTrF27Fhs2bMBFF12EnTt34rbbbkMgEMC9994LAHj88cfx5JNPYsOGDaio\nqMDKlSsxf/587Nq1S53I8VyS48Daw9vkOGtfX5+xzrFjx1ztaCYElff0a+vI8Vs5Bqzti1wnGSYo\n9IN2HGS8tXyZPMZesQbMWGr1G3Idr1hr+6Ktw3if5nVuxxNrwJ9zW8vL8Nw+LaYO6He/+x0WLlyI\nG2+8EQAwY8YM/PKXv8T27dsBnD7Qq1evxoMPPoiFCxcCAJ5//nkEg0Fs2bIFt9xyi8+7T0REiSqm\nIbirr74aDQ0N2L17NwDgo48+wnvvvYcFCxYAAFpbW9HR0YHq6urINoFAAHPnzkVjY6P6nv39/QiH\nw64XERElv5iugB544AGEw2FUVlYiLS0NQ0NDePTRR7F48WIAQEdHBwAgGAy6tgsGg5G/SfX19fjx\nj38cz74TEVECi+kK6MUXX8QLL7yAjRs34oMPPsCGDRvwL//yL9iwYUPcO1BXV4dQKBR5tbe3x/1e\nRESUQJwYTJs2zfn5z3/uWvbII484X/ziFx3HcZy9e/c6AJz//d//da3z5S9/2bn33nuj+oxQKOQA\n4IsvvvjiK8FfoVDorP/ex3QFdOLECeMOj7S0tMjdGRUVFSguLkZDQ0Pk7+FwGNu2bUNVVVUsH0VE\nRMku+usfx1myZIkzdepU59VXX3VaW1udl156ySksLHTuv//+yDqrVq1yJk2a5LzyyivO73//e2fh\nwoVORUWFc/LkSV4B8cUXX3yNo5fXFVBMHVA4HHbuu+8+p7y83MnKynJmzpzp/PCHP3T6+/sj6wwP\nDzsrV650gsGgk5mZ6Vx//fVOc3Nz1J/BDogvvvjiKzleXh1QiuOMrdnrwuEwAoGA7d0gIqIRCoVC\nyMvLO+PfORccERFZwQ6IiIisYAdERERWsAMiIiIr2AEREZEV7ICIiMgKdkBERGTFmOuAxlhZEhER\nxcnr3/Mx1wF1d3fb3gUiIvKB17/nY24mhOHhYRw4cAC5ubno7u5GWVkZ2tvbz1pNS/EJh8M8vqOI\nx3d08fiOrpEcX8dx0N3djdLSUvUx5p+L6YF050JqaiqmTZsG4P8/az0vL48/sFHE4zu6eHxHF4/v\n6Ir3+EYzpdqYG4IjIqLxgR0QERFZMaY7oMzMTPzoRz9CZmam7V1JSjy+o4vHd3Tx+I6uc3F8x9xN\nCEREND6M6SsgIiJKXuyAiIjICnZARERkBTsgIiKygh0QERFZMWY7oDVr1mDGjBnIysrC3LlzsX37\ndtu7lJDq6+tx5ZVXIjc3F0VFRbjpppvQ3NzsWqevrw+1tbUoKChATk4Oampq0NnZaWmPE9eqVauQ\nkpKCZcuWRZbx2I7cZ599hu985zsoKChAdnY2LrnkEuzcuTPyd8dx8NBDD6GkpATZ2dmorq5GS0uL\nxT1OHENDQ1i5ciUqKiqQnZ2NWbNm4ZFHHnFNIjqqx9cZgzZt2uRkZGQ4//mf/+n84Q9/cL73ve85\nkyZNcjo7O23vWsKZP3++s379eueTTz5xPvzwQ+ev/uqvnPLycqenpyeyzl133eWUlZU5DQ0Nzs6d\nO5158+Y5V199tcW9Tjzbt293ZsyY4Vx66aXOfffdF1nOYzsyx44dc6ZPn+7ceuutzrZt25xPP/3U\neeONN5w9e/ZE1lm1apUTCAScLVu2OB999JHz13/9105FRYVz8uRJi3ueGB599FGnoKDAefXVV53W\n1lZn8+bNTk5OjvOzn/0sss5oHt8x2QFdddVVTm1tbaQ9NDTklJaWOvX19Rb3KjkcOnTIAeC88847\njuM4TldXl5Oenu5s3rw5ss4f//hHB4DT2NhoazcTSnd3tzN79mznt7/9rfOVr3wl0gHx2I7c97//\nfefaa68949+Hh4ed4uJi55//+Z8jy7q6upzMzEznl7/85bnYxYR24403Orfffrtr2aJFi5zFixc7\njjP6x3fMDcENDAygqakJ1dXVkWWpqamorq5GY2OjxT1LDqFQCACQn58PAGhqasLg4KDreFdWVqK8\nvJzHO0q1tbW48cYbXccQ4LH1w69+9StcccUVuPnmm1FUVITLLrsMzz77bOTvra2t6OjocB3jQCCA\nuXPn8hhH4eqrr0ZDQwN2794NAPjoo4/w3nvvYcGCBQBG//iOudmwjxw5gqGhIQSDQdfyYDCI//u/\n/7O0V8lheHgYy5YtwzXXXIOLL74YANDR0YGMjAxMmjTJtW4wGERHR4eFvUwsmzZtwgcffIAdO3YY\nf+OxHblPP/0Ua9euxYoVK/CDH/wAO3bswL333ouMjAwsWbIkchy1fy94jL098MADCIfDqKysRFpa\nGoaGhvDoo49i8eLFADDqx3fMdUA0empra/HJJ5/gvffes70rSaG9vR333Xcffvvb3yIrK8v27iSl\n4eFhXHHFFXjssccAAJdddhk++eQTPP3001iyZInlvUt8L774Il544QVs3LgRF110ET788EMsW7YM\npaWl5+T4jrkhuMLCQqSlpRl3CnV2dqK4uNjSXiW+pUuX4tVXX8X//M//RJ63BADFxcUYGBhAV1eX\na30eb29NTU04dOgQLr/8ckyYMAETJkzAO++8gyeffBITJkxAMBjksR2hkpISXHjhha5lF1xwAdra\n2gAgchz570V8/vEf/xEPPPAAbrnlFlxyySX4u7/7Oyxfvhz19fUARv/4jrkOKCMjA3PmzEFDQ0Nk\n2fDwMBoaGlBVVWVxzxKT4zhYunQpXn75Zbz11luoqKhw/X3OnDlIT093He/m5ma0tbXxeHu4/vrr\n8fHHH+PDDz+MvK644gosXrw48t88tiNzzTXXGGUDu3fvxvTp0wEAFRUVKC4udh3jcDiMbdu28RhH\n4cSJE8YTS9PS0jA8PAzgHBzfEd/GMAo2bdrkZGZmOs8995yza9cu584773QmTZrkdHR02N61hHP3\n3Xc7gUDAefvtt52DBw9GXidOnIisc9dddznl5eXOW2+95ezcudOpqqpyqqqqLO514vrzu+Ach8d2\npLZv3+5MmDDBefTRR52WlhbnhRdecM477zznF7/4RWSdVatWOZMmTXJeeeUV5/e//72zcOFC3oYd\npSVLljhTp06N3Ib90ksvOYWFhc79998fWWc0j++Y7IAcx3H+7d/+zSkvL3cyMjKcq666ytm6davt\nXUpIANTX+vXrI+ucPHnS+fu//3tn8uTJznnnnef8zd/8jXPw4EF7O53AZAfEYztyv/71r52LL77Y\nyczMdCorK51nnnnG9ffh4WFn5cqVTjAYdDIzM53rr7/eaW5utrS3iSUcDjv33XefU15e7mRlZTkz\nZ850fvjDHzr9/f2RdUbz+PJ5QEREZMWYywEREdH4wA6IiIisYAdERERWsAMiIiIr2AEREZEV7ICI\niMgKdkBERGQFOyAiIrKCHRAREVnBDoiIiKxgB0RERFb8P9G+tuNKlyM6AAAAAElFTkSuQmCC\n" } } ], "source": [ "solution = np.concatenate(\n", " [np.concatenate([X1,X0,X1],axis=1),\n", " np.concatenate([X1,X0,X0],axis=1),\n", " np.concatenate([X1,X1,X1],axis=1)]\n", ")\n", "plt.imshow(solution,cmap='gray')" ], "id": "d5d08f8f-937c-4cad-a447-644cf066b5ea" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. 공든탑쌓기 – 60점\n", "\n", "> (1)-(2)는 점수없음. (풀지 않아도 무방) // (3) 만 맞출경우 20점,\n", "> (3)-(4) 모두 맞출경우 60점\n", "\n", "규빈과 다호가 블록을 사용하여 탑을 쌓는다. 규빈은 한 번에 2개의 블록을\n", "사용하여 탑을 쌓지만, 실수로 탑을 무너뜨릴 확률이 50%이다. 한 번 무너진\n", "탑은 다시 처음부터 쌓아야 한다. 다호는 한 번에 1개의 블록을 사용하여\n", "신중하게 탑을 쌓는다. 다호는 천천히 탑을 쌓지만 실수로 탑을 무너뜨리지\n", "않는다.\n", "\n", "`(1)` 규빈과 다호가 2층 높이의 탑을 먼저 쌓는 내기를 하였다고 하자. 탑을\n", "쌓을수 있는 기회는 2회 준다. 이 내기는 누가 유리한가? 시뮬레이션을\n", "통하여 근거를 설명하라. (둘이 동시에 탑을 쌓을경우 무승부로 판단한다.)\n", "\n", "`(2)` 규빈과 다호가 10층 높이의 탑을 먼저 쌓는 내기를 하였다고 하자.\n", "탑을 쌓을수 있는 기회는 10회 준다. 이 내기는 누가 유리한가? 시뮬레이션을\n", "통하여 근거를 설명하라. (둘이 동시에 탑을 쌓을경우 무승부로 판단한다.)\n", "\n", "`(3)` (2)와 같은 게임규칙[1]에서 규빈은 본인이 불리하다는 사실을\n", "알아챘다. 규빈은 아래와 같이 전략을 수정하였다.\n", "\n", "- 규빈탑의 높이 \\<8 일 경우: (다호처럼) 1개의 블록만 안전하게 쌓는다.\n", " 이때 1개의 블록쌓기는 100% 확률로 성공한다.\n", "- 규빈탑의 높이 \\>=8 일 경우: 2개의 블록을 쌓으려고 시도한다 (50%의\n", " 확률로 성공 / 50%의 확률로 실패, 실패시 규빈의 블록 높이는 0이 된다)\n", "\n", "규빈이 전략을 수정함에 따라 내기는 누가 유리해지는가? 근거를 설명하라.\n", "(둘이 동시에 탑을 쌓을경우 무승부로 판단한다.)\n", "\n", "> 이 문제는 시뮬레이션을 이용하여 근거를 설명하지 않아도 무방함 (해도\n", "> 되고 안해도 되고..)\n", "\n", "`(풀이1)`\n", "\n", "8층까지는 동일하게 규빈,다호 하나의 블록씩 쌓음. 8층에서 규빈은 한번에\n", "2층을 쌓으려는 도박을 시도하는데 도박이 성공한다면 승리, 실패하면\n", "패배이므로 이 내기는 5:5로 공평하게 유리하다.\n", "\n", "`(풀이2)`\n", "\n", "[1] 10층높이의 탑을 먼저 쌓는 쪽이 이기며, 기회는 10번 주는 게임" ], "id": "de4aa830-cec6-47ed-9485-4a0419fc8c7d" }, { "cell_type": "code", "execution_count": 29, "metadata": { "tags": [] }, "outputs": [], "source": [ "def build_tower(max_time, end_condition):\n", " guebin = 0\n", " daho = 0\n", " for t in range(max_time): # max_time 동안 게임을 진행 \n", " #--# 블록을 쌓음 \n", " if guebin < 8: # 규빈탑의 높이<8 인 경우 규빈이 블록을 1층씩 쌓음 \n", " guebin = guebin + 1 \n", " daho = daho + 1 \n", " else: # 규빈탑의 높이 == 8인 경우 규빈은 2개의 블록을 쌓으려는 도박을 시도\n", " if np.random.rand() < 0.5: # 규빈이 탑 쌓다가 실수로 무너짐\n", " guebin = 0 \n", " daho = daho + 1 \n", " else: # 규빈이 탑을 잘 쌓음 \n", " guebin = guebin + 2 \n", " daho = daho + 1 \n", " #--# 승패를 체크\n", " if (guebin >= end_condition) and (daho >= end_condition):\n", " result = \"무승부 (둘이 동시에 성공)\"\n", " break\n", " elif (guebin >= end_condition) and (daho < end_condition):\n", " result = \"규빈승\"\n", " break\n", " elif (guebin < end_condition) and (daho >= end_condition):\n", " result = \"다호승\"\n", " break\n", " else: \n", " result = \"무승부 (둘다 쌓지 못함)\"\n", " return result " ], "id": "93bcb1da-974c-4254-b8de-f57e9a31df46" }, { "cell_type": "code", "execution_count": 30, "metadata": { "tags": [] }, "outputs": [], "source": [ "results = [build_tower(max_time=10,end_condition=10) for i in range(1000)]\n", "{s:results.count(s) for s in set(results)}" ], "id": "05b1df04-0c3b-405b-90bf-367e886955cf" }, { "cell_type": "markdown", "metadata": {}, "source": [ "시뮬레이션 결과 공평하게 유리하다.\n", "\n", "`(4)` (2)와 같은 게임규칙[1]에서 규빈이 아래와 같이 전략을 수정한다면\n", "누가 유리한가? 시뮬레이션을 통하여 근거를 설명하라.\n", "\n", "- 규빈탑의 높이 \\<2 일 경우: 2개의 블록을 쌓으려고 시도한다 (50%의\n", " 확률로 성공 / 50%의 확률로 실패, 실패시 규빈의 블록 높이는 0이 된다)\n", "- 규빈탑의 높이 \\>=2 일 경우: (다호처럼) 1개의 블록만 안전하게 쌓는다.\n", " 이때 1개의 블록쌓기는 100% 확률로 성공한다.\n", "\n", "[1] 10층높이의 탑을 먼저 쌓는 쪽이 이기며, 기회는 10번 주는 게임" ], "id": "ab164d73-f2e0-430f-98b0-508e7517af4f" }, { "cell_type": "code", "execution_count": 27, "metadata": { "tags": [] }, "outputs": [], "source": [ "def build_tower(max_time, end_condition):\n", " guebin = 0\n", " daho = 0\n", " for t in range(max_time): # max_time 동안 게임을 진행 \n", " #--# 블록을 쌓음 \n", " if guebin >= 2: # 규빈탑의 높이 >=2 인 경우 규빈이 안전하게 1개의 블록씩 쌓으려고 노력한다. \n", " guebin = guebin + 1 \n", " daho = daho + 1 \n", " else: # 규빈탑의높이<2 인경우 2개의 블록을 쌓으려 시도한다. \n", " if np.random.rand() < 0.5: # 규빈이 탑 쌓다가 실수로 무너짐\n", " guebin = 0 \n", " daho = daho + 1 \n", " else: # 규빈이 탑을 잘 쌓음 \n", " guebin = guebin + 2 \n", " daho = daho + 1 \n", " #--# 승패를 체크\n", " if (guebin >= end_condition) and (daho >= end_condition):\n", " result = \"무승부 (둘이 동시에 성공)\"\n", " break\n", " elif (guebin >= end_condition) and (daho < end_condition):\n", " result = \"규빈승\"\n", " break\n", " elif (guebin < end_condition) and (daho >= end_condition):\n", " result = \"다호승\"\n", " break\n", " else: \n", " result = \"무승부 (둘다 쌓지 못함)\"\n", " return result " ], "id": "ca311dd7-f5fd-4cff-a0b4-c8eadab43c7d" }, { "cell_type": "code", "execution_count": 28, "metadata": { "tags": [] }, "outputs": [], "source": [ "results = [build_tower(max_time=10,end_condition=10) for i in range(1000)]\n", "{s:results.count(s) for s in set(results)}" ], "id": "d65227d9-5bf2-46b1-8fa2-aabf616caf7e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "> 사실상 `(2)`와 같은 경우이다. 규빈이 2개의 블럭을 쌓는 첫시도에서\n", "> 성공한다면 규빈의 승리 (이미 1층씩 쌓아도 승리확정이므로 이후에는 굳이\n", "> 도박을 할 필요가 없음), 규빈이 2개의 블럭을 쌓는 시도를 하여 첫\n", "> 시도에서 실패하고 두번째 시도에서 성공한다면 무승부, 규빈이 2개의\n", "> 블럭을 쌓는 시도에서 처음 두번을 연속 실패한다면 이후의 결과와\n", "> 상관없이 규빈의 패배로 결정된다." ], "id": "03470368-9d61-43ed-993d-e6ffb396863e" } ], "nbformat": 4, "nbformat_minor": 5, "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3 (ipykernel)", "language": "python" }, "language_info": { "name": "python", "codemirror_mode": { "name": "ipython", "version": "3" }, "file_extension": ".py", "mimetype": "text/x-python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" } } }