Created
March 20, 2021 18:17
-
-
Save gwbischof/0d4b9cfd1a94310d574a4dd4a194bb23 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 27, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from itertools import permutations\n", | |
| "\n", | |
| "cards = {0: [['PH', 'SH', 'BT', 'GT'], ['GT', 'PH', 'SH', 'BT'], ['BT', 'GT', 'PH', 'SH'], ['SH', 'BT', 'GT', 'PH']], \n", | |
| " 1: [['GH', 'BT', 'BH', 'ST'], ['ST', 'GH', 'BT', 'BH'], ['BH', 'ST', 'GH', 'BT'], ['BT', 'BH', 'ST', 'GH']], \n", | |
| " 2: [['ST', 'GT', 'BT', 'PH'], ['PH', 'ST', 'GT', 'BT'], ['BT', 'PH', 'ST', 'GT'], ['GT', 'BT', 'PH', 'ST']], \n", | |
| " 3: [['ST', 'BT', 'GH', 'PT'], ['PT', 'ST', 'BT', 'GH'], ['GH', 'PT', 'ST', 'BT'], ['BT', 'GH', 'PT', 'ST']], \n", | |
| " 4: [['GT', 'PH', 'GT', 'SH'], ['SH', 'GT', 'PH', 'GT'], ['GT', 'SH', 'GT', 'PH'], ['PH', 'GT', 'SH', 'GT']], \n", | |
| " 5: [['PH', 'BH', 'PT', 'ST'], ['ST', 'PH', 'BH', 'PT'], ['PT', 'ST', 'PH', 'BH'], ['BH', 'PT', 'ST', 'PH']], \n", | |
| " 6: [['BH', 'SH', 'PH', 'GT'], ['GT', 'BH', 'SH', 'PH'], ['PH', 'GT', 'BH', 'SH'], ['SH', 'PH', 'GT', 'BH']], \n", | |
| " 7: [['PT', 'GH', 'BH', 'ST'], ['ST', 'PT', 'GH', 'BH'], ['BH', 'ST', 'PT', 'GH'], ['GH', 'BH', 'ST', 'PT']], \n", | |
| " 8: [['GH', 'ST', 'BT', 'PT'], ['PT', 'GH', 'ST', 'BT'], ['BT', 'PT', 'GH', 'ST'], ['ST', 'BT', 'PT', 'GH']]}\n", | |
| "\n", | |
| "matches = {'PH': 'PT',\n", | |
| " 'PT': 'PH',\n", | |
| " 'GH': 'GT',\n", | |
| " 'GT': 'GH',\n", | |
| " 'SH': 'ST',\n", | |
| " 'ST': 'SH',\n", | |
| " 'BH': 'BT',\n", | |
| " 'BT': 'BH'}\n", | |
| "\n", | |
| "def get_new_board():\n", | |
| " return [[\"00\" for i in range(9)] for i in range(9)]\n", | |
| "\n", | |
| "def add_card(board, card, x, y):\n", | |
| " board[0+(y*3)][1+(x*3)] = card[0]\n", | |
| " board[1+(y*3)][2+(x*3)] = card[1]\n", | |
| " board[2+(y*3)][1+(x*3)] = card[2]\n", | |
| " board[1+(y*3)][0+(x*3)] = card[3]\n", | |
| " return board\n", | |
| " \n", | |
| "def show_board(board):\n", | |
| " for line in board:\n", | |
| " print(line)\n", | |
| " \n", | |
| "def all_combos():\n", | |
| " return permutations([(1,0), (1,1), (1,2), (1,3),\n", | |
| " (2,0), (2,1), (2,2), (2,3),\n", | |
| " (3,0), (3,1), (3,2), (3,3),\n", | |
| " (4,0), (4,1), (4,2), (4,3),\n", | |
| " (5,0), (5,1), (5,2), (5,3),\n", | |
| " (6,0), (6,1), (6,2), (6,3),\n", | |
| " (7,0), (7,1), (7,2), (7,3),\n", | |
| " ], 9)\n", | |
| "\n", | |
| "def check_board(perm):\n", | |
| " board = [cards[item[0]][item[1]] for item in perm]\n", | |
| " \n", | |
| " # Top row\n", | |
| " check1 = matches[board[0][1]] == board[1][3]\n", | |
| " check2 = matches[board[1][1]] == board[2][3]\n", | |
| " check3 = matches[board[0][2]] == board[3][0]\n", | |
| " check4 = matches[board[1][2]] == board[4][0]\n", | |
| " check5 = matches[board[2][2]] == board[5][0]\n", | |
| " \n", | |
| " # Middle row\n", | |
| " check6 = matches[board[3][1]] == board[4][3]\n", | |
| " check7 = matches[board[4][1]] == board[5][3]\n", | |
| " check8 = matches[board[3][2]] == board[6][0]\n", | |
| " check9 = matches[board[4][2]] == board[7][0]\n", | |
| " check10 = matches[board[5][2]] == board[8][0]\n", | |
| " \n", | |
| " # Bottom row\n", | |
| " check11 = matches[board[6][1]] == board[7][3]\n", | |
| " check12 = matches[board[7][1]] == board[8][3]\n", | |
| " \n", | |
| " return all([check1, check2, check3, check4, check5, \n", | |
| " check6, check7, check8, check9, check10,\n", | |
| " check11, check12])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "['00', ['PH', 'SH', 'BT', 'GT'], '00', '00', '00', '00', '00', '00', '00']\n", | |
| "[['SH', 'BT', 'GT', 'PH'], '00', ['GT', 'PH', 'SH', 'BT'], '00', '00', '00', '00', '00', '00']\n", | |
| "['00', ['BT', 'GT', 'PH', 'SH'], '00', '00', '00', '00', '00', '00', '00']\n", | |
| "['00', '00', '00', '00', '00', '00', '00', '00', '00']\n", | |
| "['00', '00', '00', '00', '00', '00', '00', '00', '00']\n", | |
| "['00', '00', '00', '00', '00', '00', '00', '00', '00']\n", | |
| "['00', '00', '00', '00', '00', '00', '00', '00', '00']\n", | |
| "['00', '00', '00', '00', '00', '00', '00', '00', '00']\n", | |
| "['00', '00', '00', '00', '00', '00', '00', '00', '00']\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "board = get_new_board()\n", | |
| "board = add_card(board, cards[0], x=0, y=0)\n", | |
| "show_board(board)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 42, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "2.3858718872070312\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from itertools import islice\n", | |
| "import time\n", | |
| "\n", | |
| "start = time.time()\n", | |
| "\n", | |
| "a = all_combos()\n", | |
| "for perm in islice(a, 0, 1000000):\n", | |
| " result = check_board(perm)\n", | |
| " if result:\n", | |
| " print(\"SOLVED!\")\n", | |
| " print(perm)\n", | |
| " \n", | |
| "elapsed = time.time() - start\n", | |
| "print(elapsed)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 29, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "a = all_combos()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "((1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (4, 2))" | |
| ] | |
| }, | |
| "execution_count": 36, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "next(a)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "266.2037037037037" | |
| ] | |
| }, | |
| "execution_count": 47, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "((1e13 / 1e6) * 2.3)/3600/24" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "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.8.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment