Skip to content

Commit

Permalink
Merge pull request #59 from andreas-roehler/master
Browse files Browse the repository at this point in the history
solution2.2.6.2 provided
  • Loading branch information
winitzki authored Mar 20, 2024
2 parents fc24ac1 + 6f219f2 commit 5aa0c11
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
35 changes: 35 additions & 0 deletions chapter02/worksheets/solution2.2.6.2.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
Exercise 2.2.6.2
Implement the flatten method for sequences by using foldLeft.
The required type signature and a sample test are:
def flatten[A](xxs: Seq[Seq[A]]): Seq[A] = ???
scala> flatten(Seq(Seq(1, 2, 3), Seq(), Seq(4)))
res0: Seq[Int] = List(1, 2, 3, 4)
scala> flatten(Seq(Seq("a","b"), Seq(), (Seq("c","<nothing>"))))
val res1: Seq[String] = List(a, b, c, <nothing>)
*/

def flatten[A](xxs: Seq[Seq[A]]): Seq[A] = {
var init: Seq[A] = Seq()
xxs.foldLeft(init){ (x, y) => y.foreach( k => (init = init :+ k)); init}
}

val result = flatten(Seq(Seq(1, 2, 3), Seq(), Seq(4)))
val expected: Seq[Int] = List(1, 2, 3, 4)
assert(result == expected)

val a = flatten(Seq(Seq("a","b"), Seq(), (Seq("c","<nothing>"))))
val b: Seq[String] = List("a", "b", "c", "<nothing>")
assert(a == b)

// scala> :load solution2.2.6.2.scala
// :load solution2.2.6.2.scala
// def flatten[A](xxs: Seq[Seq[A]]): Seq[A]
// val result: Seq[Int] = List(1, 2, 3, 4)
// val expected: Seq[Int] = List(1, 2, 3, 4)
// val a: Seq[String] = List(a, b, c, <nothing>)
// val b: Seq[String] = List(a, b, c, <nothing>)
46 changes: 46 additions & 0 deletions chapter02/worksheets/solution2.2.6.2_main.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
Exercise 2.2.6.2
Implement the flatten method for sequences by using foldLeft.
The required type signature and a sample test are:
def flatten[A](xxs: Seq[Seq[A]]): Seq[A] = ???
scala> flatten(Seq(Seq(1, 2, 3), Seq(), Seq(4)))
res0: Seq[Int] = List(1, 2, 3, 4)
scala> flatten(Seq(Seq("a","b"), Seq(), (Seq("c","<nothing>"))))
val res1: Seq[String] = List(a, b, c, <nothing>)
*/

object Flatten {
def flatten[A](xxs: Seq[Seq[A]]): Seq[A] = {
var init: Seq[A] = Seq()
xxs.foldLeft(init){ (x, y) => y.foreach( k => (init = init :+ k)); init}
}
def main(args: Array[String]): Unit = {

val result = flatten(Seq(Seq(1, 2, 3), Seq(), Seq(4)))
val expected: Seq[Int] = List(1, 2, 3, 4)
println("result: %s".format(result))
println("expected: %s".format(expected))
assert(result == expected)

val a = flatten(Seq(Seq("a","b"), Seq(), (Seq("c","<nothing>"))))
val b: Seq[String] = List("a", "b", "c", "<nothing>")
println("a: %s".format(a))
println("b: %s".format(b))

assert(a == b)
}
}

Flatten.main(Array())

// scala> :load solution2.2.6.2_main.scala
// :load solution2.2.6.2_main.scala
// result: List(1, 2, 3, 4)
// expected: List(1, 2, 3, 4)
// a: List(a, b, c, <nothing>)
// b: List(a, b, c, <nothing>)
// // defined object Flatten

0 comments on commit 5aa0c11

Please sign in to comment.