From e7ea1fc20f209db95f41ff84691d7eaeef731fdd Mon Sep 17 00:00:00 2001 From: Mushtaq Ahmed Date: Fri, 25 Jul 2014 16:57:22 +0530 Subject: [PATCH] day2 --- salestax.txt | 23 +++++++++++++++++++++ src/main/scala/ws/{ => day1}/1.sc | 0 src/main/scala/ws/{ => day1}/2.sc | 0 src/main/scala/ws/{ => day1}/3.sc | 20 +++++++++--------- src/main/scala/ws/day1/4.sc | 15 ++++++++++++++ src/main/scala/ws/day1/5.sc | 34 +++++++++++++++++++++++++++++++ src/main/scala/ws/day2/10.sc | 34 +++++++++++++++++++++++++++++++ src/main/scala/ws/day2/11.sc | 24 ++++++++++++++++++++++ src/main/scala/ws/day2/12.sc | 22 ++++++++++++++++++++ src/main/scala/ws/day2/13.sc | 21 +++++++++++++++++++ src/main/scala/ws/day2/6.sc | 22 ++++++++++++++++++++ src/main/scala/ws/day2/7.sc | 13 ++++++++++++ src/main/scala/ws/day2/8.sc | 18 ++++++++++++++++ src/main/scala/ws/day2/9.sc | 11 ++++++++++ 14 files changed, 247 insertions(+), 10 deletions(-) create mode 100644 salestax.txt rename src/main/scala/ws/{ => day1}/1.sc (100%) rename src/main/scala/ws/{ => day1}/2.sc (100%) rename src/main/scala/ws/{ => day1}/3.sc (78%) create mode 100644 src/main/scala/ws/day1/4.sc create mode 100644 src/main/scala/ws/day1/5.sc create mode 100644 src/main/scala/ws/day2/10.sc create mode 100644 src/main/scala/ws/day2/11.sc create mode 100644 src/main/scala/ws/day2/12.sc create mode 100644 src/main/scala/ws/day2/13.sc create mode 100644 src/main/scala/ws/day2/6.sc create mode 100644 src/main/scala/ws/day2/7.sc create mode 100644 src/main/scala/ws/day2/8.sc create mode 100644 src/main/scala/ws/day2/9.sc diff --git a/salestax.txt b/salestax.txt new file mode 100644 index 0000000..94a80d7 --- /dev/null +++ b/salestax.txt @@ -0,0 +1,23 @@ + +Items: Books/medicines +Compiute the receipt +Taxes + SalesTax: round down + ImportDuty: only for imported items, round up + + SalesTax ImportDuty +Books 10.8 9.4 +Medicines 2.7 10.1 + +Billing + Book1: 120.1 + Book2: 1004, imported + Book3: 87.8 + Medicine1: 503.3 + Medicine2: 19.3 + +Hints: + Use transform method + Use ceil and floor on double + use sum on double sequences + diff --git a/src/main/scala/ws/1.sc b/src/main/scala/ws/day1/1.sc similarity index 100% rename from src/main/scala/ws/1.sc rename to src/main/scala/ws/day1/1.sc diff --git a/src/main/scala/ws/2.sc b/src/main/scala/ws/day1/2.sc similarity index 100% rename from src/main/scala/ws/2.sc rename to src/main/scala/ws/day1/2.sc diff --git a/src/main/scala/ws/3.sc b/src/main/scala/ws/day1/3.sc similarity index 78% rename from src/main/scala/ws/3.sc rename to src/main/scala/ws/day1/3.sc index 4ee9da6..54cae2b 100644 --- a/src/main/scala/ws/3.sc +++ b/src/main/scala/ws/day1/3.sc @@ -39,16 +39,16 @@ def map3(xs: Seq[Int], f: Int => Int): Seq[Int] = { } } - lazy val loop1: (Seq[Int], Seq[Int]) => Seq[Int] = { (remaining, acc) => - if(remaining.isEmpty) - acc - else { - val newAcc = acc :+ f(remaining.head) - loop1(remaining.tail, newAcc) - } - } - - loop1(xs, Seq.empty) +// lazy val loop1: (Seq[Int], Seq[Int]) => Seq[Int] = { (remaining, acc) => +// if(remaining.isEmpty) +// acc +// else { +// val newAcc = acc :+ f(remaining.head) +// loop1(remaining.tail, newAcc) +// } +// } + + loop(xs, Seq.empty) } def square(a: Int) = a * a diff --git a/src/main/scala/ws/day1/4.sc b/src/main/scala/ws/day1/4.sc new file mode 100644 index 0000000..5785f7b --- /dev/null +++ b/src/main/scala/ws/day1/4.sc @@ -0,0 +1,15 @@ + +val x = 10 + +def While(cond: => Boolean)(body: () => Unit): Unit = + if(cond) { + body + While(cond)(body) + } + +var y = 0 + +While(y < 10){ + println(y) + y = y + 1 +} diff --git a/src/main/scala/ws/day1/5.sc b/src/main/scala/ws/day1/5.sc new file mode 100644 index 0000000..c478f64 --- /dev/null +++ b/src/main/scala/ws/day1/5.sc @@ -0,0 +1,34 @@ + + +def add(a: Int, b: Int) = a + b + +def adder2(b: Int) = add(2, b) +def adder3(b: Int) = add(3, b) + +adder2(10) +adder3(10) + +def add1(a: Int)(b: Int) = a + b +val curr = add1 _ + +val cAdder2 = curr(2) +val cAdder3 = add1(3) _ + +def applier(x: Int, adder: Int => Int) = + adder(x) + +cAdder2(10) +cAdder3(10) + +applier(10, add1(100)) +applier(10, add1(101)) + +applier(10, x => add(100, x)) +applier(10, x => add(101, x)) +applier(10, x => add(101, x)) + +def dd(x: Int) = add(101, x) + +applier(10, dd) + + diff --git a/src/main/scala/ws/day2/10.sc b/src/main/scala/ws/day2/10.sc new file mode 100644 index 0000000..b867d38 --- /dev/null +++ b/src/main/scala/ws/day2/10.sc @@ -0,0 +1,34 @@ +//abstract class CanDrink1(name: String) { +// def apply(age: Int): Boolean +// +// def isWise(age: Int) = apply(age) && age > 43 +//} +// +//class Person1(name: String) extends CanDrink1(name + "asasd") { +// def apply(age: Int) = true +//} +//new Person1("blah") + +trait CanDrink { + + def x: Int + + protected def name: String + + def apply(age: Int): Boolean + + def isWise(age: Int) = apply(age) && age > 43 + +} + +class Person1(val name: String) extends CanDrink { + val x: Int = 101 + def apply(age: Int) = true +} + +new Person1("blah").name + + +class Nitin(name: String) { + private val age = name.length +} \ No newline at end of file diff --git a/src/main/scala/ws/day2/11.sc b/src/main/scala/ws/day2/11.sc new file mode 100644 index 0000000..c305aa8 --- /dev/null +++ b/src/main/scala/ws/day2/11.sc @@ -0,0 +1,24 @@ + +trait A { + def canDrink(age: Int): Boolean = true +} + +trait CanDrink extends A{ +// val x = 100 + override def canDrink(age: Int) = + age > 19 && super.canDrink(age) +} +trait CanRun extends A{ + override def canDrink(age: Int) = age > 19 +// val y = 200 + def canRun(age: Int) = age < 90 +} +class Person extends CanDrink with CanRun +class Person1 extends CanRun with CanDrink + +val p = new Person +val p1 = new CanDrink with CanRun + +//p.x +//p.y +1 diff --git a/src/main/scala/ws/day2/12.sc b/src/main/scala/ws/day2/12.sc new file mode 100644 index 0000000..442c724 --- /dev/null +++ b/src/main/scala/ws/day2/12.sc @@ -0,0 +1,22 @@ + +trait A { + def m: Int + def n = m.toString +} + +trait B { + def n: String + def m = 10 +} + + + +class C extends A with B + +val ab: A with B = new A with B +val ba: A with B = new B with A + +val c = new C + +c.m +c.n \ No newline at end of file diff --git a/src/main/scala/ws/day2/13.sc b/src/main/scala/ws/day2/13.sc new file mode 100644 index 0000000..9da7ab5 --- /dev/null +++ b/src/main/scala/ws/day2/13.sc @@ -0,0 +1,21 @@ +trait A { self: B => + def x = 10 + def b = a + 2 +} + +trait B { self: A => + def y = x + 100 + def a = 1 +} + +new A with B +new A +new B + +class C extends A with B + +val c = new C +c.a +c.b +c.x +c.y \ No newline at end of file diff --git a/src/main/scala/ws/day2/6.sc b/src/main/scala/ws/day2/6.sc new file mode 100644 index 0000000..a3151cd --- /dev/null +++ b/src/main/scala/ws/day2/6.sc @@ -0,0 +1,22 @@ + +object A { + class Person private (var age: Int, val isFemale: Boolean) { +// def this(age: Int) = this(age, false) + def m = Person.b + 2 + private def n = "n" + } + object Person { + private val b = 10 + def make(age: Int) = { + val p = new Person(age, false) + p.n + p + } + } + val p3 = Person.make(333) + p3: p3.type + + val p = new Person(33, true) + +} + diff --git a/src/main/scala/ws/day2/7.sc b/src/main/scala/ws/day2/7.sc new file mode 100644 index 0000000..13c6268 --- /dev/null +++ b/src/main/scala/ws/day2/7.sc @@ -0,0 +1,13 @@ + +case class Address(line1: String, pin: Int) +case class Person(age: Int, isFemale: Boolean, add: Address) { + def incrementedPin = copy(add = add.copy(pin = add.pin + 1)) +} + +val p = Person(23, true, Address("baner", 21)) + +def increaseAge(p: Person) = + p.copy(age = p.age +1) +def increasePin(p: Person) = p.incrementedPin + +def compare(p1: Person, p2: Person) = p1 == p2 diff --git a/src/main/scala/ws/day2/8.sc b/src/main/scala/ws/day2/8.sc new file mode 100644 index 0000000..9d20fc7 --- /dev/null +++ b/src/main/scala/ws/day2/8.sc @@ -0,0 +1,18 @@ + +trait CanDrink { + def apply(age: Int): Boolean + + final def isWise(age: Int) = apply(age) && age > 43 +} + +class X extends CanDrink { + def apply(age: Int) = true + + override def isWise(age: Int) = { + if(age > 100) true else super.isWise(age) + } +} + +new CanDrink { + def apply(age: Int) = false +} diff --git a/src/main/scala/ws/day2/9.sc b/src/main/scala/ws/day2/9.sc new file mode 100644 index 0000000..cad313b --- /dev/null +++ b/src/main/scala/ws/day2/9.sc @@ -0,0 +1,11 @@ + + +case class Person(name: String, age: Int) + +val p1 = new Person("mushtaq", 101) +val p2 = new Person("ashish", 10) +val p3 = new Person("ashish", 10) + +p1 == p2 + +p2 == p3 \ No newline at end of file