
diff -r 9e7897f25e13 -r e52cc402caee slides/slides04.tex
--- a/slides/slides04.tex	Thu Nov 29 17:15:11 2018 +0000
+++ b/slides/slides04.tex	Fri Nov 30 03:44:27 2018 +0000
@@ -4,6 +4,7 @@
 \usepackage{../langs}
 %%\usepackage{../data}
 \usepackage[export]{adjustbox}
+\usetikzlibrary{shapes}
 
 \hfuzz=220pt 
 
@@ -16,10 +17,26 @@
         numbers=none,
         xleftmargin=0mm}
 
+\newcommand{\LEFTarrow}[3]{%
+\begin{textblock}{0}(#2,#3)%
+\onslide<#1>{%
+\begin{tikzpicture}%
+\node at (0,0) [single arrow, shape border rotate=180, fill=red,text=red]{a};%
+\end{tikzpicture}}%
+\end{textblock}}
+\newcommand{\DOWNarrow}[3]{%
+\begin{textblock}{0}(#2,#3)%
+\onslide<#1>{%
+\begin{tikzpicture}%
+\node at (0,0) [single arrow, shape border rotate=270, fill=red,text=red]{a};%
+\end{tikzpicture}}%
+\end{textblock}}
+
+
 \newcommand{\bl}[1]{\textcolor{blue}{#1}}     
 
 % beamer stuff 
-\renewcommand{\slidecaption}{PEP (Scala) 03, King's College London}
+\renewcommand{\slidecaption}{PEP (Scala) 04, King's College London}
 
 \begin{filecontents}{re3a.data}
 1 0.00003
@@ -54,6 +71,20 @@
 28 26.69
 \end{filecontents}
 
+\begin{filecontents}{re-js.data}
+5   0.061
+10  0.061
+15  0.061
+20  0.070
+23  0.131
+25  0.308
+26  0.564
+28  1.994
+30  7.648
+31  15.881 
+32  32.190
+\end{filecontents}
+
 \begin{filecontents}{re-java.data}
 5  0.00298
 10  0.00418
@@ -73,23 +104,50 @@
 28  29.81185
 \end{filecontents}
 
+\begin{filecontents}{re-java9.data}
+1000  0.01410
+2000  0.04882
+3000  0.10609
+4000  0.17456
+5000  0.27530
+6000  0.41116
+7000  0.53741
+8000  0.70261
+9000  0.93981
+10000 0.97419
+11000 1.28697
+12000 1.51387
+14000 2.07079
+16000 2.69846
+20000 4.41823
+24000 6.46077
+26000 7.64373
+30000 9.99446
+34000 12.966885
+38000 16.281621
+42000 19.180228
+46000 21.984721
+50000 26.950203
+60000 43.0327746
+\end{filecontents}
+
+
 \begin{document}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[t]
 \frametitle{%
   \begin{tabular}{@ {}c@ {}}
   \\[5mm]
-  \huge PEP Scala (3) 
+  \huge PEP Scala (4) 
   \end{tabular}}
 
   \normalsize
   \begin{center}
   \begin{tabular}{ll}
     Email:  & christian.urban at kcl.ac.uk\\
-    Office: & N7.07 (North Wing, Bush House)\\
+    Office: & N\liningnums{7.07} (North Wing, Bush House)\\
     Slides \& Code: & KEATS\medskip\\
-    Scala Office & \\
-    Hours: &  Thursdays 11 -- 13\\
+    Office Hours: &  Mondays 12:00 -- 14:00\\
   \end{tabular}
   \end{center}
 
@@ -97,85 +155,209 @@
 \end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
+
+\begin{frame}[c]
+\frametitle{Somewhere Remote}
+
+\begin{center}
+\includegraphics[scale=0.37]{../pics/sahara.jpg}
+\end{center}
+
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
+
+\begin{frame}[t]
+\frametitle{This is a bit harsh\ldots}
+
+\mbox{}\\[-22mm]\mbox{}
+
+\begin{center}
+\begin{bubble}[10.5cm]
+  ...trying a new method because the fucking github reports dont tell me
+  which test failed. It's not really helpful when the inline tests work
+  and it compiles but all i get is 'one test failed'... really helpful my dude.
+\end{bubble}
+\end{center}
+
+\begin{center}
+\begin{bubble}[10.5cm]
+  ...Reverted back and finished part 5, this is ridiculous how one test works
+  and all I get is 'ONE TEST FAILED'. Fix your reports before giving us
+  assignments like this...
+\end{bubble}
+\end{center}
+
+
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
+
+\begin{frame}[t,fragile]
+\frametitle{Needless to say I tried it out}
+
+\mbox{}\\[-7mm]\mbox{}\footnotesize
+
+\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-4mm]
+> legal_moves(8, Nil, (2,2))
+ = List((3,4), (4,3), (4,1), (3,0), (1,0), (0,1), (0,3), (1,4))
+
+> legal_moves(8, Nil, (7,7))
+ = List((6,5), (5,6))
+
+> legal_moves(8, List((4,1), (1,0)), (2,2))
+ = List((3,4), (4,3), (3,0), (0,1), (0,3), (1,4))
+
+> legal_moves(1, Nil, (0,0))
+ = List((-1,-2), (-2,-1))
+
+> legal_moves(2, Nil, (0,0))
+ = List((1,-2), (-1,-2), (-2,-1), (-2,1))
+
+> legal_moves(3, Nil, (0,0))
+ = List((1,2), (2,1), (2,-1), (1,-2), (-1,-2), (-2,-1), (-2,1), (-1,2))
+\end{lstlisting}  
+
+\LEFTarrow{1}{9}{9}
+\LEFTarrow{1}{12}{11}
+\DOWNarrow{1}{10}{13}
+
+\end{frame}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[c,fragile]
-
-\begin{textblock}{6}(0.5,0.5)
-\begin{bubble}[11.5cm]
-\footnotesize
-\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]
-import java.util.concurrent._
-import java.util.concurrent.atomic._
+\small
+  
+\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-7mm]
+def is_legal(dim: Int, p: Path, x: Pos): Boolean = {
+  if (......some_really_long_condition.....) false
+  else true
+}
+\end{lstlisting}
 
-  def collatz(input:Int){
-          CollatzConjecture(input);
-          println(count.get());
-      }
-      def collatz_max(input:Int){
-          val List = new Array[Int](input)
-            for (i <- 0 to input-1){
-                CollaĵConjecture(i);
-                List(i)=count.get();
-                count.set(0);
-            }
-            val max = new AtomicInteger();
-            max.set(List(0));
-            val index = new AtomicInteger();
-            index.set(1);
- 
-\end{lstlisting}
-\end{bubble}
-\end{textblock}
+\pause
+\bigskip
+\rule{11cm}{0.3mm}
+\bigskip
+
+\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-7mm]
+def is_legal(dim: Int, p: Path, x: Pos): Boolean = 
+  ......some_really_long_condition.....
+\end{lstlisting}\pause
+
 
 \end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c,fragile]
+\begin{frame}[c]
+\frametitle{DFAs}  
+
+\begin{center}
+\begin{tikzpicture}[>=stealth',very thick,auto,
+  every state/.style={minimum size=0pt,inner sep=2pt,
+    draw=blue!50,very thick,fill=blue!20},]
+  
+\only<1,3->{\node[state,initial] (Q_0)  {$\mbox{Q}_0$};}
+\only<2>{\node[state,initial,fill=red] (Q_0)  {$\mbox{Q}_0$};}  
+\only<1,2,4->{\node[state] (Q_1) [right=of Q_0] {$\mbox{Q}_1$};}
+\only<3>{\node[state,fill=red] (Q_1) [right=of Q_0] {$\mbox{Q}_1$};}
+\only<-3,5->{\node[state] (Q_2) [below right=of Q_0] {$\mbox{Q}_2$};}
+\only<4>{\node[state,fill=red] (Q_2) [below right=of Q_0] {$\mbox{Q}_2$};}
+\only<-4,6->{\node[state] (Q_3) [right=of Q_2] {$\mbox{Q}_3$};}
+\only<5>{\node[state,fill=red] (Q_3) [right=of Q_2] {$\mbox{Q}_3$};}
+\only<-5>{\node[state, accepting] (Q_4) [right=of Q_1] {$\mbox{Q}_4$};}
+\only<6->{\node[state, accepting,fill=red] (Q_4) [right=of Q_1] {$\mbox{Q}_4$};}
+
+\path[->] (Q_0) edge node [above]  {\alert{$a$}} (Q_1);
+\path[->] (Q_1) edge node [above]  {\alert{$a$}} (Q_4);
+\path[->] (Q_4) edge [loop right] node  {\alert{$a, b$}} ();
+\path[->] (Q_3) edge node [right]  {\alert{$a$}} (Q_4);
+\path[->] (Q_2) edge node [above]  {\alert{$a$}} (Q_3);
+\path[->] (Q_1) edge node [right]  {\alert{$b$}} (Q_2);
+\path[->] (Q_0) edge node [above]  {\alert{$b$}} (Q_2);
+\path[->] (Q_2) edge [loop left] node  {\alert{$b$}} ();
+\path[->] (Q_3) edge [bend left=95, looseness=1.3] node [below]  {\alert{$b$}} (Q_0);
+\end{tikzpicture}
+\end{center}
 
-\begin{textblock}{6}(0.5,0.5)
-\begin{bubble}[11.5cm]
-\footnotesize
-\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]
-             for(i<-0 to input-1){
-                val temp :Int=max.get();
-                if (temp < List(i)){
-                    max.set(List(i));
-                    index.set(i);
-                }
-            }
-            println("("+max.get() +","+ index.get()+ ")");
-      }
+\begin{textblock}{9}(4,12)
+\LARGE{}
+\only<3->{\boldmath\alert{$a$}}%
+\only<4->{\boldmath\alert{$b$}}%
+\only<5->{\boldmath\alert{$a$}}%
+\only<6->{\boldmath\alert{$a$}}%
+\only<7->{\boldmath\alert{$a\quad\Rightarrow \textbf{yes}$}}% 
+\end{textblock}
+  
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t]
+\frametitle{DFAs}
 
-      def CollatzConjecture(n: Long): Long = {
-        count.incrementAndGet();
-        if (n <= 1)
-            1
-        else if (n\%2 ==0)
-            CollatzConjecture(n/2);
-            else
-               CollatzConjecture((3*n)+1);
-   }
- }
-\end{lstlisting}
-\end{bubble}
-\end{textblock}
+A \alert{\bf deterministic finite automaton}, DFA, consists of
+5 things:
+
+\begin{itemize}
+\item an alphabet \bl{$\varSigma$}  
+\item a set of states \bl{$\mbox{Qs}$}
+\item one of these states is the start state \bl{$\mbox{Q}_0$}
+\item some states are accepting states \bl{$F$}, and
+\item there is transition function \bl{$\delta$}\bigskip 
+
+\small
+which takes a state  and a character as arguments and produces a 
+new state; this function might not be everywhere defined 
+\end{itemize}
+
+\begin{center}
+\bl{$A(\varSigma, \mbox{Qs}, \mbox{Q}_0, F, \delta)$}
+\end{center}
 
 \end{frame}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+\frametitle{NFAs}  
 
+\begin{center}
+\begin{tikzpicture}[>=stealth',very thick, auto,
+    every state/.style={minimum size=0pt,inner sep=3pt,
+      draw=blue!50,very thick,fill=blue!20},scale=2]
+\node[state,initial]  (Q_0)  {$\mbox{Q}_0$};
+\node[state] (Q_1) [right=of Q_0] {$\mbox{Q}_1$};
+\node[state, accepting] (Q_2) [right=of Q_1] {$\mbox{Q}_2$};
+\path[->] (Q_0) edge [loop above] node  {\alert{$b$}} ();
+\path[<-] (Q_0) edge node [below]  {\alert{$b$}} (Q_1);
+\path[->] (Q_0) edge [bend left] node [above]  {\alert{$a$}} (Q_1);
+\path[->] (Q_0) edge [bend right=45,looseness=1.3] node [below]  {\alert{$a$}} (Q_2);
+\path[->] (Q_1) edge [loop above] node  {\alert{$a,b$}} ();
+\path[->] (Q_1) edge node  [above] {\alert{$a$}} (Q_2);
+\end{tikzpicture}
+\end{center}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[c]
-  \frametitle{CW3 (1 Part): Regexes}
+  \frametitle{CW\liningnums{9} (\liningnums{1} Part): Regexes}
   
 \begin{center}
   Graphs: $(a^*)^* b$ and strings $\underbrace{\;a\ldots a\;}_{n}$\bigskip
   
 \begin{tabular}[t]{@{\hspace{-8mm}}c@{\hspace{-4mm}}c@{}}
-\raisebox{6mm}{\begin{tikzpicture}
+\only<1>{\raisebox{6mm}{\begin{tikzpicture}
 \begin{axis}[
     xlabel={$n$},
     x label style={at={(1.05,0.0)}},
@@ -189,15 +371,36 @@
     axis lines=left,
     width=5.5cm,
     height=5cm, 
-    legend entries={Python,  Java 8},  
+    legend entries={\small{}Python,  \small{}Java 8,  \small{}JavaScript},  
     legend pos=north west,
     legend cell align=left]
 \addplot[blue,mark=*, mark options={fill=white}] table {re-python2.data};  
 \addplot[cyan,mark=*, mark options={fill=white}] table {re-java.data};
+\addplot[red,mark=*, mark options={fill=white}] table {re-js.data};
 \end{axis}
-\end{tikzpicture}}
+\end{tikzpicture}}}%
+\only<2>{\raisebox{0mm}{\begin{tikzpicture}
+\begin{axis}[
+    xlabel={$n$},
+    x label style={at={(1.05,0.0)}},
+    ylabel={time in secs},
+    %y label style={at={(0.06,0.5)}},
+    enlargelimits=false,
+    %xtick={0,30000,...,60000},
+    xmax=65000,
+    ymax=35,
+    ytick={0,5,...,30},
+    scaled ticks=true,
+    axis lines=left,
+    width=5.5cm,
+    height=5cm, 
+    legend entries={\small{}Java 9},  
+    legend pos=north west]
+\addplot[cyan,mark=*, mark options={fill=white}] table {re-java9.data};
+\end{axis}
+\end{tikzpicture}}}
   &
-\onslide<2>{\begin{tikzpicture}
+\onslide<1-2>{\begin{tikzpicture}
   \begin{axis}[
     xlabel={$n$},
     x label style={at={(1.05,0.0)}},
@@ -210,7 +413,7 @@
     width=5.5cm, 
     height=5cm]
 %%\addplot[green,mark=square*,mark options={fill=white}] table {re2a.data};    
-\addplot[red,mark=square*,mark options={fill=white}] table {re3a.data};
+\addplot[magenta,mark=square*,mark options={fill=white}] table {re3a.data};
 \end{axis}
 \end{tikzpicture}}
 \end{tabular}
@@ -221,16 +424,12 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
 
 \begin{frame}[c]
-\frametitle{Where to go on from here?}
+\frametitle{Hint}
 
-\begin{itemize}
-\item Martin Odersky (EPFL)\ldots he is currently throwing out everything
-  and starts again with the dotty compiler for Scala\medskip
+\begin{center}
+\LARGE\textbf{\alert{Pattern-Matching}}
+\end{center}
 
-\item Elm (\url{http://elm-lang.org})\ldots web applications with style\medskip   
-
-\item Haskell, Ocaml, Standard ML, Scheme, \ldots 
-\end{itemize}  
 \end{frame}
 
 
@@ -240,81 +439,9 @@
 \begin{frame}[c,fragile]
 \frametitle{\alert{Questions?}}
 
-{\tiny
-\begin{verbatim}
-                               *
-                              * *
-                             *   *
-                            * * * *
-                           *       *
-                          * *     * *
-                         *   *   *   *
-                        * * * * * * * *
-                       *               *
-                      * *             * *
-                     *   *           *   *
-                    * * * *         * * * *
-                   *       *       *       *
-                  * *     * *     * *     * *
-                 *   *   *   *   *   *   *   *
-                * * * * * * * * * * * * * * * *
-               *                               *
-              * *                             * *
-             *   *                           *   *
-            * * * *                         * * * *
-           *       *                       *       *
-          * *     * *                     * *     * *
-         *   *   *   *                   *   *   *   *
-        * * * * * * * *                 * * * * * * * *
-       *               *               *               *
-      * *             * *             * *             * *
-     *   *           *   *           *   *           *   *
-    * * * *         * * * *         * * * *         * * * *
-   *       *       *       *       *       *       *       *
-  * *     * *     * *     * *     * *     * *     * *     * *
- *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-\end{verbatim}}
-
-
-\begin{textblock}{6}(8.5,3.5)
-\begin{bubble}[5cm]
-\footnotesize
-\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]
-++++++++[>+>++++<<-]>++>>
-+<[-[>>+<<-]+>>]>+[-<<<[-
->[+[-]+>++>>>-<<]<[<]>>++
-++++[<<+++++>>-]+<<++.[-]
-<<]>.>+[>>]>+]
-\end{lstlisting}
-\end{bubble}
-\end{textblock}
-  
 \end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
-
-\begin{frame}[c]
-\frametitle{Marks for CW6 (Part 1 + 2)}
-
-Raw marks:
-
-\begin{itemize}
-\item 6\%: 154 students
-\item 5\%: 66
-\item 4\%: 18
-\item 3\%: 13
-\item 2\%: 2
-\item 1\%: 1
-\item 0\%: 21 
-\end{itemize}  
-\end{frame}
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{document}
 
 
 \end{document}




