{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f2ad2478-213e-4a06-b322-9dacc4f4692e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import stats\n",
    "\n",
    "# Use this generator (and this seed) everywhere so your numbers are reproducible.\n",
    "rng = np.random.default_rng(540)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1ae69188-6cf4-4b55-bd15-640f437f94b2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['A', 'G', 'T', 'C', 'G', 'A', 'G', 'G', 'C', 'C'], dtype='<U1')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dna=rng.choice([\"A\", \"T\", \"C\", \"G\"], 10000)\n",
    "dna[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "5b25c43a-e039-4040-a509-b74964835edd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'AGTCGAGGCC'"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s=\"\".join(dna[:10])\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2efe191a-a267-43a1-b862-f9591df84d31",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['A']\n",
      "['A', 'G']\n",
      "['A', 'G', 'T']\n",
      "['G']\n",
      "['G', 'T']\n",
      "['G', 'T', 'C']\n",
      "['T']\n",
      "['T', 'C']\n",
      "['T', 'C', 'G']\n",
      "['C']\n",
      "['C', 'G']\n",
      "['C', 'G', 'A']\n",
      "['G']\n",
      "['G', 'A']\n",
      "['G', 'A', 'G']\n",
      "['A']\n",
      "['A', 'G']\n",
      "['A', 'G', 'G']\n",
      "['G']\n",
      "['G', 'G']\n",
      "['G', 'G', 'C']\n",
      "['G']\n",
      "['G', 'C']\n",
      "['G', 'C', 'C']\n"
     ]
    }
   ],
   "source": [
    "k=3\n",
    "for i in range(10-k+1):\n",
    "    char=[]\n",
    "    for j in range(k):\n",
    "        char.append(s[i+j])\n",
    "        print(char)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f77b80a2-1699-45be-a0db-2549fcbb53dd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AGT\n",
      "GTC\n",
      "TCG\n",
      "CGA\n",
      "GAG\n",
      "AGG\n",
      "GGC\n",
      "GCC\n"
     ]
    }
   ],
   "source": [
    "k=3\n",
    "my_dict={}\n",
    "for i in range(10-k+1):\n",
    "    char=[]\n",
    "    for j in range(k):\n",
    "        char.append(s[i+j])\n",
    "    tup=\"\".join(char)\n",
    "    print(tup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ad1b4dcf-738f-4919-bdd6-baf1f78c87c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'AGT': 1,\n",
       " 'GTC': 1,\n",
       " 'TCG': 1,\n",
       " 'CGA': 1,\n",
       " 'GAG': 1,\n",
       " 'AGG': 1,\n",
       " 'GGC': 1,\n",
       " 'GCC': 1}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k=3\n",
    "my_dict={}\n",
    "for i in range(10-k+1):\n",
    "    char=[]\n",
    "    for j in range(k):\n",
    "        char.append(s[i+j])\n",
    "    tup=\"\".join(char)\n",
    "    if tup in my_dict:\n",
    "        my_dict[tup]+=1\n",
    "    else:\n",
    "        my_dict[tup]=1\n",
    "my_dict\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "875704b5-cfed-496c-895f-da353c3817bd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def ktuples(s, k):\n",
    "    my_dict={}\n",
    "    for i in range(len(s)-k+1):\n",
    "        char=[]\n",
    "        for j in range(k):\n",
    "            char.append(s[i+j])\n",
    "        tup=\"\".join(char)\n",
    "        if tup in my_dict:\n",
    "            my_dict[tup]+=1\n",
    "        else:\n",
    "            my_dict[tup]=1\n",
    "    return(my_dict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "9330f399-46ce-4bf9-948f-b7d33c72ce73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'CAG': 1, 'AGA': 1, 'GAC': 1, 'ACA': 1, 'CAA': 1, 'AAA': 2, 'AAC': 1}"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results=ktuples(\"CAGACAAAAC\", k=3)\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "23ce6c13-ba3c-4806-80b0-eaf9bca76729",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " AAA: 2\n",
      " AAC: 1\n",
      " ACA: 1\n",
      " AGA: 1\n",
      " CAA: 1\n",
      " CAG: 1\n",
      " GAC: 1\n"
     ]
    }
   ],
   "source": [
    "for tup in sorted(results):\n",
    "    print(f\" {tup}: {results[tup]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "66ed2f96-beab-4887-b029-bcdb2fe42e9f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'AGT': 159,\n",
       " 'GTC': 154,\n",
       " 'TCG': 165,\n",
       " 'CGA': 167,\n",
       " 'GAG': 147,\n",
       " 'AGG': 159,\n",
       " 'GGC': 166,\n",
       " 'GCC': 148,\n",
       " 'CCC': 146,\n",
       " 'CCA': 168,\n",
       " 'CAC': 167,\n",
       " 'ACG': 156,\n",
       " 'CGG': 138,\n",
       " 'GGA': 159,\n",
       " 'GAT': 161,\n",
       " 'ATA': 180,\n",
       " 'TAG': 173,\n",
       " 'AGC': 155,\n",
       " 'GCT': 155,\n",
       " 'CTG': 168,\n",
       " 'TGT': 171,\n",
       " 'TCA': 136,\n",
       " 'CAG': 140,\n",
       " 'ATG': 144,\n",
       " 'TGG': 141,\n",
       " 'GAC': 165,\n",
       " 'AGA': 136,\n",
       " 'GAA': 149,\n",
       " 'AAC': 156,\n",
       " 'ACC': 171,\n",
       " 'CCG': 155,\n",
       " 'GGT': 113,\n",
       " 'GTA': 142,\n",
       " 'TAA': 138,\n",
       " 'AAT': 156,\n",
       " 'ATT': 166,\n",
       " 'TTA': 154,\n",
       " 'TAC': 162,\n",
       " 'CAA': 173,\n",
       " 'ACA': 153,\n",
       " 'GGG': 142,\n",
       " 'GCA': 178,\n",
       " 'ACT': 170,\n",
       " 'GTT': 172,\n",
       " 'GTG': 145,\n",
       " 'TGA': 160,\n",
       " 'TTG': 174,\n",
       " 'TGC': 159,\n",
       " 'CAT': 155,\n",
       " 'TAT': 160,\n",
       " 'TCC': 147,\n",
       " 'AAA': 153,\n",
       " 'CTT': 161,\n",
       " 'CCT': 143,\n",
       " 'CGT': 170,\n",
       " 'TTC': 170,\n",
       " 'CTA': 157,\n",
       " 'GCG': 155,\n",
       " 'AAG': 148,\n",
       " 'TTT': 143,\n",
       " 'ATC': 142,\n",
       " 'TCT': 172,\n",
       " 'CGC': 156,\n",
       " 'CTC': 154}"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s=\"\".join(dna)\n",
    "results=ktuples(s, k=3)\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "3e0120a0-0987-41a1-89ab-9cf0fabbac31",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " AAA: 153\n",
      " AAC: 156\n",
      " AAG: 148\n",
      " AAT: 156\n",
      " ACA: 153\n",
      " ACC: 171\n",
      " ACG: 156\n",
      " ACT: 170\n",
      " AGA: 136\n",
      " AGC: 155\n",
      " AGG: 159\n",
      " AGT: 159\n",
      " ATA: 180\n",
      " ATC: 142\n",
      " ATG: 144\n",
      " ATT: 166\n",
      " CAA: 173\n",
      " CAC: 167\n",
      " CAG: 140\n",
      " CAT: 155\n",
      " CCA: 168\n",
      " CCC: 146\n",
      " CCG: 155\n",
      " CCT: 143\n",
      " CGA: 167\n",
      " CGC: 156\n",
      " CGG: 138\n",
      " CGT: 170\n",
      " CTA: 157\n",
      " CTC: 154\n",
      " CTG: 168\n",
      " CTT: 161\n",
      " GAA: 149\n",
      " GAC: 165\n",
      " GAG: 147\n",
      " GAT: 161\n",
      " GCA: 178\n",
      " GCC: 148\n",
      " GCG: 155\n",
      " GCT: 155\n",
      " GGA: 159\n",
      " GGC: 166\n",
      " GGG: 142\n",
      " GGT: 113\n",
      " GTA: 142\n",
      " GTC: 154\n",
      " GTG: 145\n",
      " GTT: 172\n",
      " TAA: 138\n",
      " TAC: 162\n",
      " TAG: 173\n",
      " TAT: 160\n",
      " TCA: 136\n",
      " TCC: 147\n",
      " TCG: 165\n",
      " TCT: 172\n",
      " TGA: 160\n",
      " TGC: 159\n",
      " TGG: 141\n",
      " TGT: 171\n",
      " TTA: 154\n",
      " TTC: 170\n",
      " TTG: 174\n",
      " TTT: 143\n"
     ]
    }
   ],
   "source": [
    "for tup in sorted(results):\n",
    "    print(f\" {tup}: {results[tup]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63280474-edde-438e-9dc9-b5949badb78c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.13.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
