diff --git a/.ipynb_checkpoints/week7-checkpoint.ipynb b/.ipynb_checkpoints/week7-checkpoint.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..59ac1fb171baa09860d4828d2a6a4b8f082f9d21
--- /dev/null
+++ b/.ipynb_checkpoints/week7-checkpoint.ipynb
@@ -0,0 +1,157 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 74,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "testing\n",
+      "balance_group: 218393.51666666797\n"
+     ]
+    }
+   ],
+   "source": [
+    "import random\n",
+    "\n",
+    "# Helpers\n",
+    "def calc_deltas(t, ns):\n",
+    "    deltas = []\n",
+    "    \n",
+    "    for n in ns:\n",
+    "        deltas.append(t-n)\n",
+    "    \n",
+    "    return deltas\n",
+    "\n",
+    "def largest_index(ns):\n",
+    "    largest = ns[0]\n",
+    "    largest_i = 0\n",
+    "    \n",
+    "    for i in range(len(ns)):\n",
+    "        n = ns[i]\n",
+    "        if n > largest:\n",
+    "            largest = n\n",
+    "            largest_i = i\n",
+    "\n",
+    "    return largest_i\n",
+    "\n",
+    "def sub_sum(ns):\n",
+    "    sums = []\n",
+    "    for n in ns:\n",
+    "        sums.append(sum(n))\n",
+    "        \n",
+    "    return sums\n",
+    "\n",
+    "def sub_add(delta, ns):\n",
+    "    new = []\n",
+    "    for n in ns:\n",
+    "        new.append(n+delta)\n",
+    "        \n",
+    "    return new\n",
+    "\n",
+    "def sub_abs(ns):\n",
+    "    new = []\n",
+    "    for n in ns:\n",
+    "        new.append(abs(n))\n",
+    "        \n",
+    "    return new\n",
+    "\n",
+    "# Runners\n",
+    "def gen_nums(num_nums, num_groups):\n",
+    "    num_min = 0\n",
+    "    num_max = int(num_nums/(num_groups))\n",
+    "\n",
+    "    nums = []\n",
+    "    for i in range(num_nums):\n",
+    "        nums.append(random.randint(num_min, num_max))\n",
+    "        \n",
+    "    return nums\n",
+    "\n",
+    "def run_alg(num_nums, num_groups, grouper):\n",
+    "    nums = gen_nums(num_nums, num_groups)\n",
+    "    groups = grouper(nums, num_groups)\n",
+    "    \n",
+    "    \n",
+    "    group_sums = sub_sum(groups)\n",
+    "    group_deltas = calc_deltas(target, group_sums)\n",
+    "    group_deltas = sub_abs(group_deltas)\n",
+    "    \n",
+    "    return group_deltas\n",
+    "\n",
+    "def test_alg(num_nums, num_groups, grouper, iterations):\n",
+    "    deltas = []\n",
+    "    \n",
+    "    for i in range(iterations):\n",
+    "        deltas.extend(run_alg(num_nums, num_groups, grouper))\n",
+    "        \n",
+    "    delta = sum(deltas)\n",
+    "    avg = delta / (iterations * num_groups)\n",
+    "        \n",
+    "    return avg\n",
+    "\n",
+    "# Algorithms\n",
+    "def balance_group(nums, num_groups):\n",
+    "    # Initialize groups\n",
+    "    groups = []\n",
+    "    for i in range(num_groups):\n",
+    "        groups.append([])\n",
+    "\n",
+    "    # Target info\n",
+    "    num_sums = sum(nums)\n",
+    "    target = num_sums / num_groups\n",
+    "\n",
+    "    # Group\n",
+    "    nums.sort()\n",
+    "\n",
+    "    for n in nums:\n",
+    "        sums = sub_sum(groups)\n",
+    "        #sums = sub_add(n, sums) # Might improve? Have to test\n",
+    "        deltas = calc_deltas(target, sums)\n",
+    "        largest_d = largest_index(deltas)\n",
+    "\n",
+    "        groups[largest_d].append(n)\n",
+    "        \n",
+    "    return groups\n",
+    "\n",
+    "# Test\n",
+    "num_nums = 200\n",
+    "num_groups = 5\n",
+    "iterations = 100\n",
+    "\n",
+    "print(\"testing\")\n",
+    "print(\"balance_group: {}\".format(test_alg(num_nums, num_groups, balance_group, iterations)))"
+   ]
+  },
+  {
+   "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.6.4"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/q2/wk7/week7.ipynb b/q2/wk7/week7.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..59ac1fb171baa09860d4828d2a6a4b8f082f9d21
--- /dev/null
+++ b/q2/wk7/week7.ipynb
@@ -0,0 +1,157 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 74,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "testing\n",
+      "balance_group: 218393.51666666797\n"
+     ]
+    }
+   ],
+   "source": [
+    "import random\n",
+    "\n",
+    "# Helpers\n",
+    "def calc_deltas(t, ns):\n",
+    "    deltas = []\n",
+    "    \n",
+    "    for n in ns:\n",
+    "        deltas.append(t-n)\n",
+    "    \n",
+    "    return deltas\n",
+    "\n",
+    "def largest_index(ns):\n",
+    "    largest = ns[0]\n",
+    "    largest_i = 0\n",
+    "    \n",
+    "    for i in range(len(ns)):\n",
+    "        n = ns[i]\n",
+    "        if n > largest:\n",
+    "            largest = n\n",
+    "            largest_i = i\n",
+    "\n",
+    "    return largest_i\n",
+    "\n",
+    "def sub_sum(ns):\n",
+    "    sums = []\n",
+    "    for n in ns:\n",
+    "        sums.append(sum(n))\n",
+    "        \n",
+    "    return sums\n",
+    "\n",
+    "def sub_add(delta, ns):\n",
+    "    new = []\n",
+    "    for n in ns:\n",
+    "        new.append(n+delta)\n",
+    "        \n",
+    "    return new\n",
+    "\n",
+    "def sub_abs(ns):\n",
+    "    new = []\n",
+    "    for n in ns:\n",
+    "        new.append(abs(n))\n",
+    "        \n",
+    "    return new\n",
+    "\n",
+    "# Runners\n",
+    "def gen_nums(num_nums, num_groups):\n",
+    "    num_min = 0\n",
+    "    num_max = int(num_nums/(num_groups))\n",
+    "\n",
+    "    nums = []\n",
+    "    for i in range(num_nums):\n",
+    "        nums.append(random.randint(num_min, num_max))\n",
+    "        \n",
+    "    return nums\n",
+    "\n",
+    "def run_alg(num_nums, num_groups, grouper):\n",
+    "    nums = gen_nums(num_nums, num_groups)\n",
+    "    groups = grouper(nums, num_groups)\n",
+    "    \n",
+    "    \n",
+    "    group_sums = sub_sum(groups)\n",
+    "    group_deltas = calc_deltas(target, group_sums)\n",
+    "    group_deltas = sub_abs(group_deltas)\n",
+    "    \n",
+    "    return group_deltas\n",
+    "\n",
+    "def test_alg(num_nums, num_groups, grouper, iterations):\n",
+    "    deltas = []\n",
+    "    \n",
+    "    for i in range(iterations):\n",
+    "        deltas.extend(run_alg(num_nums, num_groups, grouper))\n",
+    "        \n",
+    "    delta = sum(deltas)\n",
+    "    avg = delta / (iterations * num_groups)\n",
+    "        \n",
+    "    return avg\n",
+    "\n",
+    "# Algorithms\n",
+    "def balance_group(nums, num_groups):\n",
+    "    # Initialize groups\n",
+    "    groups = []\n",
+    "    for i in range(num_groups):\n",
+    "        groups.append([])\n",
+    "\n",
+    "    # Target info\n",
+    "    num_sums = sum(nums)\n",
+    "    target = num_sums / num_groups\n",
+    "\n",
+    "    # Group\n",
+    "    nums.sort()\n",
+    "\n",
+    "    for n in nums:\n",
+    "        sums = sub_sum(groups)\n",
+    "        #sums = sub_add(n, sums) # Might improve? Have to test\n",
+    "        deltas = calc_deltas(target, sums)\n",
+    "        largest_d = largest_index(deltas)\n",
+    "\n",
+    "        groups[largest_d].append(n)\n",
+    "        \n",
+    "    return groups\n",
+    "\n",
+    "# Test\n",
+    "num_nums = 200\n",
+    "num_groups = 5\n",
+    "iterations = 100\n",
+    "\n",
+    "print(\"testing\")\n",
+    "print(\"balance_group: {}\".format(test_alg(num_nums, num_groups, balance_group, iterations)))"
+   ]
+  },
+  {
+   "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.6.4"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}