From 3005122842ba39d178c063a5435b4b6256d80423 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= <timothee.floure@posteo.net>
Date: Wed, 18 Sep 2019 16:36:14 +0200
Subject: [PATCH] Add subject for assignment 1 - recfun

---
 week1/03-homework1.md | 94 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 week1/03-homework1.md

diff --git a/week1/03-homework1.md b/week1/03-homework1.md
new file mode 100644
index 0000000..8f4942b
--- /dev/null
+++ b/week1/03-homework1.md
@@ -0,0 +1,94 @@
+# Assignment 1: Recursion
+
+# Setup
+
+You can use the following commands to make a fresh clone of your repository:
+
+```shell
+git clone -b recfun git@gitlab.epfl.ch:lamp/student-repositories-f19/cs206-GASPAR.git cs210-recfun
+cd cs210-recfun
+```
+
+You can always refer to:
+  * [the example guide](https://gitlab.epfl.ch/lamp/cs-210-functional-programming-2019/blob/master/week1/01-example.md) on the development workflow.
+  * [this guide](https://gitlab.epfl.ch/lamp/cs-210-functional-programming-2019/blob/master/week1/02-grading-and-submission.md) for details on the submission system.
+
+# Exercise 1: Pascal's Triangle
+
+The following pattern of numbers is called _Pascal's triangle_.
+
+        1
+       1 1
+      1 2 1
+     1 3 3 1
+    1 4 6 4 1
+       ...
+
+The numbers at the edge of the triangle are all `1`, and each number
+inside the triangle is the sum of the two numbers above it. Write a
+function that computes the elements of Pascal's triangle by means of a
+recursive process.
+
+Do this exercise by implementing the `pascal` function in
+`Main.scala`, which takes a column `c` and a row `r`, counting from
+`0` and returns the number at that spot in the triangle. For example,
+`pascal(0,2)=1`, `pascal(1,2)=2` and `pascal(1,3)=3`.
+
+    def pascal(c: Int, r: Int): Int
+
+# Exercise 2: Parentheses Balancing
+
+Write a recursive function which verifies the balancing of parentheses
+in a string, which we represent as a `List[Char]` not a `String`. For
+example, the function should return `true` for the following strings:
+
+- (if (zero? x) max (/ 1 x))
+- I told him (that it's not (yet) done).
+  (But he wasn't listening)
+
+The function should return `false` for the following strings:
+<ul>
+<li>:-)</li>
+<li>())(</li>
+</ul>
+
+The last example shows that it's not enough to verify that a string
+contains the same number of opening and closing parentheses.
+
+Do this exercise by implementing the `balance` function in
+`Main.scala`. Its signature is as follows:
+
+    def balance(chars: List[Char]): Boolean
+
+There are three methods on `List[Char]` that are useful for this
+exercise:
+
+- `chars.isEmpty: Boolean` returns whether a list is empty
+- `chars.head: Char` returns the first element of the list
+- `chars.tail: List[Char]` returns the list without the first element
+
+__Hint__: you can define an inner function if you need to pass extra
+parameters to your function.
+
+__Testing__: You can use the `toList` method to convert from a
+`String` to a `List[Char]`: e.g. `"(just an) example".toList`.
+
+# Exercise 3: Counting Change
+
+Write a recursive function that counts how many different ways you can
+make change for an amount, given a list of coin denominations. For
+example, there are 3 ways to give change for 4 if you have coins with
+denomiation 1 and 2: 1+1+1+1, 1+1+2, 2+2.
+
+Do this exercise by implementing the `countChange` function in
+`Main.scala`. This function takes an amount to change, and a list of
+unique denominations for the coins. Its signature is as follows:
+
+    def countChange(money: Int, coins: List[Int]): Int
+
+Once again, you can make use of functions `isEmpty`, `head` and `tail`
+on the list of integers `coins`.
+
+__Hint__: Think of the degenerate cases. How many ways can you give
+change for 0 CHF? How many ways can you give change for >0 CHF, if you
+have no coins?
-- 
GitLab