Mondriaan. Programma's geschreven vooor \textit{piet} kunnen eruit zien als
abstracte kunst en worden aangeleverd als een afbeelding. Een programma dat
zijn doel nastreeft is bijvoorbeeld het volgende programma dat het woord
-``\textit{Tetris}'' print en iedere groep blokken een blok is uit het originele
-\textit{Tetris} spel.
+``\textit{Tetris}'' print en ieder vlak van dezelfde kleur is van de vorm van
+een van de blokken uit het originele \textit{Tetris} spel.
\begin{figure}[h]
- \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png}
+ \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png}
\end{figure}
\subsection{Beschrijving en vergelijking met \textit{While}}
\textit{Piet} en \textit{While} zijn beide imperatieve talen maar zijn toch erg
-verschillend als het gaat om variabelenopslag en instructies. \textit{Piet}
+verschillend als het gaat om variabelenopslag en instructies. \textit{Piet}
slaat zijn variabelen op in een stack waar \textit{While} dit niet doet. In een
toestand in \textit{While} kan iedere gedeclareerde variabele opgevraagd
worden. Omdat \textit{Piet} de variabelen in een stack opslaat kan er alleen
-maar de bovenste waarde opgevraagd worden.\\
-In \textit{Piet} is een stack een geordende rij van gehele getallen. De stack
-gedraagt zich volgens het LIFO(Last in First Out) principe wat inhoudt dat er
-slechts \'e\'en element per keer kan worden opgevraagd en dat dat alleen het
-laatst toegevoegde element kan zijn.\\
+maar de bovenste waarde opgevraagd worden.\\ In \textit{Piet} is een stack een
+geordende rij van gehele getallen. De stack gedraagt zich volgens het LIFO(Last
+in First Out) principe wat inhoudt dat er alleen het bovenste element
+beschikbaar is.\\
Instructies worden gegeven door het binnengaan van een nieuwe codel
\footnote{Een codel is een blok $n\times n$ pixels waarbij $n\in\mathbb{N}$,
een argument aan de compiler bepaalt de waarde van $n$. De standaard waarde is
-$1$} Als de kleur van de nieuwe codel wit of hetzelfde is als de codel die
-verlaten wordt zal er niks gebeuren, is de codel zwart dan wordt er een nieuwe
-richting gekozen door de interpreter. Alle andere kleuren beschrijven een
-overgang die te beschrijven is in twee parameters; tint en intensiteit. Beide
-parameters zijn cyclisch, wat betekent dat de opvolger van de grootste waarde
-de kleinste waarde is. Iedere mogelijke overgang beschrijft een instructie voor
-de interpreter. Deze overgangen zijn beschreven in tabel
-\ref{tab:in1}.
+$1$}, de grootte van de codel is een interpreter argument en kan een groot
+verschil maken in semantiek van het programma. Bij wijze van uitdaging heeft
+een \textit{Piet} programmeur een programma gemaakt dat bij codel grootte $2$
+``Piet'' print en bij codel grootte $1$ ``Hello World''. Het programma is
+zichtbaar in \ref{fig:img4}.
+\begin{figure}[H]
+ \caption{Codel grootte maakt het verschil}
+ \label{fig:img4}
+ \centering
+ \includegraphics[natheight=46px, natwidth=50px, height=46px, width=50px]{img4.png}
+\end{figure}
+Een \textit{Piet} programma wordt ge\"interpreteert door een interpreter die te
+vergelijken is met een agent die over de pixels loopt. De agent houdt een
+aantal dingen bij terwijl hij aan het lopen is over de pixels namelijk:
+\textit{codelchooser(CC), direction pointer(DP), vorig vlak(VK)}. De VK waarde
+is de waarde van het vorige codel bij het bewegen naar een nieuwe codel. De
+waarde van een codel is het oppervlakte van de codels met de zelfde kleur die
+verlaten is. Het bepalen van de volgende codel wordt bepaald door een
+combinatie van de CC en de DP, deze relatie staat beschreven in \ref{tab:in1}.
+\begin{table}[H]
+ \caption{Volgend codel keuze}
+ \label{tab:in1}
+ \centering
+ \begin{tabular}{|c|c|c|}
+ \hline
+ DP & CC & Codel chosen\\
+ \hline
+ rechts & links & meest bovenste\\
+ rechts & rechts & minst bovenste\\
+ omlaag & links & meest rechtse\\
+ omlaag & rechts & meest linkse\\
+ links & links & meest onderste\\
+ links & rechts & meest bovenste\\
+ omhoog & links & meest linkse\\
+ omhoog & rechts & meest rechtse\\
+ \hline
+ \end{tabular}
+\end{table}
+
+De overgang van kleur die wordt waargenomen bij het verplaatsen van codel naar
+codel bepaalt de operatie die wordt uitgevoerd. De overgang in kleur is te
+beschrijven in twee cyclische parameters genaamd tint en intensiteit. Deze
+overgangen zijn beschreven in \ref{tab:in2}. Als de interpreter een witte codel
+binnengaat wordt er niks gedaan en vervolgt de interpreter zijn weg. Zwarte
+codels en de rand van de afbeelding zijn blokkades en zorgt voor een CC
+waardeverwisseling, komt de interpreter weer een blokkade tegen wordt de DP een
+slag met de klok mee gedraaid, dit wordt herhaalt tot er een niet blokkade blok
+gevonden wordt. Als dit na acht pogingen nog niet het geval is termineert het
+programma.
+\ref{tab:in2}.
\begin{table}[H]
- \caption{Beide overgangcykels}
- \label{tab:in1}
- \centering
- \begin{itemize}
- \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta
- \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker
- \end{itemize}
+ \caption{Beide overgangcykels}
+ \label{tab:in2}
+ \centering
+ \begin{itemize}
+ \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta
+ \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker
+ \end{itemize}
\end{table}
De instructies die de overgangen uitdrukken staan beschreven in de tabel
\ref{tab:in2}.
\begin{table}[H]
- \caption{Commando's}
- \label{tab:in2}
- \centering
- \begin{tabular}{|l|l|l|l|}
- \hline
- Tint\textbackslash Intensiteit & 0 donkerder & 1 donkerder & 2 donkerder\\
- \hline
- 0 stappen & - & push & pop\\\hline
- 1 stap & add & subtract & multiply\\\hline
- 2 stappen & divide & mod & not\\\hline
- 3 stappen & greater & pointer & switch\\\hline
- 4 stappen & duplicate & roll & in(number)\\\hline
- 5 stappen & in(char) & out(number) & out(char)\\\hline
- \end{tabular}
+ \caption{Commando's}
+ \label{tab:in2}
+ \centering
+ \begin{tabular}{|l|l|l|l|}
+ \hline
+ Tint\textbackslash Intensiteit & 0 donkerder & 1 donkerder & 2 donkerder\\
+ \hline
+ 0 stappen & - & push & pop\\\hline
+ 1 stap & add & subtract & multiply\\\hline
+ 2 stappen & divide & mod & not\\\hline
+ 3 stappen & greater & pointer & switch\\\hline
+ 4 stappen & duplicate & roll & in(number)\\\hline
+ 5 stappen & in(char) & out(number) & out(char)\\\hline
+ \end{tabular}
\end{table}