Skip to content

Instantly share code, notes, and snippets.

@gwbischof
Created March 20, 2021 18:17
Show Gist options
  • Select an option

  • Save gwbischof/0d4b9cfd1a94310d574a4dd4a194bb23 to your computer and use it in GitHub Desktop.

Select an option

Save gwbischof/0d4b9cfd1a94310d574a4dd4a194bb23 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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