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
+}