Skip to content

Instantly share code, notes, and snippets.

@hhimanshu
Last active June 15, 2025 03:59
Show Gist options
  • Select an option

  • Save hhimanshu/55564b70dac97d0aa4eb to your computer and use it in GitHub Desktop.

Select an option

Save hhimanshu/55564b70dac97d0aa4eb to your computer and use it in GitHub Desktop.

Revisions

  1. hhimanshu revised this gist Sep 24, 2015. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions Chapter09.scala
    Original file line number Diff line number Diff line change
    @@ -119,3 +119,4 @@ scala>
    1048576.0 9.5367431640625E-7
    */

    // skipping 6-10
  2. hhimanshu revised this gist Sep 24, 2015. 1 changed file with 43 additions and 1 deletion.
    44 changes: 43 additions & 1 deletion Chapter09.scala
    Original file line number Diff line number Diff line change
    @@ -76,4 +76,46 @@ res11: Double = 15.36
    scala> numbers.sum/numbers.size
    res12: Double = 3.84


    /**
    * 5. Write a Scala program that writes the powers of 2 and their reciprocals to a file, with the exponent ranging from 0 to 20. Line up the columns:
      1      1
      2      0.5
      4      0.25
    ...      ...
    */
    scala> val out = new java.io.PrintWriter("out.txt")
    out: java.io.PrintWriter = java.io.PrintWriter@259aec72

    scala> for (i <- 0 to 20) {
    | val pow = scala.math.pow(2, i)
    | out.println(pow + "\t" + 1/pow)
    | }

    scala> out.close

    scala>
    /**
    * $ cat out.txt
    1.0 1.0
    2.0 0.5
    4.0 0.25
    8.0 0.125
    16.0 0.0625
    32.0 0.03125
    64.0 0.015625
    128.0 0.0078125
    256.0 0.00390625
    512.0 0.001953125
    1024.0 9.765625E-4
    2048.0 4.8828125E-4
    4096.0 2.44140625E-4
    8192.0 1.220703125E-4
    16384.0 6.103515625E-5
    32768.0 3.0517578125E-5
    65536.0 1.52587890625E-5
    131072.0 7.62939453125E-6
    262144.0 3.814697265625E-6
    524288.0 1.9073486328125E-6
    1048576.0 9.5367431640625E-7
    */

  3. hhimanshu revised this gist Sep 15, 2015. 1 changed file with 21 additions and 0 deletions.
    21 changes: 21 additions & 0 deletions Chapter09.scala
    Original file line number Diff line number Diff line change
    @@ -55,4 +55,25 @@ scala> Source.fromURL("http://www.gutenberg.org/cache/epub/4809/pg4809.txt", "UT
    res7: Array[String] = Array(redistributing, Volunteers*****, council--Policy, Orange--Corrupt, government--Efforts, reform--Influence, Armenteros--Painful, retire--Secret, Philip--Ominous, persecution--Execution, Antwerp--Horrible, Protestants--Remonstrance, Titelmann--Obduracy, Philip--Council, Trent--Quarrel, envoys--Order, Netherlands--Opposition, measure--Reluctance, Spain--Violent, instructions--Remarkable, Orange--Apoplexy, Viglius--Temporary, Hopper--Departure, Cambray--Character, Archbishop--Egmont, Spain--Flattery, bribery--Council, Doctors--Vehement, --Proceedings, principality--Egmont's, persecution--Indignation, Egmont--Habitual, dissimulation, King--Reproof, Orange--Assembly, Brussels--Result, deliberations, Philip--Universal, Netherlands--New, heretics--Interview, subject-...
    scala>

    /**
    * 4. Write a Scala program that reads a text file containing only floating-point numbers. Print the sum, average, maximum, and minimum of the numbers in the file.
    */
    scala> import scala.io.Source
    import scala.io.Source

    scala> val numbers = Source.fromFile("/Users/harit/Downloads/floating.txt", "UTF-8").getLines.map(_.toDouble).toArray
    numbers: Array[Double] = Array(3.14, 2.34, 1.54, 8.34)

    scala> numbers.min
    res9: Double = 1.54

    scala> numbers.max
    res10: Double = 8.34

    scala> numbers.sum
    res11: Double = 15.36

    scala> numbers.sum/numbers.size
    res12: Double = 3.84


  4. hhimanshu revised this gist Sep 15, 2015. 1 changed file with 11 additions and 0 deletions.
    11 changes: 11 additions & 0 deletions Chapter09.scala
    Original file line number Diff line number Diff line change
    @@ -45,3 +45,14 @@ scala> out.flush

    scala> out.close

    /**
    *“3. Write a Scala code snippet that reads a file and prints all words with more than 12 characters to the console. Extra credit if you can do this in a single line.
    */
    scala> import scala.io.Source
    import scala.io.Source

    scala> Source.fromURL("http://www.gutenberg.org/cache/epub/4809/pg4809.txt", "UTF-8").mkString.split("\\s").filter(_.length > 12)
    res7: Array[String] = Array(redistributing, Volunteers*****, council--Policy, Orange--Corrupt, government--Efforts, reform--Influence, Armenteros--Painful, retire--Secret, Philip--Ominous, persecution--Execution, Antwerp--Horrible, Protestants--Remonstrance, Titelmann--Obduracy, Philip--Council, Trent--Quarrel, envoys--Order, Netherlands--Opposition, measure--Reluctance, Spain--Violent, instructions--Remarkable, Orange--Apoplexy, Viglius--Temporary, Hopper--Departure, Cambray--Character, Archbishop--Egmont, Spain--Flattery, bribery--Council, Doctors--Vehement, --Proceedings, principality--Egmont's, persecution--Indignation, Egmont--Habitual, dissimulation, King--Reproof, Orange--Assembly, Brussels--Result, deliberations, Philip--Universal, Netherlands--New, heretics--Interview, subject-...
    scala>


  5. hhimanshu revised this gist Sep 15, 2015. 1 changed file with 47 additions and 0 deletions.
    47 changes: 47 additions & 0 deletions Chapter09.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    /**
    * 1. Write a Scala code snippet that reverses the lines in a file (making the last line the first one, and so on).
    */
    scala> import scala.io.Source
    import scala.io.Source

    scala> val source = Source.fromURL("http://www.gutenberg.org/cache/epub/4809/pg4809.txt", "UTF-8")
    source: scala.io.BufferedSource = non-empty iterator

    scala> source.getLines.toArray.reverse
    res10: Array[String] = Array(*END THE SMALL PRINT! FOR PUBLIC DOMAIN EBOOKS*Ver.02/11/02*END*, "", express permission.], they hardware or software or any other related product without, used in any sales of Project Gutenberg eBooks or other materials be, Michael S. Hart. Project Gutenberg is a TradeMark and may not be, when distributed free of all fees. Copyright (C) 2001, 2002 by, [Portions of this eBook's header and trailer may be reprinted only, "", hart@pobox.com, software or other items, please contact Michael Hart at:, If you are interested in contributing scanning equipment or, "", "Project Gutenberg Literary Archive Foundation.", Money should be paid to the:, public domain materials, or royalty free copyright licenses., The Project gratefully accepts contributions of money, tim...
    scala>

    /**
    * 2. Write a Scala program that reads a file with tabs, replaces each tab with spaces so that tab stops are at n-column boundaries, and writes the result to the same file.
    */

    // File (with tabs)
    /**
    * $ cat ~/Downloads/fileWithTabs.txt
    a b c
    d e f
    */
    scala> val tabPattern = """\t""".r
    tabPattern: scala.util.matching.Regex = \t

    scala> val source = Source.fromFile("/Users/harit/Downloads/fileWithTabs.txt")
    source: scala.io.BufferedSource = non-empty iterator

    scala> val lines = source.getLines.toArray
    lines: Array[String] = Array(a b c, d e f)

    scala> lines(0)
    res13: String = a b c

    scala> import java.io.PrintWriter
    import java.io.PrintWriter

    scala> val out = new PrintWriter("/Users/harit/Downloads/fileWithTabs.txt")
    out: java.io.PrintWriter = java.io.PrintWriter@106e6dfe

    scala> for(line <- replacedLines) {out.println(line)}

    scala> out.flush

    scala> out.close

  6. hhimanshu revised this gist Aug 28, 2015. 1 changed file with 22 additions and 4 deletions.
    26 changes: 22 additions & 4 deletions Chapter06.scala
    Original file line number Diff line number Diff line change
    @@ -49,15 +49,15 @@ res60: Double = 25.4
    * 4. Define a Point class with a companion object so that you can construct
    * Point instances as Point(3, 4), without using new.
    */
    scala> :paste
    scala> :paste
    // Entering paste mode (ctrl-D to finish)

    object Point {
    def apply(x: Int, y: Int) = new Point(x,y)
    }

    class Point private(x:Int, y: Int) {
    println(s"New Point Created (${x}, ${y}))")
    override def toString = s"New Point Created (${x}, ${y}))"
    }

    // Exiting paste mode, now interpreting.
    @@ -66,6 +66,24 @@ defined object Point
    defined class Point

    scala> Point(3,4)
    New Point Created (3, 4))
    res61: Point = Point@e042502
    res0: Point = New Point Created (3, 4))

    /**
    * 5. Write a Scala application, using the App trait, that prints the command-line arguments
    * in reverse order, separated by spaces. For example, scala Reverse Hello World should print World Hello.”
    */
    // Open a new file called MyApp.scala and paste the following contents
    object MyApp extends App {
    if(args.length < 1) println("Provide enough arguments to print")
    println(args.reverse.mkString(" "))
    }

    $ scalac MyApp.scala

    $ scala MyApp Hello World Scala
    Scala World Hello

    $ scala MyApp
    Provide enough arguments to print

    // Not attempting 6,7,8 (Enumeration)
  7. hhimanshu revised this gist Aug 28, 2015. 1 changed file with 68 additions and 1 deletion.
    69 changes: 68 additions & 1 deletion Chapter06.scala
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,71 @@
    /**
    * 1. Write an object Conversions with methods inchesToCentimeters, gallonsToLiters, and milesToKilometers.
    */

    scala> object Conversions {
    | def inchesToCentimeters(inches: Double): Double = 2.54 * inches
    | def gallonsToLiters(gallons: Double): Double = 3.78541 * gallons
    | def milesToKilometers(miles: Double): Double = 1.61 * miles
    | }
    defined object Conversions

    scala> Conversions.inchesToCentimeters(10)
    res56: Double = 25.4

    scala> Conversions.gallonsToLiters(1)
    res57: Double = 3.78541

    scala> Conversions.milesToKilometers(7)
    res58: Double = 11.270000000000001

    /**
    * 2. The preceding problem wasn’t very object-oriented. Provide a general superclass UnitConversion and define objects InchesToCentimeters,
    * GallonsToLiters, and MilesToKilometers that extend it.
    */
    scala> abstract class UnitConversion {
    | def convert(input: Double): Double
    | }
    defined class UnitConversion

    scala> object InchesToCentimeters extends UnitConversion {
    | def convert(input: Double) = 2.54 * input
    | def apply(input: Double) = convert(input)
    | }
    defined object InchesToCentimeters

    scala> InchesToCentimeters(1)
    res59: Double = 2.54

    scala> InchesToCentimeters(10)
    res60: Double = 25.4

    /**
    * 3. Define an Origin object that extends java.awt.Point.
    * Why is this not actually a good idea? (Have a close look at the methods of the Point class.)
    */
    // Not a good idea since it has setXXX methods and in singleton since everybody shares, anyone can
    // change value causing trouble

    /**
    * 4. Define a Point class with a companion object so that you can construct
    * Point instances as Point(3, 4), without using new.
    */
    scala> :paste
    // Entering paste mode (ctrl-D to finish)

    object Point {
    def apply(x: Int, y: Int) = new Point(x,y)
    }

    class Point private(x:Int, y: Int) {
    println(s"New Point Created (${x}, ${y}))")
    }

    // Exiting paste mode, now interpreting.

    defined object Point
    defined class Point

    scala> Point(3,4)
    New Point Created (3, 4))
    res61: Point = Point@e042502

  8. hhimanshu revised this gist Aug 28, 2015. 1 changed file with 4 additions and 0 deletions.
    4 changes: 4 additions & 0 deletions Chapter06.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,4 @@
    /**
    * 1. Write an object Conversions with methods inchesToCentimeters, gallonsToLiters, and milesToKilometers.
    */

  9. hhimanshu revised this gist Aug 26, 2015. 1 changed file with 26 additions and 0 deletions.
    26 changes: 26 additions & 0 deletions Chapter04.scala
    Original file line number Diff line number Diff line change
    @@ -206,3 +206,29 @@ ftp.nonProxyHosts |local|*.local|169.254/16|*.169.254/16
    sun.cpu.isalist |
    res42: Iterable[Unit] = ArrayBuffer((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ())

    /**
    * 8. Write a function minmax(values: Array[Int]) that returns a pair containing the smallest and largest values in the array.
    */
    scala> def minmax(values: Array[Int]):(Int, Int) = (values.min, values.max)
    minmax: (values: Array[Int])(Int, Int)

    scala> minmax(Array(1, 100, -1, 20))
    res45: (Int, Int) = (-1,100)

    /**
    * 9. Write a function lteqgt(values: Array[Int], v: Int) that returns a triple
    * containing the counts of values less than v, equal to v, and greater than v.
    */
    scala> def lteqgt(values: Array[Int], v: Int): (Int, Int, Int) = (values.count(_ < v), values.count(_ == v), values.count(_ > v))
    lteqgt: (values: Array[Int], v: Int)(Int, Int, Int)

    scala> lteqgt(Array(0,0,1,1,1,2,2), 1)
    res47: (Int, Int, Int) = (2,3,2)

    /**
    * 10. What happens when you zip together two strings, such as "Hello".zip("World")? Come up with a plausible use case.
    */
    scala> "Hello".zip("World")
    res52: scala.collection.immutable.IndexedSeq[(Char, Char)] = Vector((H,W), (e,o), (l,r), (l,l), (o,d))

    // use-case? May be sum 2 arrays
  10. hhimanshu revised this gist Aug 26, 2015. 1 changed file with 85 additions and 2 deletions.
    87 changes: 85 additions & 2 deletions Chapter04.scala
    Original file line number Diff line number Diff line change
    @@ -121,5 +121,88 @@ weekdays: scala.collection.mutable.LinkedHashMap[String,Int] = Map(Monday -> 2,

    scala> weekdays
    res0: scala.collection.mutable.LinkedHashMap[String,Int] = Map(Monday -> 2, Tuesday -> 3, Sunday -> 1, Friday -> 6)



    /**
    * 7. Print a table of all Java properties, like this:
    java.runtime.name             | Java(TM) SE Runtime Environment
    sun.boot.library.path         | /home/apps/jdk1.6.0_21/jre/lib/i386
    java.vm.version               | 17.0-b16
    java.vm.vendor                | Sun Microsystems Inc.
    java.vendor.url               | http://java.sun.com/
    path.separator                | :
    java.vm.name                  | Java HotSpot(TM) Server VM
    You need to find the length of the longest key before you can print the table.
    */
    // https://stackoverflow.com/questions/32217170/how-to-have-width-between-values
    scala> import scala.collection.JavaConversions.propertiesAsScalaMap
    import scala.collection.JavaConversions.propertiesAsScalaMap

    scala> val props: scala.collection.Map[String, String] = System.getProperties()
    props: scala.collection.Map[String,String] =
    Map(env.emacs -> "", java.runtime.name -> Java(TM) SE Runtime Environment, sun.boot.library.path -> /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib, java.vm.version -> 25.51-b03, gopherProxySet -> false, java.vm.vendor -> Oracle Corporation, java.vendor.url -> http://java.oracle.com/, path.separator -> :, java.vm.name -> Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg -> sun.io, user.country -> US, sun.java.launcher -> SUN_STANDARD, sun.os.patch.level -> unknown, java.vm.specification.name -> Java Virtual Machine Specification, user.dir -> /Users/harit, java.runtime.version -> 1.8.0_51-b16, java.awt.graphicsenv -> sun.awt.CGraphicsEnvironment, java.endorsed.dirs -> /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk...

    scala> props.keys.map(_.length).max
    res24: Int = 29

    scala> for ((k,v) <- props) yield println(k.padTo(29, " ").mkString + "|" + v)
    env.emacs |
    java.runtime.name |Java(TM) SE Runtime Environment
    sun.boot.library.path |/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib
    java.vm.version |25.51-b03
    gopherProxySet |false
    java.vm.vendor |Oracle Corporation
    java.vendor.url |http://java.oracle.com/
    path.separator |:
    java.vm.name |Java HotSpot(TM) 64-Bit Server VM
    file.encoding.pkg |sun.io
    user.country |US
    sun.java.launcher |SUN_STANDARD
    sun.os.patch.level |unknown
    java.vm.specification.name |Java Virtual Machine Specification
    user.dir |/Users/harit
    java.runtime.version |1.8.0_51-b16
    java.awt.graphicsenv |sun.awt.CGraphicsEnvironment
    java.endorsed.dirs |/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/endorsed
    os.arch |x86_64
    java.io.tmpdir |/var/folders/39/rrqhhzfn42bf7qcwqg2kywtr0000gn/T/
    line.separator |

    java.vm.specification.vendor |Oracle Corporation
    os.name |Mac OS X
    sun.jnu.encoding |UTF-8
    java.library.path |/Users/harit/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
    java.specification.name |Java Platform API Specification
    java.class.version |52.0
    sun.management.compiler |HotSpot 64-Bit Tiered Compilers
    os.version |10.10.4
    http.nonProxyHosts |local|*.local|169.254/16|*.169.254/16
    user.home |/Users/harit
    user.timezone |America/Los_Angeles
    scala.home |/usr/local/Cellar/scala/2.11.7/libexec
    java.awt.printerjob |sun.lwawt.macosx.CPrinterJob
    file.encoding |UTF-8
    java.specification.version |1.8
    scala.usejavacp |true
    java.class.path |""
    user.name |harit
    java.vm.specification.version|1.8
    sun.java.command |scala.tools.nsc.MainGenericRunner
    java.home |/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre
    sun.arch.data.model |64
    user.language |en
    java.specification.vendor |Oracle Corporation
    awt.toolkit |sun.lwawt.macosx.LWCToolkit
    java.vm.info |mixed mode
    java.version |1.8.0_51
    java.ext.dirs |/Users/harit/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
    sun.boot.class.path |/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/classes:/usr/local/Cellar/scala/2.11.7/libexec/lib/akka-actor_2.11-2.3.10.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/config-1.2.1.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/jline-2.12.1.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-actors-2.11.0.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-actors-migration_2.11-1.1.0.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-compiler.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-continuations-library_2.11-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-continuations-plugin_2.11.7-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-library.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-parser-combinators_2.11-1.0.4.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-reflect.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-swing_2.11-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-xml_2.11-1.0.4.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scalap-2.11.7.jar
    java.vendor |Oracle Corporation
    file.separator |/
    java.vendor.url.bug |http://bugreport.sun.com/bugreport/
    sun.io.unicode.encoding |UnicodeBig
    sun.cpu.endian |little
    socksNonProxyHosts |local|*.local|169.254/16|*.169.254/16
    ftp.nonProxyHosts |local|*.local|169.254/16|*.169.254/16
    sun.cpu.isalist |
    res42: Iterable[Unit] = ArrayBuffer((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ())

  11. hhimanshu revised this gist Aug 26, 2015. 1 changed file with 37 additions and 0 deletions.
    37 changes: 37 additions & 0 deletions Chapter04.scala
    Original file line number Diff line number Diff line change
    @@ -86,3 +86,40 @@ scala> for(word <- words) {
    scala> wordCountSorted
    res2: scala.collection.immutable.SortedMap[String,Int] = Map("'Second -> 1, "1001 -> 1, "A -> 3, "All -> 2, "And -> 1, "Any -> 1, "But -> 1, "Defects," -> 1, "Do -> 1, "Draw -> 1, "Either -> 1, "First -> 5, "For -> 2, "From -> 1, "Here -> 1, "How -> 1, "In -> 2, "Information -> 1, "No -> 1, "Non-Exclusive" -> 1, "Not -> 1, "Open -> 1, "Pardon -> 1, "Pay-As-You-Leave" -> 1, "Plain -> 2, "Project -> 5, "Right -> 1, "Second -> 3, "Sell" -> 1, "Shoot -> 1, "Should -> 1, "Sky." -> 1, "Sneezing -> 1, "Speed-Pictures," -> 1, "Study -> 1, "The -> 10, "There -> 1, "There's -> 1, "Transference -> 1, "We -> 1, "Well, -> 1, "What -> 2, "Where -> 1, "Winter-Sports," -> 1, "Work -> 1, "_'How -> 1, "a -> 1, "arrow-points-to-the-scene-of-the-crime" -> 1, "author" -> 1, "barrels -> 1, "before -> 2, "by ...

    /**
    * 5. Repeat the preceding exercise with a java.util.TreeMap that you adapt to the Scala API.
    */
    scala> import java.util.TreeMap
    import java.util.TreeMap

    scala> var wordCountTreeMap = new TreeMap[String, Int]()
    wordCountTreeMap: java.util.TreeMap[String,Int] = {}

    scala> for(word <- words) {
    | val count = wordCountTreeMap.getOrDefault(word, 0)
    | wordCountTreeMap.put(word, count+1)
    | }

    scala> wordCount
    wordCountSorted wordCountTreeMap

    scala> wordCountTreeMap
    res7: java.util.TreeMap[String,Int] = {"'Second=1, "1001=1, "A=3, "All=2, "And=1, "Any=1, "But=1, "Defects,"=1, "Do=1, "Draw=1, "Either=1, "First=5, "For=2, "From=1, "Here=1, "How=1, "In=2, "Information=1, "No=1, "Non-Exclusive"=1, "Not=1, "Open=1, "Pardon=1, "Pay-As-You-Leave"=1, "Plain=2, "Project=5, "Right=1, "Second=3, "Sell"=1, "Shoot=1, "Should=1, "Sky."=1, "Sneezing=1, "Speed-Pictures,"=1, "Study=1, "The=10, "There=1, "There's=1, "Transference=1, "We=1, "Well,=1, "What=2, "Where=1, "Winter-Sports,"=1, "Work=1, "_'How=1, "a=1, "arrow-points-to-the-scene-of-the-crime"=1, "author"=1, "barrels=1, "before=2, "by=1, "cashed=1, "dead"=1, "deliver=1, "delivers=2, "eaten=1, "either=1, "film-eater."=1, "flivver"=1, "for=1, "fuzzy."=1, "get=1, "he=1, "heart-trouble."=1, "hot=1, "it's=1, "my...

    /**
    * 6. Define a linked hash map that maps "Monday" to java.util.Calendar.MONDAY, and similarly for the other weekdays. Demonstrate that the elements are visited in insertion order.
    */
    scala> import scala.collection.mutable.LinkedHashMap
    import scala.collection.mutable.LinkedHashMap

    scala> import java.util.Calendar._
    import java.util.Calendar._

    scala> val weekdays = LinkedHashMap[String, Int]("Monday" -> MONDAY, "Tuesday" -> TUESDAY, "Sunday" -> SUNDAY, "Friday" -> FRIDAY)
    weekdays: scala.collection.mutable.LinkedHashMap[String,Int] = Map(Monday -> 2, Tuesday -> 3, Sunday -> 1, Friday -> 6)

    scala> weekdays
    res0: scala.collection.mutable.LinkedHashMap[String,Int] = Map(Monday -> 2, Tuesday -> 3, Sunday -> 1, Friday -> 6)


  12. hhimanshu revised this gist Aug 20, 2015. 1 changed file with 88 additions and 0 deletions.
    88 changes: 88 additions & 0 deletions Chapter04.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,88 @@
    /**
    * 1. Set up a map of prices for a number of gizmos that you covet.
    * Then produce a second map with the same keys and the prices at a 10 percent discount.
    */
    scala> val items = Map("Tesla" -> 80000, "iWatch" -> 700)
    items: scala.collection.immutable.Map[String,Int] = Map(Tesla -> 80000, iWatch -> 700)

    scala> for ((item, value) <- items) yield(item, value - (value * 0.1))
    res2: scala.collection.immutable.Map[String,Double] = Map(Tesla -> 72000.0, iWatch -> 630.0)

    /**
    * 2. Write a program that reads words from a file. Use a mutable map to count how often each word appears.
    */
    // source file: https://www.gutenberg.org/cache/epub/35709/pg35709.txt
    scala> val words = scala.io.Source.fromFile("pg35709.txt").mkString.split("\\s+")
    words: Array[String] = Array(The, Project, Gutenberg, EBook, of, Making, Your, Camera, Pay,, by, Frederick, C., Davis,
    This, eBook, is, for, the, use, of, anyone, anywhere, at, no, cost, and, with, almost, no, restrictions, whatsoever.,
    You, may, copy, it,, give, it, away, or, re-use, it, under, the, terms, of, the, Project, Gutenberg, License, included,
    with, this, eBook, or, online, at, www.gutenberg.net, Title:, Making, Your, Camera, Pay, Author:, Frederick, C., Davis,
    Release, Date:, March, 29,, 2011, [EBook, #35709], Language:, English, ***, START, OF, THIS, PROJECT, GUTENBERG, EBOOK,
    MAKING, YOUR, CAMERA, PAY, ***, Produced, by, The, Online, Distributed, Proofreading, Team, at, http://www.pgdp.net,
    (This, file, was, produced, from, images, generously, made, available, by, The, In...

    scala> val wordCount = scala.collection.mutable.HashMap[String, Int]()
    wordCount: scala.collection.mutable.HashMap[String,Int] = Map()

    scala> for (word <- words) {
    | val count = wordCount.getOrElse(word, 0)
    | wordCount(word) = count + 1
    | }

    scala> word
    wordCount words

    scala> wordCount
    res1: scala.collection.mutable.HashMap[String,Int] = Map(arts -> 1, follow -> 3, request, -> 1, Lines. -> 1,
    demand -> 7, 1.E.4. -> 1, PRODUCT -> 2, 470 -> 1, Chicago, -> 3, scenic -> 1, J2 -> 1, untrimmed -> 1,
    photographs--not -> 1, basis. -> 1, "prints -> 1, instances. -> 1, Onion-Planter -> 1, trick -> 1,
    illustrating -> 3, prefer. -> 1, detected -> 1, non-exclusive. -> 1, famous -> 1, Competition -> 2,
    expense -> 1, created -> 2, renamed. -> 1, maggot -> 1, calendar-photographs, -> 1, widely-read -> 1,
    Publisher, -> 1, producers -> 1, Shapes -> 1, ARTICLES -> 2, yearly -> 2, retoucher -> 1, satisfy -> 2,
    agrees: -> 1, Gentleman_, -> 1, intellectual -> 2, hard -> 2, Porch. -> 1, sold.) -> 1, START -> 1, House -> 2,
    welcome -> 1, Dealers' -> 1, ... -> 2, pasted -> 1, _Cosmopolitan_ -...
    /**
    * 3. Repeat the preceding exercise with an immutable map.
    */
    scala> val words = scala.io.Source.fromURL("https://www.gutenberg.org/cache/epub/35709/pg35709.txt").mkString.split("\\s+")
    words: Array[String] = Array(The, Project, Gutenberg, EBook, of, Making, Your, Camera, Pay,, by, Frederick, C.,
    Davis, This, eBook, is, for, the, use, of, anyone, anywhere, at, no, cost, and, with, almost, no, restrictions,
    whatsoever., You, may, copy, it,, give, it, away, or, re-use, it, under, the, terms, of, the, Project, Gutenberg,
    License, included, with, this, eBook, or, online, at, www.gutenberg.net, Title:, Making, Your, Camera, Pay, Author:,
    Frederick, C., Davis, Release, Date:, March, 29,, 2011, [EBook, #35709], Language:, English, ***, START, OF, THIS, PROJECT,
    GUTENBERG, EBOOK, MAKING, YOUR, CAMERA, PAY, ***, Produced, by, The, Online, Distributed, Proofreading, Team, at,
    http://www.pgdp.net, (This, file, was, produced, from, images, generously, made, available, by, The, In...
    scala> var wordCount = Map[String, Int]()
    wordCount: scala.collection.immutable.Map[String,Int] = Map()
    scala> for (word <- words) {
    | val count = wordCount.getOrElse(word, 0)
    | wordCount = wordCount + (word -> (count + 1))
    | }
    scala> wordCount
    res2: scala.collection.immutable.Map[String,Int] = Map("Should -> 1, serious -> 1,
    Farm-buildings -> 1, container, -> 1, comply -> 6, forgotten -> 1, stop, -> 2, Spell -> 1, Washington, -> 6,
    Advertises -> 1, rate -> 2, lights -> 1, submitted -> 1, engraver -> 3, generalize -> 2, Produced -> 2, Furniture: -> 1,
    Redistributing -> 1, non-fictionist, -> 1, Archive/American -> 2, wiser -> 1, "snap-shooters" -> 1, action. -> 3, 6, -> 1,
    supplementary -> 2, botany, -> 1, glean -> 1, locations -> 1, tenth, -> 1, Features -> 1, Advertising -> 1, Lens. -> 1,
    trade, -> 1, SHAPE -> 2, particularly -> 1, bird-dogs, -> 1, used -> 24, Mo., -> 1, eye -> 1, PUNITIVE -> 1, striking -> 2,
    gloss." -> 1, job--as -> 1, picture. -> 1, instance, -> 1, READ -> 1, Sets -> 1, Medical: -> 1, advertising-medium. -...
    scala>
    /**
    * 4. Repeat the preceding exercise with a sorted map, so that the words are printed in sorted order.
    */
    scala> val words = scala.io.Source.fromURL("https://www.gutenberg.org/cache/epub/35709/pg35709.txt").mkString.split("\\s+")
    words: Array[String] = Array(The, Project, Gutenberg, EBook, of, Making, Your, Camera, Pay,, by, Frederick, C., Davis, This, eBook, is, for, the, use, of, anyone, anywhere, at, no, cost, and, with, almost, no, restrictions, whatsoever., You, may, copy, it,, give, it, away, or, re-use, it, under, the, terms, of, the, Project, Gutenberg, License, included, with, this, eBook, or, online, at, www.gutenberg.net, Title:, Making, Your, Camera, Pay, Author:, Frederick, C., Davis, Release, Date:, March, 29,, 2011, [EBook, #35709], Language:, English, ***, START, OF, THIS, PROJECT, GUTENBERG, EBOOK, MAKING, YOUR, CAMERA, PAY, ***, Produced, by, The, Online, Distributed, Proofreading, Team, at, http://www.pgdp.net, (This, file, was, produced, from, images, generously, made, available, by, The, In...
    scala> var wordCountSorted = scala.collection.immutable.SortedMap[String, Int]()
    wordCountSorted: scala.collection.immutable.SortedMap[String,Int] = Map()
    scala> for(word <- words) {
    | val count = wordCountSorted.getOrElse(word, 0)
    | wordCountSorted = wordCountSorted + (word -> (count + 1))
    | }
    scala> wordCountSorted
    res2: scala.collection.immutable.SortedMap[String,Int] = Map("'Second -> 1, "1001 -> 1, "A -> 3, "All -> 2, "And -> 1, "Any -> 1, "But -> 1, "Defects," -> 1, "Do -> 1, "Draw -> 1, "Either -> 1, "First -> 5, "For -> 2, "From -> 1, "Here -> 1, "How -> 1, "In -> 2, "Information -> 1, "No -> 1, "Non-Exclusive" -> 1, "Not -> 1, "Open -> 1, "Pardon -> 1, "Pay-As-You-Leave" -> 1, "Plain -> 2, "Project -> 5, "Right -> 1, "Second -> 3, "Sell" -> 1, "Shoot -> 1, "Should -> 1, "Sky." -> 1, "Sneezing -> 1, "Speed-Pictures," -> 1, "Study -> 1, "The -> 10, "There -> 1, "There's -> 1, "Transference -> 1, "We -> 1, "Well, -> 1, "What -> 2, "Where -> 1, "Winter-Sports," -> 1, "Work -> 1, "_'How -> 1, "a -> 1, "arrow-points-to-the-scene-of-the-crime" -> 1, "author" -> 1, "barrels -> 1, "before -> 2, "by ...
  13. hhimanshu revised this gist Aug 20, 2015. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions Chapter03.scala
    Original file line number Diff line number Diff line change
    @@ -37,6 +37,7 @@ negative: Array[Int] = Array(-1, -10, 0, -12)

    scala> positive ++ negative
    res11: Array[Int] = Array(2, 3, 4, -1, -10, 0, -12)
    // better approach - https://stackoverflow.com/questions/32109281/produce-new-array-where-all-positive-comes-first-then-negative-or-zero-but-in-s

    /**
    * 5. How do you compute the average of an Array[Double]?
  14. hhimanshu revised this gist Aug 20, 2015. 1 changed file with 69 additions and 0 deletions.
    69 changes: 69 additions & 0 deletions Chapter03.scala
    Original file line number Diff line number Diff line change
    @@ -23,3 +23,72 @@ res17: Array[Int] = Array(2, 1, 4, 3, 5)
    scala> (for {b <- a.grouped(2); c <- b.reverse} yield c).toArray
    res16: Array[Int] = Array(2, 1, 4, 3, 5)

    /**
    * 4. Given an array of integers, produce a new array that contains all positive values
    * of the original array, in their original order, followed by all values that are zero or negative,
    * in their original order
    */
    scala> val b = Array(-1, 2,3,4, -10, 0, -12)
    b: Array[Int] = Array(-1, 2, 3, 4, -10, 0, -12)

    scala> val(positive, negative) = b partition(_ > 0)
    positive: Array[Int] = Array(2, 3, 4)
    negative: Array[Int] = Array(-1, -10, 0, -12)

    scala> positive ++ negative
    res11: Array[Int] = Array(2, 3, 4, -1, -10, 0, -12)

    /**
    * 5. How do you compute the average of an Array[Double]?
    */
    scala> val doubleArray = Array(12.3, 12.3)
    doubleArray: Array[Double] = Array(12.3, 12.3)

    scala> doubleArray.sum/doubleArray.length
    res15: Double = 12.3

    /**
    * 6. How do you rearrange the elements of an Array[Int] so that they appear in reverse sorted order?
    * How do you do the same with an ArrayBuffer[Int]?
    */
    scala> val arrayInt = Array(1,2,3,4,5,6,7,8,9)
    arrayInt: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

    scala> arrayInt sortWith(_>_)
    res32: Array[Int] = Array(9, 8, 7, 6, 5, 4, 3, 2, 1)

    scala> import scala.collection.mutable.ArrayBuffer
    import scala.collection.mutable.ArrayBuffer

    scala> val arrayBufferInt = ArrayBuffer(1,3,2,4,5,6,7,9,8)
    arrayBufferInt: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 3, 2, 4, 5, 6, 7, 9, 8)

    scala> arrayBufferInt sortWith(_>_)
    res33: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(9, 8, 7, 6, 5, 4, 3, 2, 1)

    /**
    * 7. Write a code snippet that produces all values from an array with duplicates removed. (Hint: Look at Scaladoc.)
    */
    scala> val arrayWithDups = Array(2,2,4,5,6,6,3,3,1,1,1,1,0)
    arrayWithDups: Array[Int] = Array(2, 2, 4, 5, 6, 6, 3, 3, 1, 1, 1, 1, 0)

    scala> arrayWithDups.distinct
    res35: Array[Int] = Array(2, 4, 5, 6, 3, 1, 0)

    /* Not Attempting 08 */

    /**
    * 9. Make a collection of all time zones returned by java.util.TimeZone.getAvailableIDs that are in America.
    * Strip off the "America/" prefix and sort the result.
    */
    scala> java.util.TimeZone.getAvailableIDs filter(t => t.contains("America/")) map (t => t.split('/') last) sortWith(_ < _)
    warning: there was one feature warning; re-run with -feature for details
    res45: Array[String] = Array(Adak, Anchorage, Anguilla, Antigua, Araguaina, Aruba, Asuncion, Atikokan, Atka, Bahia, Bahia_Banderas,
    Barbados, Belem, Belize, Beulah, Blanc-Sablon, Boa_Vista, Bogota, Boise, Buenos_Aires, Buenos_Aires, Cambridge_Bay, Campo_Grande,
    Cancun, Caracas, Catamarca, Catamarca, Cayenne, Cayman, Center, Chicago, Chihuahua, ComodRivadavia, Coral_Harbour, Cordoba, Cordoba,
    Costa_Rica, Creston, Cuiaba, Curacao, Danmarkshavn, Dawson, Dawson_Creek, Denver, Detroit, Dominica, Edmonton, Eirunepe, El_Salvador,
    Ensenada, Fort_Wayne, Fortaleza, Glace_Bay, Godthab, Goose_Bay, Grand_Turk, Grenada, Guadeloupe, Guatemala, Guayaquil, Guyana, Halifax,
    Havana, Hermosillo, Indianapolis, Indianapolis, Inuvik, Iqaluit, Jamaica, Jujuy, Jujuy, Juneau, Knox, Knox_IN, Kralendijk, La_Paz, L...
    scala>

    /** Not attempting 10 */
  15. hhimanshu revised this gist Aug 19, 2015. 1 changed file with 8 additions and 1 deletion.
    9 changes: 8 additions & 1 deletion Chapter03.scala
    Original file line number Diff line number Diff line change
    @@ -15,4 +15,11 @@ scala> val a = Array(1, 2, 3, 4, 5)
    a: Array[Int] = Array(1, 2, 3, 4, 5)

    scala> a.grouped(2).flatMap(_.reverse).toArray
    res17: Array[Int] = Array(2, 1, 4, 3, 5)
    res17: Array[Int] = Array(2, 1, 4, 3, 5)

    /**
    * 3. Repeat the preceding assignment, but produce a new array with the swapped values. Use for/yield.
    */
    scala> (for {b <- a.grouped(2); c <- b.reverse} yield c).toArray
    res16: Array[Int] = Array(2, 1, 4, 3, 5)

  16. hhimanshu revised this gist Aug 6, 2015. 1 changed file with 18 additions and 0 deletions.
    18 changes: 18 additions & 0 deletions Chapter03.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    /**
    * 1. Write a code snippet that sets a to an array of n random integers between 0 (inclusive) and n (exclusive)
    */
    scala> def randomInRange(n:Int) = for(i <- 0 to n) yield Random.nextInt(n)
    randomInRange: (n: Int)scala.collection.immutable.IndexedSeq[Int]

    scala> randomInRange(100)
    res7: scala.collection.immutable.IndexedSeq[Int] = Vector(68, 47, 1, 20, 35, 93, 53, 24, 75, 46, 23, 61, 98, 62, 60, 38, 82, 69, 10, 82, 96, 30, 14, 50, 20, 42, 44, 11, 31, 18, 70, 13, 25, 77, 85, 89, 55, 45, 16, 44, 13, 50, 71, 58, 86, 16, 7, 79, 60, 31, 79, 52, 56, 86, 31, 85, 32, 84, 14, 54, 79, 56, 7, 68, 62, 87, 77, 4, 47, 28, 36, 23, 88, 19, 28, 41, 47, 3, 92, 88, 29, 22, 52, 8, 14, 76, 83, 45, 42, 45, 36, 77, 50, 12, 89, 28, 70, 97, 35, 70, 32)

    /**
    * 2. Write a loop that swaps adjacent elements of an array of integers. For example, Array(1, 2, 3, 4, 5) becomes Array(2, 1, 4, 3, 5).
    */
    // http://stackoverflow.com/a/10160082/379235
    scala> val a = Array(1, 2, 3, 4, 5)
    a: Array[Int] = Array(1, 2, 3, 4, 5)

    scala> a.grouped(2).flatMap(_.reverse).toArray
    res17: Array[Int] = Array(2, 1, 4, 3, 5)
  17. hhimanshu revised this gist Aug 6, 2015. 1 changed file with 29 additions and 1 deletion.
    30 changes: 29 additions & 1 deletion Chapter02.scala
    Original file line number Diff line number Diff line change
    @@ -124,4 +124,32 @@ scala> prod("")
    res5: Long = 0

    scala> prod("Hello")
    res6: Long = 9415087488
    res6: Long = 9415087488

    /**
    * 10. Write a function that computes xn, where n is an integer. Use the following recursive definition:
    * • xn = y2 if n is even and positive, where y = xn / 2.
    * • xn = x·xn – 1 if n is odd and positive.
    * • x0 = 1.
    * • xn = 1 / x–n if n is negative.
    * Don’t use a return statement.
    */
    scala> def pow(x:Int, n:Int) = n match {
    | case n if n > 0 && (n%2 == 0) => scala.math.pow(x, n/2)
    | case n if n > 0 && (n%2 == 1) => x * scala.math.pow(x, n-1)
    | case 0 => 1
    | case n if n < 0 => 1/scala.math.pow(x, -n)
    | }
    pow: (x: Int, n: Int)Double

    scala> pow(2, 4)
    res0: Double = 4.0

    scala> pow(2, 5)
    res1: Double = 32.0

    scala> pow(2, 0)
    res2: Double = 1.0

    scala> pow(2, -1)
    res3: Double = 0.5
  18. hhimanshu revised this gist Aug 5, 2015. 1 changed file with 31 additions and 0 deletions.
    31 changes: 31 additions & 0 deletions Chapter02.scala
    Original file line number Diff line number Diff line change
    @@ -94,3 +94,34 @@ res19: Long = 9415087488
    /**
    * 7. Solve the preceding exercise without writing a loop. (Hint: Look at the StringOps Scaladoc.)
    */
    scala> "Hello".map(c => c.toLong).product
    res22: Long = 9415087488

    /**
    * 8. Write a function product(s : String) that computes the product, as described in the preceding exercises.
    */
    scala> def product(s:String) = s.map(c => c.toLong).product
    product: (s: String)Long

    scala> product("Hello")
    res23: Long = 9415087488

    /**
    * 9. Make the function of the preceding exercise a recursive function.
    */
    scala> def product(s:String, p:Long):Long = s.isEmpty match {
    | case false => product(s.tail, p * s.head.toLong)
    | case true => p
    | }

    scala> def prod(s:String):Long = s.isEmpty match {
    | case false => product(s, 1)
    | case true => 0
    | }
    prod: (s: String)Long

    scala> prod("")
    res5: Long = 0

    scala> prod("Hello")
    res6: Long = 9415087488
  19. hhimanshu revised this gist Jul 30, 2015. 1 changed file with 82 additions and 1 deletion.
    83 changes: 82 additions & 1 deletion Chapter02.scala
    Original file line number Diff line number Diff line change
    @@ -12,4 +12,85 @@ scala> signum(0)
    res5: Int = 0

    scala> signum(-123)
    res6: Int = -1
    res6: Int = -1

    /**
    * 2. What is the value of an empty block expression {}? What is its type?
    */
    // Value is 'no value' and type is Unit
    scala> val empty = {}
    empty: Unit = ()

    scala> empty

    /**
    * 3. Come up with one situation where the assignment x = y = 1 is valid in Scala.
    * (Hint: Pick a suitable type for x.)
    */
    scala> var x: Any = _
    x: Any = null

    scala> var y: Int = _
    y: Int = 0

    scala> x = y = 1
    x: Any = ()

    scala> x
    res0: Any = ()

    scala> y
    res1: Int = 1

    /**
    * 4. Write a Scala equivalent for the Java loop
    * for (int i = 10; i >= 0; i--) System.out.println(i);
    */
    // Range.by: Create a new range with the start and end values of this range and a new step.
    scala> for(i<- 10 to 0 by -1) println(i)
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0

    /**
    * 5. Write a procedure countdown(n: Int) that prints the numbers from n to 0.
    */
    scala> def countdown(n:Int) = for(i <- n to 0 by -1) println(i)
    countdown: (n: Int)Unit

    scala> countdown(10)
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0

    /**
    * 6. Write a for loop for computing the product of the Unicode codes of all letters in a string.
    * For example, the product of the characters in "Hello" is 9415087488L.
    */
    // IndexedSeq.product: Multiplies up the elements of this collection.
    // returns
    // the product of all elements in this sequence of numbers of type Int.
    // Instead of Int, any other type T with an implicit Numeric[T] implementation can be used as element type of the sequence and as result type of product.
    // Examples of such types are: Long, Float, Double, BigInt.
    scala> (for(i <- "Hello") yield i.toLong).product
    res19: Long = 9415087488

    /**
    * 7. Solve the preceding exercise without writing a loop. (Hint: Look at the StringOps Scaladoc.)
    */
  20. hhimanshu renamed this gist Jul 30, 2015. 1 changed file with 0 additions and 0 deletions.
  21. hhimanshu renamed this gist Jul 30, 2015. 1 changed file with 0 additions and 0 deletions.
  22. hhimanshu renamed this gist Jul 30, 2015. 1 changed file with 0 additions and 0 deletions.
  23. hhimanshu renamed this gist Jul 30, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  24. hhimanshu revised this gist Jul 30, 2015. 2 changed files with 109 additions and 0 deletions.
    94 changes: 94 additions & 0 deletions Chapter01.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    /**
    * 2. In the Scala REPL, compute the square root of 3, and then square that value. By how much does the result differ from 3? (Hint: The res variables are your friend.)
    */
    scala> math.sqrt(3)
    res1: Double = 1.7320508075688772

    scala> res1*res1
    res2: Double = 2.9999999999999996

    scala> 3 - res2
    res3: Double = 4.440892098500626E-16

    // 3. Are the res variables val or var?
    scala> res1 = 3
    <console>:11: error: reassignment to val
    res1 = 3
    ^

    /**
    * 4. Scala lets you multiply a string with a number—try out "crazy" * 3 in the REPL.
    * What does this operation do? Where can you find it in Scaladoc?
    */
    // StringOps.* : Return the current string concatenated n times.
    scala> "crazy "*3
    res6: String = "crazy crazy crazy "

    /**
    * 5. What does 10 max 2 mean? In which class is the max method defined?
    */
    // Int.max: Returns this if this > that or that otherwise.
    scala> 10 max 2
    res7: Int = 10

    scala> 10.max(2)
    res8: Int = 10

    /**
    * 6. Using BigInt, compute 21024.
    */
    scala> BigInt(2) pow 1024
    res13: scala.math.BigInt = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

    /**
    * 7. What do you need to import so that you can get a random prime as probablePrime(100, Random),
    * without any qualifiers before probablePrime and Random?
    */
    scala> import scala.util.Random
    import scala.util.Random

    scala> import scala.math.BigInt
    import scala.math.BigInt

    scala> import scala.math.BigInt.probablePrime
    import scala.math.BigInt.probablePrime

    scala> probablePrime(100, Random)
    res14: scala.math.BigInt = 931669304734992063893063804797

    /**
    * 8. One way to create random file or directory names is to produce a random BigInt
    * and convert it to base 36, yielding a string such as "qsnvbevtomcj38o06kul".
    * Poke around Scaladoc to find a way of doing this in Scala.
    */
    scala> probablePrime(100, Random) toString 36
    res15: String = 2mojnrl2508jtnu26t01

    /**
    * 9. How do you get the first character of a string in Scala? The last character?
    */
    scala> "Hello".head
    res20: Char = H

    scala> "Hello".last
    res21: Char = o

    /**
    * 10. What do the take, drop, takeRight, and dropRight string functions do?
    * What advantage or disadvantage do they have over using substring?
    */
    // StringOps.drop: Selects all elements except first n ones.
    // StringOps.dropRight: Selects all elements except last n ones.
    // StringOps.take: Selects first n elements.
    // StringOps.takeRight: Selects last n elements.
    scala> "Hello World!" take 6
    res22: String = "Hello "

    scala> "Hello World!" drop 6
    res23: String = World!

    scala> "Hello World!" takeRight 6
    res24: String = World!

    scala> "Hello World!" dropRight 6
    res25: String = "Hello "
    15 changes: 15 additions & 0 deletions Chapter02.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,15 @@
    /**
    * 1. The signum of a number is 1 if the number is positive, –1 if it is negative, and 0 if it is zero.
    * Write a function that computes this value.
    */
    scala> def signum(num:Int) = if (num > 0) 1 else if (num < 0) -1 else 0
    signum: (num: Int)Int

    scala> signum(10)
    res4: Int = 1

    scala> signum(0)
    res5: Int = 0

    scala> signum(-123)
    res6: Int = -1
  25. hhimanshu created this gist Jul 30, 2015.
    1 change: 1 addition & 0 deletions ScalaForTheImpatient.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    This gist will contain all the exercises from the book