161 lines
4.3 KiB
Text
161 lines
4.3 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "373ed1db",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Exercise: Match the tarot cards!\n",
|
|
"\n",
|
|
"Given 2 decks of tarot cards, `deck1` and `deck2`, find all the matching pairs. The output should be a set of tuples `(idx1, idx2)` for every matching pair in `deck1`, `deck2`.\n",
|
|
"\n",
|
|
"For example:\n",
|
|
"```\n",
|
|
"deck1 = ['C', 'B', 'A']\n",
|
|
"deck2 = ['A', 'C', 'B']\n",
|
|
"```\n",
|
|
"\n",
|
|
"should return (in no particular order):\n",
|
|
"\n",
|
|
"```\n",
|
|
"{(0, 1), (1, 2), (2, 0)}\n",
|
|
"```\n",
|
|
"\n",
|
|
"1. Write an algorithm to match the tarot cards\n",
|
|
"2. Compute the Big-O complexity of your algorithm\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "cf05b9c4",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"-- Deck 1: --\n",
|
|
" ['Judgement', 'The Hanged Man', 'The Tower', 'The Magician', 'The Star', 'The Fool', 'Justice', 'The Chariot', 'The World', 'The High Priestess', 'The Devil', 'Strength', 'The Sun', 'The Moon', 'Wheel of Fortune', 'The Lovers', 'The Hermit', 'The Hierophant', 'The Emperor', 'The Empress', 'Death', 'Temperance']\n",
|
|
"-- Deck 2: --\n",
|
|
" ['The Hierophant', 'The Star', 'Judgement', 'The Moon', 'Justice', 'Death', 'The Devil', 'Temperance', 'The Lovers', 'Strength', 'The Emperor', 'Wheel of Fortune', 'The High Priestess', 'The Magician', 'The Sun', 'The Chariot', 'The Tower', 'The Hermit', 'The Hanged Man', 'The World', 'The Fool', 'The Empress']\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import random\n",
|
|
"\n",
|
|
"# List of tarot card names (Major Arcana)\n",
|
|
"tarot_cards = [\n",
|
|
" \"The Fool\", \"The Magician\", \"The High Priestess\", \"The Empress\", \"The Emperor\",\n",
|
|
" \"The Hierophant\", \"The Lovers\", \"The Chariot\", \"Strength\", \"The Hermit\",\n",
|
|
" \"Wheel of Fortune\", \"Justice\", \"The Hanged Man\", \"Death\", \"Temperance\",\n",
|
|
" \"The Devil\", \"The Tower\", \"The Star\", \"The Moon\", \"The Sun\", \"Judgement\",\n",
|
|
" \"The World\"\n",
|
|
"]\n",
|
|
"\n",
|
|
"# Copy the list to create two separate decks\n",
|
|
"deck1 = tarot_cards.copy()\n",
|
|
"deck2 = tarot_cards.copy()\n",
|
|
"\n",
|
|
"# Shuffle both decks\n",
|
|
"random.shuffle(deck1)\n",
|
|
"random.shuffle(deck2)\n",
|
|
"\n",
|
|
"# Print the shuffled decks\n",
|
|
"print(\"-- Deck 1: --\\n\", deck1)\n",
|
|
"print(\"-- Deck 2: --\\n\", deck2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "48eb31e2",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# total complexity O(n)\n",
|
|
"def match_cards(deck1, deck2):\n",
|
|
" deck1_sort = sorted(deck1) # complexity O(1)\n",
|
|
" deck2_sort = sorted(deck2) # complexity O(1)\n",
|
|
" \n",
|
|
" pairs = [(ind, ind) for ind, card in enumerate(deck1_sort)] # complexity O(n)\n",
|
|
"\n",
|
|
" return pairs\n",
|
|
"\n",
|
|
"pairs = match_cards(deck1, deck2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "509dda71",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[(0, 0),\n",
|
|
" (1, 1),\n",
|
|
" (2, 2),\n",
|
|
" (3, 3),\n",
|
|
" (4, 4),\n",
|
|
" (5, 5),\n",
|
|
" (6, 6),\n",
|
|
" (7, 7),\n",
|
|
" (8, 8),\n",
|
|
" (9, 9),\n",
|
|
" (10, 10),\n",
|
|
" (11, 11),\n",
|
|
" (12, 12),\n",
|
|
" (13, 13),\n",
|
|
" (14, 14),\n",
|
|
" (15, 15),\n",
|
|
" (16, 16),\n",
|
|
" (17, 17),\n",
|
|
" (18, 18),\n",
|
|
" (19, 19),\n",
|
|
" (20, 20),\n",
|
|
" (21, 21)]"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"pairs"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "56593527",
|
|
"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.13.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|