wsheets/wsh01.tex
author Christian Urban <christian.urban@kcl.ac.uk>
Wed, 01 Nov 2023 15:01:32 +0000
changeset 468 c71ae4477e55
parent 441 5266495f4aad
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
197
Christian Urban <urbanc@in.tum.de>
parents: 195
diff changeset
     1
% !TEX program = xelatex
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     2
\documentclass{article}
423
554278cd4b70 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 400
diff changeset
     3
\usepackage{../styles/style}
554278cd4b70 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 400
diff changeset
     4
\usepackage{../styles/langs}
272
a091de62e3f8 updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
     5
\usepackage{tikz}
a091de62e3f8 updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
     6
\usepackage{pgf}
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     7
\usepackage{marvosym}
184
19b1e01054f6 updated
pdated
parents: 183
diff changeset
     8
\usepackage{boxedminipage}
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     9
352
644aca68e203 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 343
diff changeset
    10
\lstset{escapeinside={/*!}{!*/}}
644aca68e203 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 343
diff changeset
    11
\newcommand{\annotation}[1]{\hfill\footnotesize{}#1}
272
a091de62e3f8 updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
    12
352
644aca68e203 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 343
diff changeset
    13
\usepackage{menukeys}
335
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    14
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    15
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    16
% Exact colors from NB
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    17
\usepackage[breakable]{tcolorbox}
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    18
\definecolor{incolor}{HTML}{303F9F}
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    19
\definecolor{outcolor}{HTML}{D84315}
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    20
\definecolor{cellborder}{HTML}{CFCFCF}
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    21
\definecolor{cellbackground}{HTML}{F7F7F7}
334
305e1dcdb3bc updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 333
diff changeset
    22
335
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    23
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
    24
    
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    25
\begin{document}
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    26
\fnote{\copyright{} Christian Urban, King's College London, 2022}
195
4bacbe753e66 updated
Christian Urban <urbanc@in.tum.de>
parents: 193
diff changeset
    27
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    28
\section*{Scala Worksheet 1}
188
e075b5015e89 updated
Christian Urban <urbanc@in.tum.de>
parents: 187
diff changeset
    29
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    30
Please install Scala on your work-machine: You should have
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    31
Scala up and running after this week, and also have an IDE that allows you to
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    32
access the Scala REPL. Some installation instructions are given at
170
3d760b06befa updated
Christian Urban <urbanc@in.tum.de>
parents: 152
diff changeset
    33
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    34
\begin{center}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    35
\url{https://www.scala-lang.org/download/2.13.10.html}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    36
\end{center}  
395
e0a82c9f1d21 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 352
diff changeset
    37
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    38
\subsubsection*{MacOSX}
195
4bacbe753e66 updated
Christian Urban <urbanc@in.tum.de>
parents: 193
diff changeset
    39
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    40
\begin{itemize}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    41
\item[0)] (if needed) \texttt{brew install java} \;\;or\;\; \texttt{brew reinstall java}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    42
\item[1)] \texttt{brew install scala@2.13}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    43
\end{itemize}
181
5b889c263b6b updated
Christian Urban <urbanc@in.tum.de>
parents: 180
diff changeset
    44
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    45
\noindent Another method to install Scala on MacOSX
181
5b889c263b6b updated
Christian Urban <urbanc@in.tum.de>
parents: 180
diff changeset
    46
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    47
\begin{itemize} 
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    48
\item[1)] \texttt{curl -s "https://get.sdkman.io" | bash}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    49
\item[2)] \texttt{sdk install scala 2.13.10}  
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    50
\end{itemize}
438
a02e9efd7bc9 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 423
diff changeset
    51
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    52
\subsubsection*{Windows / Linux Ubuntu}
438
a02e9efd7bc9 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 423
diff changeset
    53
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    54
\begin{itemize}
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    55
\item[0)] (if needed) \texttt{sudo apt-get remove scala-library scala}
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    56
\item[1)] {\fontsize{8.5}{8.5}\selectfont\texttt{sudo wget https://downloads.lightbend.com/scala/2.13.10/scala-2.13.10.deb}}
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    57
\item[2)] \texttt{sudo dpkg -i scala-2.13.10.deb}  
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    58
\end{itemize}
170
3d760b06befa updated
Christian Urban <urbanc@in.tum.de>
parents: 152
diff changeset
    59
3d760b06befa updated
Christian Urban <urbanc@in.tum.de>
parents: 152
diff changeset
    60
\noindent
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    61
Other Linux distros: \texttt{sudo apt-get scala}\bigskip
182
6a4d55584f1f updated
Christian Urban <urbanc@in.tum.de>
parents: 181
diff changeset
    62
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    63
\noindent In the end you should have something running like in your terminal/shell:
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    64
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    65
\begin{lstlisting}[language={},numbers=none,basicstyle=\ttfamily\small]
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    66
$ scala
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    67
Welcome to Scala 2.13.10 (OpenJDK 64-Bit Server VM, Java 17.0.1).
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    68
Type in expressions for evaluation. Or try :help.
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    69
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    70
scala>
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    71
\end{lstlisting}%$
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    72
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    73
\noindent
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    74
If you want to use VS Code or Codium, you might want to also look into setting up
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    75
a key-shortcut for ``Run‐Selected‐Text‐In‐Active‐Terminal'' and also set up
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    76
syntax highlighting. Have a look at the Scala handout uploaded to KEATS for information.\bigskip
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    77
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    78
\noindent
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    79
Make sure you have checked out the template files for the Scala CWs and registered the
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    80
Github repository on KEATS. See whether you receive a test report when pushing some code.
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    81
\newpage
181
5b889c263b6b updated
Christian Urban <urbanc@in.tum.de>
parents: 180
diff changeset
    82
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    83
\subsection*{Task 1}
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    84
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    85
`Play' with the Scala REPL and try out the following queries. Observe
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    86
what Scala responds. Does it make sense?
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    87
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    88
\begin{lstlisting}[numbers=none]
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    89
scala> 2 + 2
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    90
scala> 1 / 2
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    91
scala> 1.0 / 2
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    92
scala> 1 / 2.0
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    93
scala> 1 / 0
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    94
scala> 1.0 / 0.0
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    95
scala> true == false
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    96
scala> true && false
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    97
scala> 1 > 1.0
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    98
scala> "12345".length
181
5b889c263b6b updated
Christian Urban <urbanc@in.tum.de>
parents: 180
diff changeset
    99
scala> List(1,2,1).size
5b889c263b6b updated
Christian Urban <urbanc@in.tum.de>
parents: 180
diff changeset
   100
scala> Set(1,2,1).size
265
2692329287bb updated
Christian Urban <urbanc@in.tum.de>
parents: 264
diff changeset
   101
scala> List(1) == List(1)
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   102
scala> Set(1,2,3) == Set(3,2,1)
265
2692329287bb updated
Christian Urban <urbanc@in.tum.de>
parents: 264
diff changeset
   103
scala> Array(1) == Array(1)
2692329287bb updated
Christian Urban <urbanc@in.tum.de>
parents: 264
diff changeset
   104
scala> Array(1).sameElements(Array(1))
335
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
   105
\end{lstlisting}
9476aee44eed updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 334
diff changeset
   106
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   107
\subsection*{Task 2 (Vals)}
272
a091de62e3f8 updated
Christian Urban <urbanc@in.tum.de>
parents: 271
diff changeset
   108
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   109
Type in the value declarations below and observe Scala's responses. Explain what
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   110
is printed as the value for \texttt{x} in the last line. Is \texttt{z} re-assigned
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   111
in the 4th line?
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   112
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   113
\begin{lstlisting}[numbers=none]
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   114
scala> val z = 42
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   115
scala> z = z + 1
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   116
scala> val x = 2 * z
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   117
scala> val z = 466
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   118
scala> println(x)
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   119
\end{lstlisting}
271
5c7279e09b15 updated
Christian Urban <urbanc@in.tum.de>
parents: 270
diff changeset
   120
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   121
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   122
\subsection*{Task 3 (Strings)}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   123
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   124
Get familiar with constructing strings and printing strings
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   125
(i.e.~\texttt{println}, \texttt{mkString}, \texttt{toString}, \ldots)
301
aa0e86419773 updated
Christian Urban <urbanc@in.tum.de>
parents: 278
diff changeset
   126
aa0e86419773 updated
Christian Urban <urbanc@in.tum.de>
parents: 278
diff changeset
   127
\begin{lstlisting}[numbers=none]
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   128
scala> println("Hello " ++ "World")
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   129
scala> List(1,2,3,4).mkString("\n")
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   130
scala> List(1,2,3,4).mkString("(", "|", ")")
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   131
\end{lstlisting}
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   132
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   133
\subsection*{Task 4 (Functions)}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   134
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   135
Write a function \texttt{miles2meters} taking an integer as argument
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   136
and generating an integer. You can assume that one mile is 1609 meters.
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   137
Remember that functions in Scala do not use the \texttt{return}-keyword.
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   138
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   139
\subsection*{Task 5 (If-Conditions)}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   140
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   141
Make sure you understand if-conditions in Scala: They are
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   142
\emph{expressions}, meaning they need to calculate a result. For
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   143
example an \texttt{if} without an else-branch is nearly always
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   144
\emph{not} what you intend to write (because you are not meant to
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   145
change any ``state'' outside the expression). Also, remember the quirks
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   146
in Scala with if-conditions needing parentheses and there is no
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   147
\texttt{then}-keyword.
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   148
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
   149
\begin{lstlisting}[numbers=none]
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   150
scala> val s1 = "foo"
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   151
scala> val s2 = "bar"
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   152
scala  val s3 = "foobar"
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   153
scala> if (s1 == s2) print("equal") else print("unequal")
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   154
scala> if (s1 ++ s2 == s3) print("equal") else print("unequal")
343
51e25cc30483 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 335
diff changeset
   155
\end{lstlisting}
51e25cc30483 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 335
diff changeset
   156
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   157
\subsection*{Task 6 (For-Comprehensions, Harder)}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   158
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   159
Write \texttt{for}-comprehensions that enumerate all triples containing the numbers 1 - 5. That is,
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   160
print the list
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   161
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   162
\[
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   163
\texttt{(1,1,1)}, \texttt{(2,1,1)}, \texttt{(3,1,1)} \;\ldots\; \texttt{(5,5,5)}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   164
\]
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   165
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   166
\noindent
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   167
Modify the \texttt{for}-comprehensions such that only triples are
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   168
printed where the sum is divisible by 3.  Then sort the list according
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   169
to the middle element (for this use \texttt{sortBy}).
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   170
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   171
\subsection*{Task 7 (Recursion, Advanced /Hard)}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   172
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   173
Write a pretty print function for lists of integers which
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   174
``condenses'' elements in the list, meaning if there is a number
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   175
several times in a row, then print out \mbox{\texttt{n x e}}, where
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   176
\texttt{n} is the number of repetitions and \texttt{e} is the
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   177
number. For example
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   178
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   179
\begin{lstlisting}[numbers=none]
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   180
  List(1,1,1,2,3,3)    =>   List(3 x 1, 2, 2 x 3)
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   181
  List(1,2,3,4,4,4)    =>   List(1, 2, 3, 3 x 4)
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   182
  List(1,1,1,1,1,1)    =>   List(6 x 1)
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   183
  List(1,1,1,2,1,1)    =>   List(3 x 1, 2, 2 x 1)
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   184
\end{lstlisting}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   185
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   186
You might like to define a separate function that first counts the occurences
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   187
for each element and returns a list of (Int, Int)-pairs .
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   188
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   189
\end{document}
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   190
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   191
%%% Local Variables: 
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   192
%%% mode: latex
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   193
%%% TeX-master: t
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   194
%%% End: