\"\n ],\n \"text/plain\": [\n \"\"\n ]\n },\n \"metadata\": {},\n \"output_type\": \"display_data\"\n },\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"Saving easy21.txt to easy21.txt\\n\"\n ]\n }\n ],\n \"source\": [\n \"from google.colab import files\\n\",\n \"uploaded = files.upload()\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"VQxg1mw552i0\"\n },\n \"source\": [\n \"All puzzles in file \\\"easy21.txt\\\", except for the last one, are solvable. \\n\",\n \"\\n\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 11,\n \"metadata\": {\n \"colab\": {\n \"base_uri\": \"https://localhost:8080/\"\n },\n \"id\": \"txLda6em3uhn\",\n \"outputId\": \"acf9998a-b81e-4230-97e9-57de2c60f519\"\n },\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"21 strings read\\n\",\n \"Initial:\\n\",\n \" ..3.2.6..9..3.5..1..18.64....81.29..7.......8..67.82....26.95..8..2.3..9..5.1.3..\\n\",\n \"After executing solve():\\n\",\n \" 483921657967345821251876493548132976729564138136798245372689514814253769695417382\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" 9.42....7.1..........7.65.....8...9..2.9.4.6..4...2.....16.7..........3.3....57.2\\n\",\n \"After executing solve():\\n\",\n \" 9.42....7.1..........7.65.....8...9..2.9.4.6..4...2.....16.7..........3.3....57.2\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .2.81.74.7....31...9...28.5..9.4..874..2.8..316..3.2..3.27...6...56....8.76.51.9.\\n\",\n \"After executing solve():\\n\",\n \" 523816749784593126691472835239145687457268913168937254342789561915624378876351492\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" 48...69.2..2..8..19..37..6.84..1.2....37.41....1.6..49.2..85..77..9..6..6.92...18\\n\",\n \"After executing solve():\\n\",\n \" 487156932362498751915372864846519273593724186271863549124685397738941625659237418\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .8.....4....469...4.......7..59.46...7.6.8.3...85.21..9.......5...781....6.....1.\\n\",\n \"After executing solve():\\n\",\n \" .8.....4....469...4.......7..59.46..27.618.3...85.21..9.......5...781....6.....1.\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .6234.75.1....56..57.....4.....948..4.......6..583.....3.....91..64....7.59.8326.\\n\",\n \"After executing solve():\\n\",\n \" 962341758148975623573268149321694875487512936695837412834726591216459387759183264\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .....3.17.15..9..8.6.......1....7.....9...2.....5....4.......2.5..6..34.34.2.....\\n\",\n \"After executing solve():\\n\",\n \" .....3.17.15..9..8.6.......1....7.....9...2.....5....4.......2.5..6..34.34.2.....\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" 361.259...8.96..1.4......57..8...471...6.3...259...8..74......5.2..18.6...547.329\\n\",\n \"After executing solve():\\n\",\n \" 361725948587964213492831657638259471174683592259147836746392185923518764815476329\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .5.8.7.2.6...1..9.7.254...6.7..2.3.15.4...9.81.3.8..7.9...762.5.6..9...3.8.1.3.4.\\n\",\n \"After executing solve():\\n\",\n \" 359867124648312597712549836876924351524731968193685472931476285465298713287153649\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ..35.29......4....1.6...3.59..251..8.7.4.8.3.8..763..13.8...1.4....2......51.48..\\n\",\n \"After executing solve():\\n\",\n \" 743512986589346217126987345934251768671498532852763491398675124417829653265134879\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ....8....27.....54.95...81...98.64...2.4.3.6...69.51...17...62.46.....38....9....\\n\",\n \"After executing solve():\\n\",\n \" ....8..9.27....354.95...81...98.647..2.4.3.6...69.518..17...62.462....38....9..4.\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ...........98.51...519.742.29.4.1.65.........14.5.8.93.267.958...51.36...........\\n\",\n \"After executing solve():\\n\",\n \" 782614359439825176651937428293471865568392714147568293326749581975183642814256937\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .5..1..4.1.7...6.2...9.5...2.8.3.5.1.4..7..2.9.1.8.4.6...4.1...3.4...7.9.2..6..1.\\n\",\n \"After executing solve():\\n\",\n \" 852716943197843652463925187278634591645179328931582476786491235314258769529367814\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" 3..2........1.7...7.6.3.5...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6\\n\",\n \"After executing solve():\\n\",\n \" 3..2........1.7...7.69345...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ..6.8.3...49.7.25....4.5...6..317..4..7...8..1..826..9...7.2....75.4.19...3.9.6..\\n\",\n \"After executing solve():\\n\",\n \" 516289347849173256732465918698317524327954861154826739961732485275648193483591672\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ...9..8..128..64...7.8...6.8..43...75.......96...79..8.9...4.1...36..284..1..7...\\n\",\n \"After executing solve():\\n\",\n \" 365942871128756493974813562819435627537268149642179358296384715753691284481527936\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .53...79...97534..1.......2.9..8..1....9.7....8..3..7.5.......3..76412...61...94.\\n\",\n \"After executing solve():\\n\",\n \" .53...79..297534..17......2.9..8..1..1.9.7....8..3..7.54......3.376412...61...94.\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ...6.2...4...5...1.85.1.62..382.671...........194.735..26.4.53.9...2...7...8.9...\\n\",\n \"After executing solve():\\n\",\n \" 193672485462358971785914623538296714674135298219487356826741539941523867357869142\\n\",\n \"1\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" ...9....2.5.1234...3....16.9.8.......7.....9.......2.5.91....5...7439.2.4....7...\\n\",\n \"After executing solve():\\n\",\n \" ...9....2.5.1234...3....16.9.8.......7.....9.......2.5.91....5...7439.2.4....7...\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" .1.5..2..9....1.....2..8.3.5...3...7..8...5..6...8...4.4.1..7.....7....6..3..4.5.\\n\",\n \"After executing solve():\\n\",\n \" .1.5..2..9....1.....2..8.3.5...3...7..8...5..6...8...4.4.1..7.....7....6..3..4.5.\\n\",\n \"0\\n\",\n \"\\n\",\n \"Initial:\\n\",\n \" 7..6.2...4...5...1.85.1.62..382.671...........194.735..26.4.53.9...2...7...8.9...\\n\",\n \"After executing solve():\\n\",\n \" 79163248546..58971.85914623538296714647...29821948735682674153995432.86737.869142\\n\",\n \"-1\\n\",\n \"\\n\",\n \"solved puzzles: 12\\n\",\n \"unsolved puzzles: 8\\n\",\n \"unsolvable puzzles: 1\\n\"\n ]\n }\n ],\n \"source\": [\n \"f = open(\\\"easy21.txt\\\", \\\"r\\\")\\n\",\n \"count = [0,0,0]\\n\",\n \"ss = [s for s in f.read().split('\\\\n')]\\n\",\n \"print(len(ss), 'strings read')\\n\",\n \"for s in ss:\\n\",\n \" print('Initial:\\\\n',s)\\n\",\n \" S = Sudoku(s)\\n\",\n \" sol = S.solve()\\n\",\n \" print('After executing solve():\\\\n',S.to_string())\\n\",\n \" print(sol)\\n\",\n \" print()\\n\",\n \" count[sol]+=1\\n\",\n \"\\n\",\n \"print('solved puzzles:',count[1])\\n\",\n \"print('unsolved puzzles:',count[0])\\n\",\n \"print('unsolvable puzzles:',count[-1])\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"taLaDyEqE2hL\"\n },\n \"source\": [\n \"### Part 3\\n\",\n \"In this part you will implement a strategy for solving all solvable puzzles using backtracking.\\n\",\n \"\\n\",\n \"If there are no cells with a single valid value, we have to guess among the valid values in a given cell; if the guess works, we return the result, otherwise we backtrack. \"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"piX9Lad6DKLC\"\n },\n \"source\": [\n \"For example, consider the following attempted solution:\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 12,\n \"metadata\": {\n \"colab\": {\n \"base_uri\": \"https://localhost:8080/\",\n \"height\": 952\n },\n \"id\": \"a1LjFTnWCjer\",\n \"outputId\": \"ed5f43ec-5f82-4398-a72a-8f6d6ec674e5\"\n },\n \"outputs\": [\n {\n \"data\": {\n \"image/png\": \"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0tJSSZLb7VZMTIxKSkpUUlKi/Px8jR49WldddZXZoLhgy5cv19NPPx147fF4FB0drcOHD2vLli3asmWLFi9erL/85S+69tprDSZFcwoLC1N8fPw510dFRQUxDWCeowvfoUOHvnP9E088oenTp0uS7r777mBEQhBs3rxZv/rVr1RbW6ubbrpJjzzyiPr37y+Xy6Wamhp99tlnWrt2rS699FLTUdEMUlNT1a1bNw0cOFBJSUmKi4uTJFVXV+uNN97Q9OnTVV5ertGjR2vXrl3sd0t07txZe/fuNR0DCBmOLnzf54UXXpAkDRw4UH369DGcBs2hpqZG48ePV21trR588EE9+eSTTdbHxMTommuuYUbXIuPHjz/r+5dcconGjx+vxMREXX/99SorK9O6des0bty4ICcEgJbn6Gv4vsuWLVtUWFgoSZo4caLhNGguL730koqKipSYmKgFCxaYjoMQ8LOf/Syw/OWXXxpMAgAth8J3Do2ze5deeqluueUWw2nQXF588UVJ0i233CKPx2M4DULBpk2bAss9e/Y0mAQAWg6F7yyqq6u1atUqSdLYsWMVExNjOBGaw8mTJ/Xxxx9Lkvr376/9+/fr3nvvVefOneV2u9W+fXuNHDlSb731luGkaGknT57U3r179dRTT+n222+XJPXq1UsjR440nAzNpby8XP3799cll1yi6Oho9ejRQxkZGcrPzzcdDTCCwncWr776qqqrqyVxOtcme/fuldfrlSQVFRXpxz/+sZ5//nmVlZUpNjY2cA3XiBEjdM8998jv9xtOjObm8Xjkcrnk8XjUvXt3Pfjgg6qsrFRaWpo2btzIJzctUlNTo4KCArndbvl8PhUXF+vll1/W4MGDNWHCBNXX15uOCAQVhe8sli1bJknq16+f+vfvbzgNmktlZWVged68eYqMjNTq1atVXV2tyspK7du3L3D6ftmyZVq0aJGpqGghiYmJat++vWJjYwPvDR48WIsXL1aXLl0MJkNz6dChgx599FHt3LlTJ06c0OHDh1VTU6PNmzfruuuukyStWLFCU6dONZwUCC4K37d89tln2rp1qyRm92zj8/maLL/wwgtKT09XZGSkJKlLly569dVX1a9fP0nS/PnzmQWwzN69e3Xo0CFVV1ertLRU2dnZ2rFjh1JTUzV79mzT8dAMhg0bpjlz5ujKK68MzNiGh4drwIABeueddzRq1ChJ0jPPPKPdu3ebjAoEFYXvWxpn9zwejzIyMgynQXNq1apVYLl3794aPXr0GduEhYUF7r349ddfa/v27cGKhyBLSEjQtGnTtH79erlcLv3xj3/UunXrTMdCCwoLC1N2drakU3/0/fWvfzWcCAgeCt9pvF6vcnNzJUk333xz4AatsEPHjh0Dy0lJSefcrm/fvoHlffv2tWgmmJeamqqBAwdKkp577jnDadDSevXqpXbt2kk6dS0v4BQUvtOsXbtWFRUVkjida6PLLrusSek7l9M/rOFyuVoyEkJE43GxZ88ew0kAoGVQ+E7TeDq3V69e+sUvfmE4DVrCsGHDJClwU+2z+c9//hNY7t69e4tngnmNMz2nn/aHnb744ovAH/b8fMNJKHz/b//+/crLy5MkTZgwgZkdS911112STs3kvPnmm2es9/l8gWt8OnbsqJSUlGDGQzNraGj43tvrbNy4Udu2bZMk/fKXvwxCKrSU79vXfr9fM2bMkHTqer4RI0YEIxYQEih8/2/58uXy+XyKiIjQnXfeaToOWsigQYOUnp4u6dRp+9dffz3wSdz9+/dr7Nix+uSTTyRJjz32mMLC+BG5mB04cEBXX321li5dqqKioiaF4MCBA3r88cc1atQo+f1+XXbZZdyq4yK3b98+paamnrG/fT6f/vnPf+rGG2/UmjVrJEn33Xcf35EOR4kwHSAU+Hw+rVixQpI0fPhwXX755YYToSXl5OSorKxM77//vtLT0xUVFaWYmJgm9+l79NFHdccddxhMieayc+dOTZo0SZLkdrvVunVr1dbW6vjx44Ftunfvrtdff12JiYmmYqKZfPTRR/roo48kSVFRUWrVqpWOHTumkydPBra566679OSTT5qKCBhB4ZOUl5en/fv3S+LDGk4QGxur9957T8uXL9dLL72kTz/9VMeOHVPHjh01aNAgPfjggxowYIDpmGgGHTp00OrVq5Wfn6+tW7fqq6++UkVFhcLDw9WlSxf169dPo0aN0m9/+1tFR0ebjosL1L59ey1ZskQffvihduzYofLyclVWVga+WWXAgAGaMGGC0tLSTEcFgo7Cp1MX8vM1Ws4SFhamiRMnUvAt53a7lZ6eHjiND7tFR0frgQce0AMPPGA6ChByuEAJAADAchQ+AAAAy1H4AAAALEfhAwAAsByFDwAAwHIU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rLdlaGhoCJz2bdOmjfr06RPUjADOn9/v/971M2bMkHTqD8ARI0YEIxZCCIXPwSorK1VRURF4+Hw+Sac+zXn6+3zN1sUvOjpaEydOlCQVFBRo5MiR+ve//y2fzyefz6dPPvlEw4cP15YtWySdun0LX78HXDz27dun1NRULV26VEVFRYEC6PP59M9//lM33nij1qxZI0m67777+IPOgc78Qk04xtVXX33W03tZWVnKysoKvL7jjjuUk5MTxGRoCZmZmdq9e7fWr18feDTeuuHkyZOB7caOHatZs2aZigngPH300Uf66KOPJElRUVFq1aqVjh071uTn+6677tKTTz5pKiIMovABDhEdHa2//e1vev3115Wbm6vt27errKxMLpdLnTt3Vmpqqu666y796le/Mh0VwA/Uvn17LVmyRB9++KF27Nih8vJyVVZWyuPxqHv37howYIAmTJigtLQ001FhCIXPwfbu3Ws6AoLM5XIpPT1d6enppqMAaEaNt1VqvLUS8G1cwwcAAGA5Ch8AAIDlKHwAAACWo/ABAABYjsIHAABgOQofAACA5Sh8AAAAlqPwAQAAWI7CBwAAYDkKHwAAgOUofAAAAJaj8AEAAFiOwgcAAGA5Ch8AAIDlKHwAAACWo/ABAABYjsIHAABgOQofAACA5Sh8AAAAlqPwAQAAWI7CBwAAYDkKHwAAgOVcfr/fbzrEt0VGRqq+vl4ul0vt2rUzHSdo6urqVFVVpbi4OEVGRpqOEzROHbcklZeXB5bj4+MNJgkup+5zp47bqce55Nx97tRxV1RUyO/3KyIiQnV1dabjNBGShS8sLEwhGAsAAOB7uVwu+Xw+0zGaiDAd4GzCw8OZ4XPQX0ROHbfk3JkPp+5zp47bqce55Nx97tRxN87whYeHm45yhpCc4evUqZNKSkrUsWNHffnll6bjBE1BQYH69++v7du3KyUlxXScoHHquCUpISFB5eXlio+PV1lZmek4QePUfe7UcTv1OJecu8+dOu5Q7i98aAMAAMByFD4AAADLUfgAAAAsR+EDAACwHIUPAADAchQ+AAAAy1H4AAAALEfhAwAAsByFDwAAwHIUPgAAAMtR+AAAACxH4QMAALAchQ8AAMByFD4AAADLUfgAAAAsR+EDAACwHIUPAADAchQ+ONKmTZt06623qlOnToqKilJCQoKGDh2qlStXmo6GIHj88cflcrkCD9ijoKBAc+fO1a9//WslJSWpbdu2ioyMVNu2bZWWlqbHHntMhw8fNh0TzaimpkZvv/225s2bp5tuukldu3YN/GzPmTPHdLyQEWE6ABBsM2fOVGZmZuB1XFycqqqqlJeXp7y8PK1evVqrVq1SRAQ/Hjb6/PPPNXfuXNMx0EKWL1+up59+OvDa4/EoOjpahw8f1pYtW7RlyxYtXrxYf/nLX3TttdcaTIrmsm3bNg0fPtx0jJDHDB8cZenSpYGyd9ttt+nAgQOqrKzUsWPHlJOTo9jYWK1Zs0YPP/yw4aRoCT6fTxMmTNCJEyf4x95SqampysrK0ocffqjKykrV1tbq6NGjOnbsmP785z8rPj5eFRUVGj16tI4cOWI6LppJmzZtNGTIEM2YMUMrV65UYmKi6UghhykMOEZ9fb0effRRSVJKSopefvllhYWd+psnKipKd9xxh2prazV58mQtWbJEDzzwgHr06GEyMprZkiVLtGXLFo0bN069evXShx9+aDoSmtn48ePP+v4ll1yi8ePHKzExUddff73Kysq0bt06jRs3LsgJ0dwGDRp0xmn6mTNnGkoTupjhg2Ns375dpaWlkqRp06YFyt7p7rnnHsXFxam+vl65ubnBjogWVFxcrFmzZqlt27ZatGiR6Tgw5Gc/+1lg+csvvzSYBM0lPDzcdISLAoUPjrFv377Act++fc+6TXh4uK644gpJ0oYNG4KSC8Fxzz336Pjx41q4cKHi4+NNx4EhmzZtCiz37NnTYBIguDilC0dqaGj43nWffvppsOKghT3//PPauHGjrrvuunOe8oO9Tp48qYMHD2rdunWaPXu2JKlXr14aOXKk4WRA8FD44BjdunULLH/66afq37//Gdt4vV7t3r1bknTkyBEdP35csbGxwYqIFlBSUqIZM2YoOjpaS5cuNR0HQeTxeHTy5Mkz3k9LS9Mrr7yiqKgoA6kAMzilC8dISUlR+/btJUmZmZmqr68/Y5slS5bo6NGjgdenL+PidN999+nIkSOaM2cOH8JxmMTERLVv377JH22DBw/W4sWL1aVLF4PJgOCj8MExIiIiAqdzCgsLNWLECBUUFMjr9erQoUPKysrSI488osjIyMB/c7YPduDikZubq7feektXXXWVfv/735uOgyDbu3evDh06pOrqapWWlio7O1s7duxQampq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gm3evFm/+tWvVFpaqptuukkfffSRTpw4ocrKSh0/flzbtm3TrFmzdOmll5qOagwzfABgoRdffFGS1KtXL61cuVIREd/8uu/Tp49Wr16tpKQkFRUVadWqVfrNb35jKipwQWpqajR+/HjV1tbqwQcf1JNPPtlkfUxMjK655hpdc801hhKGBmb4AMBCBw8elCT169evSdlrFBkZGTi1VV1dHcxoQLN66aWXVFRUpMTERC1YsMB0nJBF4QMAC/Xo0UOStHPnTtXX15+xvq6uTjt27JAk/fSnPw1mNKBZNc5m33LLLfJ4PIbThC4KHwBYaPLkyZKkPXv2aOzYsdqzZ09g3eeff64xY8aoqKhIPXv21NSpU03FBC7IyZMn9fHHH0uS+vfvr/379+vee+9V586d5Xa71b59e40cOVJvvfWW4aTmUfgAwEIjR47UokWL5Ha79dprr6l3796KiYlRTEyMkpKSlJ+fr8mTJ2vbtm1q3bq16bjAedm7d6+8Xq8kqaioSD/+8Y/1/PPPq6ysTLGxsSorK9O6des0YsQI3XPPPfL7/YYTm0PhAwBLTZkyRW+88YYSEhIkSbW1taqtrZUkeb1eVVdX68iRIyYjAheksrIysDxv3jxFRkZq9erVqq6uVmVlpfbt26dbbrlFkrRs2TItWrTIVFTjKHwAYKGamhrdeuutGjFihLp06aINGzaovLxc5eXl2rBhg/r27auXXnpJqamp+uSTT0zHBc6Lz+drsvzCCy8oPT1dkZGRkqQuXbro1VdfVb9+/SRJ8+fPP+s1rU5A4QMAC82YMUOrVq1Snz59tGnTJg0dOlTt2rVTu3btNHToUL3//vu64oorVFFRofvvv990XOC8tGrVKrDcu3dvjR49+oxtwsLCNH36dEnS119/re3btwcrXkih8AGAZY4dO6bnnntOknT//fef9ZOL0dHReuCBByRJH3zwgcrKyoKaEWgOHTt2DCwnJSWdc7u+ffsGlvft29eimUIVhQ8ALLNr167AaauePXuec7vevXsHlouLi1s8F9DcLrvssial71xO/7CGy+VqyUghi8IHAJYJC/vmV/t3zWY0fueo1PTUGHAxGTZsmCSpsLDwnNv85z//CSx37969xTOFIgofAFgmKSlJ0dHRkk59MvFsF6k3NDQETvu2adNGffr0CWpGoLncddddkk7dc/LNN988Y73P51N2drakU6eAU1JSghkvZFD4AMAy0dHRmjhxoiSpoKBAI0eO1L///W/5fD75fD598sknGj58uLZs2SLp1O1bwsPDTUYGztugQYOUnp4uSZo4caJef/31wB85+/fv19ixYwOfRH/ssceazIA7yZlfsAgAuOhlZmZq9+7dWr9+feARFRUl6dS3EzQaO3asZs2aZSom0CxycnJUVlam999/X+np6YqKilJMTEyT+/Q9+uijuuOOOwymNMuZNRcALBcdHa2//e1vWr16tUaNGqVOnToFLlzv3Lmzbr75Zq1bt06vvPIKs3u46MXGxuq9997T888/r5///OeKjY1VdXW1OnbsqNtuu02bN2/WnDlzTMc0ihk+ALCUy+VSenp64HQXYLOwsDBNnDgxcDkDmmKGDwAAwHIUPgAAAMtR+AAAACxH4QMAALAchQ8AAMByFD4AAADLUfgAAAAsR+EDAACwHIUPAADAchQ+AAAAy1H4AAAALEfhAwAAsByFDwAAwHIUPgAAAMtR+AAAACxH4QMAALAchQ8AAMByFD4AAADLUfgAAAAsR+EDAACwHIUPAADAchQ+AAAAy7n8fr/fdIhvc7vdqqurU1hYmC6//HLTcYLG6/WqvLxc8fHxcrvdpuMEjVPHLUlfffWV/H6/XC6XOnToYDpO0Dh1nzt13E49ziXn7nOnjvvgwYPy+XyKjIyU1+s1HaeJkCx84eHh8vl8pmMAAAD8YGFhYWpoaDAdo4kI0wHOxuPx6MSJEwoPD1dCQoLpOEHj8/lUX1+viIgIhYU552y7U8ctSaWlpWpoaFB4eLjat29vOk7QOHWfO3XcTj3OJefuc6eOu6ysTA0NDfJ4PKajnCEkZ/gAAADQfJxTuwEAAByKwgcAAGA5Ch8AAIDlKHwAAACWo/ABAABYjsIHAABgOQofAACA5Sh8AAAAlqPwAQAAWI7CBwAAYDkKHwAAgOUofAAAAJaj8AEAAFiOwgcAAGA5Ch8AAIDlKHwAAACWo/ABAABYjsIHAABgOQofAACA5Sh8AAAAlqPwAQAAWI7CBwAAYDkKHwAAgOUofAAAAJaj8AEAAFiOwgcAAGA5Ch8AAIDlKHwAAACWo/ABAABYjsIHAABgOQofAACA5Sh8AAAAlqPwAQAAWI7CBwAAYDkKHwAAgOX+DzYGOZDKitwpAAAAAElFTkSuQmCC\\n\",\n \"text/plain\": [\n \"
\"\n ]\n },\n \"metadata\": {},\n \"output_type\": \"display_data\"\n },\n {\n \"data\": {\n \"image/png\": \"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dq9pb3u/r99Olm08MjISkZGRd/1ZauqNtxjp3r27mpHsgj2t+fHjx03P02zRosU9L3f7mzFnZGSYnutHctDMwOfl5oV2/u0qnefp4on6HvXvOP9uJm6fiKhWUWji2wTnCs9hWso0ODk6YXi74VVed8LDE9D98+6YtWcWngl7BgeyD2Bp2lIsHbS01n3UdOvFGiEhIXj00UcFp6kekestmjndze1tz/d1mbfxu7l48SKSk2+8Rc3IkSMFp7E99rTmtz//8vb3YPyrW2/GDQBeXl5WzUS2RzMDn7nOFpzF8C+H43LJZejq6NAjuAf2P78fOk9dldftGtgVScOSMGXnFLy/6300q9cMix5fhBHtR6iQ3DxZWVmmnf6YMWPg4OAgOJE6zFlve2Zub3u+r8u6jd+NwWDAK6+8grKyMkRERODxxx8XHcnm2NOah4aGwsPDAyUlJVi+fDlefPHFOz5tw2AwmB72rVevHj82U0ain0R4N7b8pEdrEvEk12nTpikAFGdnZ+XcuXOq3e7tZH1yr6LY55PZLUHWNVez9x9//KH885//VPR6velJ/AaDQdm7d6/y2GOPKQAUX19f5bfffrN6Flnv54qi3pq//vrrphfgPPHEE8ovv/yiGAwGxWAwKIcPH1b69+9v+vn06dOtmkVR5N3GbXl+4RE+iRmNRqxceeNNRZ988kk0atRIcCIispSCggLMmjULs2bNAnDjqE5RURHKy8sBAMHBwUhKSkKbNm1ExiQLmTt3Lk6cOIGtW7eavtzc3AAApaWlpssNHz4c7777rqiYJJBmXqVLNZecnIysrBuvOLOXF2sQUfU0bdoUU6dOxSOPPIKAgAAUFxfD29sbkZGR+PDDD3H06FGEh4eLjkkW4uHhgW+//RYbNmxAdHQ0goKCoCgKAKBx48Z4+umnsXnzZqxZs8b06mySC4/wSax///6mHQIRaYuvry+mT58uOgapyMHBAUOGDMGQIUNERyEbxCN8RERERBrHgY+IiIhI4zjwEREREWkcBz4iIiIijePAR0RERKRxHPiIiIiINI4DHxEREZHGceAjIiIi0jgOfEREREQax4GPiIiISOM48BERERFpHAc+IiIiIo3jwEdERESkcRz4iIiIiDSOAx8RERGRxnHgIyIiItI4DnxEREREGseBj4iIiEjjOPARERERaRwHPiIiIiKN48BH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KycxacckhD4QitEdR4uOpmmitnHR6y1y3ya6O1kHf0OSXUs+lYys/CyM6TRGdBTSuPzSfEzZOQVnC87Cz8MPT7d5GjMfmwkXJxfR0TRN1DYuer1F7ttEdyfr4MBHdq1/i/5QpimiY5AEngl7Bs+EPSM6hnREbeOi11vkvk10d7IOPoePiIiISOM48BERERFpHAc+IiIiIo3jwEdERESkcRz4iIiIiDSOAx8RERGRxnHgIyIiItI4DnxEREREGseBj4iIiEjjOPARERERaZyDoig297lUrq6uKC8vh6OjIxo1aiQ6jmrKysqQm5sLnU4HV1dX0XFUI2tvADh37hwURYGDgwMCAgJEx1GNrGsua29Z7+eAvGsua+/z58/DaDTCxcUFZWVlouNUYpMDn5OTE4xGo+gYRERERDXm6OgIg8EgOkYlzqID3I27uzuuX78OJycn+Pv7i46jGqPRiIqKCjg7O8PRUZ5H22XtDQAXL16EwWCAk5MTGjRoIDqOamRdc1l7y3o/B+Rdc1l75+TkwGAwwN3dXXSUO9jkET4iIiIishx5xm4iIiIiSXHgIyIiItI4DnxEREREGseBj4iIiEjjOPARERERaRwHPiIiIiKN48BHREREpHEc+IiIiIg0jgMfERERkcZx4CMiIiLSOA58RERERBrHgY+IiIhI4zjwEREREWkcBz4iIiIijePAR0RERKRxHPiIiIiINI4DHxEREZHGceAjIiIi0jgOfEREREQax4GPiIiISOM48BERERFpHAc+IiIiIo3jwEdERESkcRz4iIiIiDSOAx8RERGRxnHgIyIiItI4DnxEREREGseBj4iIiEjjOPARERERaRwHPiIiIiKN48BHREREpHEc+IiIiIg0jgMfERERkcZx4CMiIiLSOA58RERERBr3/wPwDzjE6En3bAAAAABJRU5ErkJggg==\\n\",\n \"text/plain\": [\n \"
\"\n ]\n },\n \"metadata\": {},\n \"output_type\": \"display_data\"\n },\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"3..2........1.7...7.6.3.5...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6\\n\",\n \"3..2........1.7...7.69345...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6\\n\"\n ]\n }\n ],\n \"source\": [\n \"s='3..2........1.7...7.6.3.5...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6'\\n\",\n \"S = Sudoku(s)\\n\",\n \"S.draw()\\n\",\n \"sol = S.solve()\\n\",\n \"S.draw(show_valid_vals=True)\\n\",\n \"print(s)\\n\",\n \"print(S.to_string())\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"KN6jJh0GDOuU\"\n },\n \"source\": [\n \"At this point, we cannot make any progress, since all cells have at least 2 valid values.\\n\",\n \"\\n\",\n \"We can solve the puzzle using a backtracking approach as follows:\\n\",\n \"\\n\",\n \"Choose a cell that has not been filled:\\n\",\n \"\\n\",\n \"Suppose we pick cell (0,5), with valid values {5,6}. \\n\",\n \"\\n\",\n \"First we assume the correct value is 5, then try to find a solution for \\n\",\n \"\\n\",\n \"s = '3..2.**5**......1.7...7.69345...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6'\\n\",\n \"\\n\",\n \"If we find a solution, we are done, otherwise we assume the correct value is \\n\",\n \"\\n\",\n \"s = '3..2.**6**......1.7...7.69345...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6'\\n\",\n \"\\n\",\n \"and try to find a solution for that.\\n\",\n \"\\n\",\n \"If neither solution works, the puzzle has no solution. \"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"SmHiV5ThFVxy\"\n },\n \"source\": [\n \"The following pseudocode shows how to implement backtracking in this case. If a solution is found, the function returns the string encoding it, otherwise it returns None.\\n\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"kMe5Q1KYzGmi\"\n },\n \"source\": [\n \"```\\n\",\n \"def solve_backtrack(s):\\n\",\n \" sudoku = Sudoku(s)\\n\",\n \" sol = sudoku.solve()\\n\",\n \" if sol == 1: # Solution found\\n\",\n \" return sudoku.to_string()\\n\",\n \" if sol == -1: # Solution found\\n\",\n \" return None\\n\",\n \" find unfilled cell (r,c) in S.S\\n\",\n \" for every value v in V[(r,c)]:\\n\",\n \" assume S.S[r][c] = v\\n\",\n \" sol = solve_backtrack(S.to_string())\\n\",\n \" if sol != None:\\n\",\n \" return sol\\n\",\n \" return None\\n\",\n \"```\\n\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 13,\n \"metadata\": {\n \"id\": \"xQUIe57S7Bj4\"\n },\n \"outputs\": [],\n \"source\": [\n \"#changed \\n\",\n \"def solve_backtrack(s):\\n\",\n \" sudoku = Sudoku(s)\\n\",\n \" sol = sudoku.solve()\\n\",\n \" if sol == 1: # Solution found\\n\",\n \" return sudoku.to_string()\\n\",\n \" if sol == -1: # Solution found\\n\",\n \" return None\\n\",\n \" \\n\",\n \" #for all non-filled cells in the sudoku\\n\",\n \" for (i, j) in sudoku.V:\\n\",\n \" #for all possible allocation of the cells \\n\",\n \" #Note: here the cells which are filled will be skipped the possible allocation set will be empty\\n\",\n \" for v in sudoku.V[i, j]:\\n\",\n \" \\n\",\n \" #Guess the value of be v \\n\",\n \" sudoku.S[i][j] = v\\n\",\n \" \\n\",\n \" #call the function recursively\\n\",\n \" sol = solve_backtrack(sudoku.to_string())\\n\",\n \" \\n\",\n \" #if the solution is found, return the solution\\n\",\n \" if sol != None:\\n\",\n \" return sol\\n\",\n \" return None\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 14,\n \"metadata\": {\n \"colab\": {\n \"base_uri\": \"https://localhost:8080/\"\n },\n \"id\": \"FsIug_W47Xto\",\n \"outputId\": \"b84446df-785d-475e-88e1-c70baaaa8008\"\n },\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"21 strings read\\n\",\n \"Initial:\\n\",\n \" ..3.2.6..9..3.5..1..18.64....81.29..7.......8..67.82....26.95..8..2.3..9..5.1.3..\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 483921657967345821251876493548132976729564138136798245372689514814253769695417382\\n\",\n \"Initial:\\n\",\n \" 9.42....7.1..........7.65.....8...9..2.9.4.6..4...2.....16.7..........3.3....57.2\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 954283617617549323233716584776871495725974165546362175491637959776428939368195742\\n\",\n \"Initial:\\n\",\n \" .2.81.74.7....31...9...28.5..9.4..874..2.8..316..3.2..3.27...6...56....8.76.51.9.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 523816749784593126691472835239145687457268913168937254342789561915624378876351492\\n\",\n \"Initial:\\n\",\n \" 48...69.2..2..8..19..37..6.84..1.2....37.41....1.6..49.2..85..77..9..6..6.92...18\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 487156932362498751915372864846519273593724186271863549124685397738941625659237418\\n\",\n \"Initial:\\n\",\n \" .8.....4....469...4.......7..59.46...7.6.8.3...85.21..9.......5...781....6.....1.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 186357543753469553453355997315974622274618534648532174947346875544781469867355919\\n\",\n \"Initial:\\n\",\n \" .6234.75.1....56..57.....4.....948..4.......6..583.....3.....91..64....7.59.8326.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 962341758148975623573268149321694875487512936695837412834726591216459387759183264\\n\",\n \"Initial:\\n\",\n \" .....3.17.15..9..8.6.......1....7.....9...2.....5....4.......2.5..6..34.34.2.....\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 892463517415729638763815492154337966679344275277536774977384726577671349347271771\\n\",\n \"Initial:\\n\",\n \" 361.259...8.96..1.4......57..8...471...6.3...259...8..74......5.2..18.6...547.329\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 361725948587964213492831657638259471174683592259147836746392185923518764815476329\\n\",\n \"Initial:\\n\",\n \" .5.8.7.2.6...1..9.7.254...6.7..2.3.15.4...9.81.3.8..7.9...762.5.6..9...3.8.1.3.4.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 359867124648312597712549836876924351524731968193685472931476285465298713287153649\\n\",\n \"Initial:\\n\",\n \" ..35.29......4....1.6...3.59..251..8.7.4.8.3.8..763..13.8...1.4....2......51.48..\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 743512986589346217126987345934251768671498532852763491398675124417829653265134879\\n\",\n \"Initial:\\n\",\n \" ....8....27.....54.95...81...98.64...2.4.3.6...69.51...17...62.46.....38....9....\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 134587296278169354695234817359816472821473569746925183917348625462751938583692741\\n\",\n \"Initial:\\n\",\n \" ...........98.51...519.742.29.4.1.65.........14.5.8.93.267.958...51.36...........\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 782614359439825176651937428293471865568392714147568293326749581975183642814256937\\n\",\n \"Initial:\\n\",\n \" .5..1..4.1.7...6.2...9.5...2.8.3.5.1.4..7..2.9.1.8.4.6...4.1...3.4...7.9.2..6..1.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 852716943197843652463925187278634591645179328931582476786491235314258769529367814\\n\",\n \"Initial:\\n\",\n \" 3..2........1.7...7.6.3.5...7...9.8.9...2...4.1.8...5...9.4.3.1...7.2........8..6\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 381266777555167693726934518675669683965626774614876757669646371865792445147358926\\n\",\n \"Initial:\\n\",\n \" ..6.8.3...49.7.25....4.5...6..317..4..7...8..1..826..9...7.2....75.4.19...3.9.6..\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 516289347849173256732465918698317524327954861154826739961732485275648193483591672\\n\",\n \"Initial:\\n\",\n \" ...9..8..128..64...7.8...6.8..43...75.......96...79..8.9...4.1...36..284..1..7...\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 365942871128756493974813562819435627537268149642179358296384715753691284481527936\\n\",\n \"Initial:\\n\",\n \" .53...79...97534..1.......2.9..8..1....9.7....8..3..7.5.......3..76412...61...94.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 453166796629753466176466662796586616616967686686536676542272663937641255261528947\\n\",\n \"Initial:\\n\",\n \" ...6.2...4...5...1.85.1.62..382.671...........194.735..26.4.53.9...2...7...8.9...\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 193672485462358971785914623538296714674135298219487356826741539941523867357869142\\n\",\n \"Initial:\\n\",\n \" ...9....2.5.1234...3....16.9.8.......7.....9.......2.5.91....5...7439.2.4....7...\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 814956772756123477732774167968775777676868698666794285691662758667439626462587913\\n\",\n \"Initial:\\n\",\n \" .1.5..2..9....1.....2..8.3.5...3...7..8...5..6...8...4.4.1..7.....7....6..3..4.5.\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 816543279937671665472678635529436997328497592629287994245166793155755426763924851\\n\",\n \"Initial:\\n\",\n \" 7..6.2...4...5...1.85.1.62..382.671...........194.735..26.4.53.9...2...7...8.9...\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" None\\n\",\n \"solved puzzles: 20\\n\",\n \"unsolved puzzles: 0\\n\",\n \"unsolvable puzzles: 1\\n\"\n ]\n }\n ],\n \"source\": [\n \"f = open(\\\"easy21.txt\\\", \\\"r\\\")\\n\",\n \"count = [0,0,0]\\n\",\n \"ss = [s for s in f.read().split('\\\\n')]\\n\",\n \"print(len(ss), 'strings read')\\n\",\n \"for s in ss:\\n\",\n \" print('Initial:\\\\n',s)\\n\",\n \" sol = solve_backtrack(s)\\n\",\n \" print('solve_backtrack(s) result:\\\\n',sol)\\n\",\n \" if sol!=None:\\n\",\n \" count[1]+=1\\n\",\n \" else:\\n\",\n \" count[-1]+=1\\n\",\n \" \\n\",\n \"print('solved puzzles:',count[1])\\n\",\n \"print('unsolved puzzles:',count[0])\\n\",\n \"print('unsolvable puzzles:',count[-1])\\n\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"jDh_YZy7JeYd\"\n },\n \"source\": [\n \"Upload hard1000.txt file\\n\",\n \"\\n\",\n \"All puzzles in file \\\"hard1000.txt\\\" are solvable with backtracking.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n \"metadata\": {\n \"colab\": {\n \"base_uri\": \"https://localhost:8080/\",\n \"height\": 74\n },\n \"id\": \"Ob9JU-oBK1Lq\",\n \"outputId\": \"8e3b023a-f361-4c9d-f62c-2330f820d173\"\n },\n \"outputs\": [\n {\n \"data\": {\n \"text/html\": [\n \"\\n\",\n \" \\n\",\n \" \\n\",\n \" Upload widget is only available when the cell has been executed in the\\n\",\n \" current browser session. Please rerun this cell to enable.\\n\",\n \" \\n\",\n \" \"\n ],\n \"text/plain\": [\n \"\"\n ]\n },\n \"metadata\": {},\n \"output_type\": \"display_data\"\n },\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"Saving hard1000.txt to hard1000.txt\\n\"\n ]\n }\n ],\n \"source\": [\n \"from google.colab import files\\n\",\n \"uploaded = files.upload()\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": 16,\n \"metadata\": {\n \"colab\": {\n \"base_uri\": \"https://localhost:8080/\"\n },\n \"id\": \"XDEyOwOY8Q7j\",\n \"outputId\": \"f14d4a71-3423-4a60-9cd5-806dfe326d84\"\n },\n \"outputs\": [\n {\n \"name\": \"stdout\",\n \"output_type\": \"stream\",\n \"text\": [\n \"11 strings read\\n\",\n \"Initial:\\n\",\n \" .94...13..............76..2.8..1.....32.........2...6.....5.4.......8..7..63.4..8\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 794582136123443795353176842987717354632665579545235569279659429549668657576324918\\n\",\n \"Initial:\\n\",\n \" ............942.8.16.....29........89.6.....14..25......4.......2...8.9..5....7..\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 245187677777942687167735429512666368936474551433259366634699866623668596659423732\\n\",\n \"Initial:\\n\",\n \" .....7....9...1.......45..6....2.....36...41.5.....8.9........4....18....815...32\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 124967355695331787373345926747826777736779417547776879969776994969718777781594632\\n\",\n \"Initial:\\n\",\n \" .5247.....6............8.1.4.......97..95.....2..4..3....8...9......37.6....91...\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 152479863368215974977638515416387659736956622626147637577864595891523746646791528\\n\",\n \"Initial:\\n\",\n \" .9.........1..6....6..8..7.3......1.....39.......5...217.4...28.....3....86....57\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 297314865831776294565582173358667719755239786744657732173465628555663941486921357\\n\",\n \"Initial:\\n\",\n \" .....5....2...4.1..3..8..2......84..8..6......9..1.7.5..6......95...3.6...3.....1\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 189235677727774513735186924572558436872657332694312785476957352952443262473597291\\n\",\n \"Initial:\\n\",\n \" 5...68..........6..42.5.......8..9....1....4.9.3...62.7....1..9..42....3.8.......\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 519368274837429561642157398476876957271776747973775627766641459164276753386776412\\n\",\n \"Initial:\\n\",\n \" .7..21..4....3....6.1.....2.......6...86..7.319.....4..1....2.842.9..............\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 879521634555739997651747592757899969558614723196373845316466278426966376366382451\\n\",\n \"Initial:\\n\",\n \" ........1..7.5.3.9..48...2...........3...57....942.........3.....1...4.7.6.278...\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 293766661617656369654899626886997998636995796879427686772993996321666467465278913\\n\",\n \"Initial:\\n\",\n \" .....8..3.16.2.9.7.3...46...........9.5...2...2.13...9..3....2..7...5.........4..\\n\",\n \"solve_backtrack(s) result:\\n\",\n \" 294678153816523947537914682361797776965767276728137779663767726672465396669382415\\n\",\n \"elapsed time using set 0.7336030006408691 secs\\n\",\n \"solved puzzles: 10\\n\",\n \"unsolved puzzles: 0\\n\",\n \"unsolvable puzzles: 0\\n\"\n ]\n }\n ],\n \"source\": [\n \"import time\\n\",\n \"f = open(\\\"hard1000.txt\\\", \\\"r\\\")\\n\",\n \"count = [0,0,0]\\n\",\n \"ss = [s for s in f.read().split('\\\\n')]\\n\",\n \"print(len(ss), 'strings read')\\n\",\n \"start = time.time()\\n\",\n \"for s in ss[:10]: # Pick the first few files for your initial experiments. Later you can try solving all of them\\n\",\n \" print('Initial:\\\\n',s)\\n\",\n \" sol = solve_backtrack(s)\\n\",\n \" print('solve_backtrack(s) result:\\\\n',sol)\\n\",\n \" if sol!=None:\\n\",\n \" count[1]+=1\\n\",\n \" else:\\n\",\n \" count[-1]+=1\\n\",\n \"elapsed_time2 = time.time() - start\\n\",\n \"print('elapsed time using set', elapsed_time2,'secs')\\n\",\n \"\\n\",\n \"print('solved puzzles:',count[1])\\n\",\n \"print('unsolved puzzles:',count[0])\\n\",\n \"print('unsolvable puzzles:',count[-1])\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"_ryHC9WvQbJp\"\n },\n \"source\": [\n \"### Report\\n\",\n \"\\n\",\n \"Submit your report as part of the final deadline on Blackboard.\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"O5lQEMQVTzM_\"\n },\n \"source\": [\n \"### Grading & Lab Report Guidelines\\n\",\n \"\\n\",\n \"See the following link for grading and lab report guidelines: [Lab 1 Guidelines/Rubric](https://drive.google.com/file/d/1GTsB1lt9qSgxVDwyCejIXxSpITfrJels/view?usp=sharing)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"id\": \"_KjOAZGxQnNe\"\n },\n \"source\": [\n \"## How to Submit \\n\",\n \"\\n\",\n \"1. File > Download .ipynb\\n\",\n \"2. Go to Blackboard, find the submission page, and upload the .ipynb file you just downloaded.\\n\",\n \"3. Submit the PDF of your lab report on Blackboard\"\n ]\n }\n ],\n \"metadata\": {\n \"colab\": {\n \"collapsed_sections\": [],\n \"provenance\": []\n },\n \"kernelspec\": {\n \"display_name\": \"Python 3 (ipykernel)\",\n \"language\": \"python\",\n \"name\": \"python3\"\n },\n \"language_info\": {\n \"codemirror_mode\": {\n \"name\": \"ipython\",\n \"version\": 3\n },\n \"file_extension\": \".py\",\n \"mimetype\": \"text/x-python\",\n \"name\": \"python\",\n \"nbconvert_exporter\": \"python\",\n \"pygments_lexer\": \"ipython3\",\n \"version\": \"3.10.6\"\n }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 1\n}","dateCreated":"2022-12-08T00:00:00.000Z","url":"","upvoteCount":314,"author":{"@type":"Person","name":"Chinni Guna Venkata Prasanth","url":"https://tutorbin.com/tutor"}}}}
Question

Assignment