Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added Tony's exercieses for beginners
- Loading branch information
1 parent
9dacd69
commit 1e97358
Showing
1 changed file
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
// You are not permitted to use these List methods: | ||
// * length | ||
// * map | ||
// * filter | ||
// * ::: (and variations such as ++) | ||
// * flatten | ||
// * flatMap | ||
// * reverse (and variations i.e. reverseMap, reverse_:::) | ||
// This also means you are not permitted to use for-comprehensions on Lists. | ||
// You are permitted to use the functions you write yourself. For example, Exercise 2 may use Exercise 1 or Exercise 3. | ||
// Using permitted existing methods where appropriate will attract marks for elegance. | ||
|
||
// TOTAL marks: /66 | ||
|
||
object Exercises { | ||
def succ(n: Int) = n + 1 | ||
def pred(n: Int) = n - 1 | ||
|
||
// Exercise 1 | ||
// Relative Difficulty: 1 | ||
// Correctness: 2.0 marks | ||
// Performance: 0.5 mark | ||
// Elegance: 0.5 marks | ||
// Total: 3 | ||
def add(x: Int, y: Int): Int = if(y>0) add(succ(x),pred(y)) else x | ||
|
||
// Exercise 2 | ||
// Relative Difficulty: 2 | ||
// Correctness: 2.5 marks | ||
// Performance: 1 mark | ||
// Elegance: 0.5 marks | ||
// Total: 4 | ||
def sum(x: List[Int]): Int = error("todo") | ||
|
||
// Exercise 3 | ||
// Relative Difficulty: 2 | ||
// Correctness: 2.5 marks | ||
// Performance: 1 mark | ||
// Elegance: 0.5 marks | ||
// Total: 4 | ||
def length[A](x: List[A]): Int = error("todo") | ||
|
||
// Exercise 4 | ||
// Relative Difficulty: 5 | ||
// Correctness: 4.5 marks | ||
// Performance: 1.0 mark | ||
// Elegance: 1.5 marks | ||
// Total: 7 | ||
def map[A, B](x: List[A], f: A => B): List[B] = error("todo") | ||
|
||
// Exercise 5 | ||
// Relative Difficulty: 5 | ||
// Correctness: 4.5 marks | ||
// Performance: 1.5 marks | ||
// Elegance: 1 mark | ||
// Total: 7 | ||
def filter[A](x: List[A], f: A => Boolean): List[A] = error("todo") | ||
|
||
// Exercise 6 | ||
// Relative Difficulty: 5 | ||
// Correctness: 4.5 marks | ||
// Performance: 1.5 marks | ||
// Elegance: 1 mark | ||
// Total: 7 | ||
def append[A](x: List[A], y: List[A]): List[A] = error("todo") | ||
|
||
// Exercise 7 | ||
// Relative Difficulty: 5 | ||
// Correctness: 4.5 marks | ||
// Performance: 1.5 marks | ||
// Elegance: 1 mark | ||
// Total: 7 | ||
def concat[A](x: List[List[A]]): List[A] = error("todo") | ||
|
||
// Exercise 8 | ||
// Relative Difficulty: 7 | ||
// Correctness: 5.0 marks | ||
// Performance: 1.5 marks | ||
// Elegance: 1.5 mark | ||
// Total: 8 | ||
def concatMap[A, B](x: List[A], f: A => List[B]): List[B] = error("todo") | ||
|
||
// Exercise 9 | ||
// Relative Difficulty: 8 | ||
// Correctness: 3.5 marks | ||
// Performance: 3.0 marks | ||
// Elegance: 2.5 marks | ||
// Total: 9 | ||
def maximum(x: List[Int]): Int = error("todo") | ||
|
||
// Exercise 10 | ||
// Relative Difficulty: 10 | ||
// Correctness: 5.0 marks | ||
// Performance: 2.5 marks | ||
// Elegance: 2.5 marks | ||
// Total: 10 | ||
def reverse[A](x: List[A]): List[A] = error("todo") | ||
} |