Skip to content

Commit

Permalink
Added assignment drafts
Browse files Browse the repository at this point in the history
  • Loading branch information
maxfierrog committed Feb 14, 2024
1 parent 24a35da commit acbb479
Show file tree
Hide file tree
Showing 28 changed files with 157 additions and 146 deletions.
30 changes: 29 additions & 1 deletion content/main/assignments/1.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,32 @@ weight: 1

# Assignment 1: Backward Induction

Create a generic solver and an implementation for for N to 0 by S.
Due date: 09/04/2024

---

**Task:** Create a generic recursive solver and an implementation for the game ({{< katex >}} n \in \mathbb{N} {{< /katex >}})-to-0 with move options in {{< katex >}} S \subseteq \mathbb{N_{n}\setminus\{0\}} {{< /katex >}}.

**Provided:**

* High-level steps and hints in this web page.
* A correct implementation of this game (as a separate binary, perhaps `nova`).
* A rough testing framework in the form of a script, replicating the autograding setup.
* Python skeleton code including an abstract `game` interface in a multi-file structure and basic utilities for parsing arguments from `stdin` (e.g., game parameters) and for writing to `stdout` (e.g., a memo-table analyzer, used in Assignments 2 and 3).

**Metrics:** After executing the python program with the adequate arguments, `stdout` should match the output of the provided game implementation on arbitrary (but within the bounds of a non-memoized solution) inputs of {{< katex >}} n {{< /katex >}} and {{< katex >}} S {{< /katex >}}. The specific inputs on which it will be evaluated is not provided. For this assignment, output should be the categorical "game value," `WIN`, `LOSE`, or `TIE`.

---

**Learning objectives:**

* Internalize the "API" of a finite extensive-form game via generic programming.
* Begin getting comfortable writing parameterized game implementations.
* Fundamentally understand the method of backward induction.
* Get used to testing and software organization.

{{< hint info >}}

**Note:** Participants can use any language as long as they can package it into a stand-alone program that they can submit for testing. The source code is provided through a public GitHub repository, and `nova` can be installed with the Rust toolchain.

{{< /hint >}}
30 changes: 29 additions & 1 deletion content/main/assignments/2.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,32 @@ weight: 2

# Assignment 2: Solving Efficiency

Upgrade the existing generic solver with memoization and iterative solving. Implement the game sum N from S, creating a hashing function for it in the process.
Due date: 09/13/2024

---

**Task:** Upgrade the existing generic solver with a memo table and an iterative solving algorithm. Implement the game of Number Scrabble for an arbitrary sum of {{< katex >}} n \in \mathbb{N}^{+} {{< /katex >}} from a set {{< katex >}} S \subseteq \mathbb{N}_{n} {{< /katex >}}, creating a hashing function for it in the process.

**Provided:**

* No additional skeleton code or utilities.
* High-level explanations, steps, and hints in this web page.
* A symbolic representation of the iterative solving algorithm.
* The binary they installed in Assignment 1 also includes a correct solution for this assignment, and the same testing framework still works.

**Metrics:** After executing the python program, `stdout` should match the output of the provided game implementation on arbitrary inputs of {{< katex >}} n {{< /katex >}} and {{< katex >}} S {{< /katex >}} (within the now extended bounds of an iterative and memoized solution). The specific inputs on which it will be evaluated is not provided. This output should now be a breakdown of the number of winning, losing, and tying positions in the game (which they can print via the provided analysis utilities).

---

**Learning objectives:**

* Overcome the difficulty of a more complicated implementation of the `game` interface.
* Understand the added efficiency of iterative and memoized solving algorithms.
* Become familiarized with creating injective state hashing functions.
* Ease into being able to create a new game module from scratch.

{{< hint info >}}

**Note:** Participants did not need to create a hashing function for the first assignment, as it is not generally necessary for N-to-0. No additional downloads or installations are necessary for this assignment. They should be able to just pass in the memo table they populate with their solving algorithm to the utility functions (which will provide a specific API).

{{< /hint >}}
30 changes: 29 additions & 1 deletion content/main/assignments/3.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,32 @@ weight: 3

# Assignment 3: Hidden Symmetry

Implement N-sided Tic-Tac-Toe with a symmetry removal flag. Implement "symmetry removal" for certain cases of sum N from S.
Due date: 09/23/2024

---

**Task:** Implement {{< katex >}}(n \in \mathbb{N}^{+}){{< /katex >}}-sided Tic-Tac-Toe (win in {{< katex >}}n{{< /katex >}}) with a symmetry removal flag. Add symmetry removal for certain cases (probably just the 3x3 magic square case) of Number Scrabble by taking inspiration on their isomorphic Tic-Tac-Toe counterparts, also under a flag argument. Modify solving algorithm to also store remoteness values.

**Provided:**

* No additional skeleton code.
* Tips on generating symmetric positions for Tic-Tac-Toe cleanly.
* An explanation of the correspondence between TTT and Number Scrabble.
* The binary they installed in Assignment 1 also includes a correct solution for this assignment, and the same testing framework still works.

**Metrics:** After executing the python program, `stdout` should match the output of the provided game implementation on arbitrary inputs of {{< katex >}} n {{< /katex >}} and {{< katex >}} S {{< /katex >}} (within the now extended bounds of an iterative and memoized solution). The specific inputs on which it will be evaluated is not provided. This output should now be a breakdown of the number of winning, losing, and tying positions in the game grouped by remoteness (which they can print via the provided analysis utilities).

---

**Learning objectives:**

* Learn the technique of symmetry removal intuitively via TTT's square board.
* Continue the trend of generic code / parameterization to symmetry removal.
* Get practice for writing state hash functions for physical board games.
* Gain an overall understanding of games as algebraic objects.

{{< hint info >}}

**Note:** This assignment should be very guided. While participants will practice hashing and the implementation of the game interface in this assignment, its purpose is ultimately to get them thinking about the mathematical structure of games, and to use this understanding to motivate something useful (symmetry removal on a game that has no obvious spatial "symmetry").

{{< /hint >}}
26 changes: 23 additions & 3 deletions content/main/assignments/4.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
---
title: 4. Persistence is Key
title: 4. Theoretical Potpourri
type: docs
weight: 4
---

# Assignment 4: Persistence is Key
# Assignment 4: Theoretical Potpourri

Implement a partition enumeration function for all games. Implement a couple small modules of a very rudimentary database: The eviction policy and encoding/decoding. Show reduction in peak memory usage.
Due date: 10/02/2024

---

**Task:** Answer the following questions.

1. For the following game, write two algorithms in pseudocode that take a game state as input and output a number, effectively partitioning the space of states. Make sure that one of the algorithms induces a meta-graph that is a DAG, and the other a linked list. [...]
2. For the following game, write the tightest possible upper bound on its number of states, and estimate an average number of possible moves for any state. Provide a justification. [...]
3. In the worst case, can a weak solution take as much space as a strong solution to a game? Explain why.
5. Provide an example of a game in reduced graph form with regular states, 2 pure-draw levels, and at least one non-pure draw cluster.
6. [...]

**Provided:**

* Perhaps a {{< katex >}} \LaTeX {{< /katex >}} template for the deranged.

**Metrics:** Nothing, really. Just good effort.

---

**Learning objectives:** Reinforce and confirm the theoretical knowledge covered during the first third of the semester (see [course roadmap](/)).
20 changes: 19 additions & 1 deletion content/main/assignments/5.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,22 @@ weight: 5

# Assignment 5: Design Specification

Select the project that you like best from a pool of entry-level projects, and create a design specification which the project's owner will review.
Due date: 10/11/2024

---

**Task:** Select the project that you like best from a pool of entry-level projects created by veterans throughout the start of the semester, form a team with the people interested in the same project, and create a design specification which the project's creator(s) will review with you in-person. See [course roadmap](/) for how this plays out chronologically.

---

**Learning objectives:**

* Become acquainted with one of our main systems, while respecting individual interests.
* Gain the ability to integrate a new feature from scratch.
* Understand how collaboration works in software.

{{< hint info >}}

**Note:** This intentionally coincides with a few sessions that go over the architecture of our systems (see the [course roadmap](/)). There is a lot of logistics to work out here, but I wanted to remark on only allowing up to a certain amount of individuals per project (maybe 2 or 3).

{{< /hint >}}
6 changes: 5 additions & 1 deletion content/main/assignments/6.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ weight: 6

# Assignment 6: Team Presentation

Present the results of your project during session with your collaborators.
Due date: 11/01/2024

---

Present the results of your project during session with your collaborators. This can happen over a couple days.
8 changes: 8 additions & 0 deletions content/main/assignments/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,11 @@ weight: 10
bookCollapseSection: true
bookFlatSection: true
---

# Overview of Assignments

---

1. The first three assignments involve the implementation of three games within a Python-based system for which we provide significant resources, `GamesmanNewbie`. They are an introduction to the most important techniques we use.
2. The fourth assignment is written, and covers partitioning, parallel solving, and other elements that are impractical to leave to implementation.
3. The fifth and sixth assignments are a group project. The fifth is a project specification, and the sixth is a presentation. Please see the [course outline](/) for how this plays out chronologically.
15 changes: 15 additions & 0 deletions content/main/notes/example.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Example Topic
type: docs
weight: 0
---

# Example Topic

---

{{< katex display >}}

\int_{0}^{\infty} \frac{1}{x^2} \; dx = \; ?

{{< /katex >}}
7 changes: 0 additions & 7 deletions content/main/notes/game_theory/1_games.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/game_theory/2_strategic.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/game_theory/3_equilibrium.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/game_theory/4_extensive.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/game_theory/5_subgame.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/game_theory/6_collaborative.md

This file was deleted.

5 changes: 0 additions & 5 deletions content/main/notes/game_theory/_index.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/mathematics/1_fundamentals.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/mathematics/2_combinatorics.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/mathematics/3_algorithms.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/mathematics/4_complexity.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/mathematics/5_groups.md

This file was deleted.

5 changes: 0 additions & 5 deletions content/main/notes/mathematics/_index.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/techniques/1_hashing.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/techniques/2_backward_induction.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/techniques/3_memoization.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/techniques/4_symmetry_removal.md

This file was deleted.

7 changes: 0 additions & 7 deletions content/main/notes/techniques/5_partitioning.md

This file was deleted.

11 changes: 0 additions & 11 deletions content/main/notes/techniques/6_parallelization.md

This file was deleted.

5 changes: 0 additions & 5 deletions content/main/notes/techniques/_index.md

This file was deleted.

0 comments on commit acbb479

Please sign in to comment.