Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 184 additions & 0 deletions assignment_1.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "a3787ba3-34d8-42bd-baf5-9311c7e273ee",
"metadata": {},
"outputs": [],
"source": [
"# Assignment 1 — Anagram Checker\n",
"\n",
"**Student:** <Yuou Sheng> \n",
"**Date:** October 20, 2025\n",
"\n",
"This notebook implements:\n",
"- Part 1: Base `anagram_checker(word_a, word_b)` (case-insensitive by default)\n",
"- Part 2: Extended `anagram_checker(word_a, word_b, is_case_sensitive)`"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0d69ee98-543b-4e6c-827e-3252a59388ca",
"metadata": {},
"outputs": [],
"source": [
"## Part 1 — Base Anagram Checker\n",
"\n",
"**Goal:** Return `True` if two words are anagrams, else `False`. \n",
"**Assumption:** Uppercase letters are the same as lowercase (case-insensitive).\n",
"**Approach:** \n",
"1. Normalize case (lowercase both strings). \n",
"2. Sort letters of each string. \n",
"3. Compare the sorted results — if equal, they’re anagrams."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "32b1b085-4a2b-40c3-b198-58474fc3d7b5",
"metadata": {},
"outputs": [],
"source": [
"def anagram_checker(word_a, word_b):\n",
" \"\"\"\n",
" Return True if word_a and word_b are anagrams (case-insensitive), else False.\n",
" Strategy: lowercase both, sort characters, compare.\n",
" \"\"\"\n",
" # 1) Normalize case\n",
" a = word_a.lower()\n",
" b = word_b.lower()\n",
"\n",
" # 2) Sort letters\n",
" sorted_a = sorted(a)\n",
" sorted_b = sorted(b)\n",
"\n",
" # 3) Compare\n",
" return sorted_a == sorted_b"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e3ec9314-cb81-4b3c-be3b-170d417def20",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"True\n"
]
}
],
"source": [
"print(anagram_checker(\"Silent\", \"listen\")) # Expected: True\n",
"print(anagram_checker(\"Silent\", \"Night\")) # Expected: False\n",
"print(anagram_checker(\"night\", \"Thing\")) # Expected: True"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b929e95f-d57c-4961-9f25-fa24c20eb3af",
"metadata": {},
"outputs": [],
"source": [
"## Part 2 — Add Case-Sensitivity Option\n",
"\n",
"Now we add a third argument `is_case_sensitive` that controls whether uppercase and lowercase letters are treated as the same.\n",
"\n",
"**Logic:**\n",
"- If `is_case_sensitive` is `False` → lowercase both words (same as before). \n",
"- If `True` → do **not** lowercase (so “A” ≠ “a”)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c21419d7-0b8c-4a84-9e81-b436a09b03d7",
"metadata": {},
"outputs": [],
"source": [
"# Part 2: Add Case-Sensitivity Option\n",
"\n",
"def anagram_checker(word_a, word_b, is_case_sensitive):\n",
" \"\"\"\n",
" Return True if word_a and word_b are anagrams, considering case sensitivity.\n",
" \"\"\"\n",
" # Step 1: Handle case sensitivity\n",
" if not is_case_sensitive:\n",
" word_a = word_a.lower()\n",
" word_b = word_b.lower()\n",
" \n",
" # Step 2: Sort and compare\n",
" sorted_a = sorted(word_a)\n",
" sorted_b = sorted(word_b)\n",
" \n",
" return sorted_a == sorted_b"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "24b6860b-5df9-45bb-86ab-30e4acd4c455",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"True\n",
"False\n"
]
}
],
"source": [
"print(anagram_checker(\"Silent\", \"listen\", False)) # Expected: True\n",
"print(anagram_checker(\"Silent\", \"Listen\", True)) # Expected: False\n",
"print(anagram_checker(\"AbC\", \"cBa\", False)) # Expected: True\n",
"print(anagram_checker(\"AbC\", \"cBa\", True)) # Expected: False"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cd9c3124-6a1f-45c9-bbe2-17b3b4941b87",
"metadata": {},
"outputs": [],
"source": [
"### Notes on Code Quality\n",
"- Clear variable names (`word_a`, `word_b`, `is_case_sensitive`)\n",
"- Clean and readable structure\n",
"- Inline comments explaining each step\n",
"- Code cells execute without errors"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}