wsheets/wsh02.tex
author Christian Urban <christian.urban@kcl.ac.uk>
Thu, 17 Nov 2022 11:34:50 +0000
changeset 442 94117c4f8b67
parent 441 wsheets/wsh01.tex@5266495f4aad
child 444 e6df3c7ff132
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
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    28
\section*{Scala Worksheet 2}
271
5c7279e09b15 updated
Christian Urban <urbanc@in.tum.de>
parents: 270
diff changeset
    29
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    30
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    31
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    32
\subsection*{Task 1 (Options)}
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    33
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    34
Get familiar with constructing strings and printing strings
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    35
(i.e.~\texttt{println}, \texttt{mkString}, \texttt{toString}, \ldots)
301
aa0e86419773 updated
Christian Urban <urbanc@in.tum.de>
parents: 278
diff changeset
    36
aa0e86419773 updated
Christian Urban <urbanc@in.tum.de>
parents: 278
diff changeset
    37
\begin{lstlisting}[numbers=none]
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    38
scala> List(7,2,3,4,5,6).find(_ < 4)
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    39
scala> List(5,6,7,8,9).find(_ < 4)
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    40
scala> 
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    41
\end{lstlisting}
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    42
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    43
\subsection*{Task 2 (URLs / Files)}
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    44
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    45
ALso Try
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    46
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    47
\begin{lstlisting}[numbers=none]
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    48
scala> 
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    49
scala> 
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    50
scala> 
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    51
\end{lstlisting}
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    52
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    53
\subsection*{Task 3 (Higher-Order Functions)}
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    54
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    55
Make sure you understand if-conditions in Scala: They are
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    56
\emph{expressions}, meaning they need to calculate a result. For
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    57
example an \texttt{if} without an else-branch is nearly always
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    58
\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
    59
change any ``state'' outside the expression). Also, remember the quirks
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    60
in Scala with if-conditions needing parentheses and there is no
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    61
\texttt{then}-keyword.
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    62
439
e27ff222fef3 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 438
diff changeset
    63
\begin{lstlisting}[numbers=none]
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    64
scala> val s1 = "foo"
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    65
scala> val s2 = "bar"
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    66
scala  val s3 = "foobar"
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    67
scala> if (s1 == s2) print("equal") else print("unequal")
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    68
scala> if (s1 ++ s2 == s3) print("equal") else print("unequal")
343
51e25cc30483 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 335
diff changeset
    69
\end{lstlisting}
51e25cc30483 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 335
diff changeset
    70
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    71
\subsection*{Task 4 (Maps)}
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    72
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    73
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
    74
print the list
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    75
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    76
\[
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    77
\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
    78
\]
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    79
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    80
\noindent
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    81
Modify the \texttt{for}-comprehensions such that only triples are
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    82
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
    83
to the middle element (for this use \texttt{sortBy}).
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    84
442
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    85
\subsection*{Task 5 (Pattern-Matching)}
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    86
94117c4f8b67 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 441
diff changeset
    87
\subsection*{Task 6 (Web-Crawler)}
441
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    88
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    89
Write a pretty print function for lists of integers which
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    90
``condenses'' elements in the list, meaning if there is a number
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    91
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
    92
\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
    93
number. For example
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    94
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    95
\begin{lstlisting}[numbers=none]
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    96
  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
    97
  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
    98
  List(1,1,1,1,1,1)    =>   List(6 x 1)
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
    99
  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
   100
\end{lstlisting}
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   101
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   102
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
   103
for each element and returns a list of (Int, Int)-pairs .
5266495f4aad updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 439
diff changeset
   104
123
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   105
\end{document}
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   106
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   107
%%% Local Variables: 
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   108
%%% mode: latex
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   109
%%% TeX-master: t
006f71e905a1 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
   110
%%% End: