\subsection{\textit{Piet}}
\textit{Piet} is een esoterische, stack geori\"enteerde en ge-\"interpreteerde
programmeertaal die is ge\"inspireerd door de Nederlandse kunstenaar Piet
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 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}
\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}
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 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$.}, 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 codelgrootte $2$
``Piet'' print en bij codel grootte $1$ ``Hello World''. Het programma is
zichtbaar in Figuur~\ref{fig:img4}.
\begin{figure}[H]
    \caption{Codelgrootte 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\"interpreteerd 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 
Tabel~\ref{tab:in1}.
\begin{table}[H]
    \caption{Keuze volgende codel}
    \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 Tabel~\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 zorgen voor een CC
waardeverwisseling, komt de interpreter weer een blokkade tegen dan wordt de DP
een slag met de klok mee gedraaid, dit wordt herhaald tot er een
niet-blokkadeblok gevonden wordt. Als dit na acht pogingen nog niet het geval
is termineert het programma.

\begin{table}[H]
    \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}
\end{table}
