|
1 | 1 | \section{\huge{Bonusopgaver}}
|
2 |
| -(til de flittige snapsedrikkere) |
3 | 2 |
|
| 3 | +\setlength{\parindent}{3mm} |
4 | 4 |
|
5 | 5 | \subsection{Opgave 0}
|
6 |
| -Skriv en SML funktion, der finder det mindste tal, som er deleligt med alle |
7 |
| -tal fra $1$ til $100$. |
8 | 6 |
|
| 7 | +Din IP-instruktor har fået besked på at lave en sjov SML-opgave, men han har |
| 8 | +ikke lært at formulere sig letforståeligt, så du får følgende: |
9 | 9 |
|
10 |
| -\subsection{Opgave 1} |
11 |
| -Du har IP-adresseblokken 138.72.13.0/22. Hvor mange forskellige IP-adresser |
12 |
| -råder du over? Angiv også den højeste og den laveste IP-adresse i dit råderum. |
| 10 | +Skriv en SML-funktion \texttt{multifilter} med typen \texttt{($\alpha$ -> bool) |
| 11 | + list -> $\alpha$ list -> $\alpha$ list}. Funktionen tager en liste af |
| 12 | +funktioner og en liste af $\alpha$-værdier, og giver den liste tilbage, hvor det |
| 13 | +for hvert element \texttt{x} i listen gælder at \texttt{x} er en del af |
| 14 | +inddatalisten af $\alpha$-værdier, og at \texttt{f(x) = true} for hver funktion |
| 15 | +\texttt{f} i listen af funktioner, og at uddatalisten har samme sortering som |
| 16 | +inddatalisten. |
13 | 17 |
|
| 18 | +Du må kun bruge funktioner fra \texttt{List}-modulet. |
14 | 19 |
|
15 |
| -\subsection{Opgave 2} |
16 |
| -Løs følgende ligningssystem: |
17 | 20 |
|
18 |
| -\begin{align*} |
19 |
| -A + B + 2C &= 21 \\ |
20 |
| -4A + 3D &= 40 \\ |
21 |
| -B + 2C + 4D &= 49 \\ |
22 |
| -A + 2B + 2C + 3D &= 58 \\ |
23 |
| -\end{align*} |
| 21 | +\subsection{Opgave 1} |
24 | 22 |
|
| 23 | +Din vens mor vil lave en opgave om grafer, men hun kan ikke finde på nogen |
| 24 | +analogi, og desuden er hun ikke særlig god til at tegne grafer. |
25 | 25 |
|
26 |
| -\subsection{Opgave 3} |
27 |
| -Omskriv tallet $154.7$ til dets 32-bit IEEE 754 repræsentation. Bliver der |
28 |
| -mistet præcision? |
| 26 | +Brug Prims algoritme til at finde det mindst udspændte træ for grafen: |
| 27 | +\begin{center} |
| 28 | +\includegraphics[width=.8\textwidth]{figures/graf.pdf} |
| 29 | +\end{center} |
29 | 30 |
|
30 |
| -\subsection{Opgave 4} |
31 | 31 |
|
32 |
| -Find en tæt øvre og nedre asymptotisk grænse for følgende rekurrensformel |
33 |
| -\[ |
34 |
| - T(n) = T(n/2) + T(n-1)\ . |
35 |
| -\] |
36 |
| -Antag at $T(n) = O(1)$ for $n < 2$. |
| 32 | +\newpage |
| 33 | +\subsection{Opgave 2} |
37 | 34 |
|
| 35 | +I det følgende program har funktionen \texttt{f} dynamisk virkefelt der virker |
| 36 | +over funktionsgrænser, mens funktionen \texttt{g} har statisk virkefelt. |
38 | 37 |
|
39 |
| -\subsection{Opgave 5} |
40 |
| -Du skal finde et nyt farveskema til \url{http://kantine.diku.dk}. Farveskemaet |
41 |
| -skal være baseret på den mest brugervenlige farve. Hvilken af følgende er det? |
42 |
| -\begin{enumerate} |
43 |
| - \item Marineblå |
44 |
| - \item Azurblå |
45 |
| - \item Ultramarin |
46 |
| - \item Kornblomst blå |
47 |
| -\end{enumerate} |
48 |
| -Fremstil en paper mock-up af den nye hjemmeside og foretag en |
49 |
| -fokusgruppeundersøgelse med den relevante målgruppe. Rapporter dine resultater |
50 |
| -(ca. 40-50 sider) og giv referencer hvor nødvendigt. |
| 38 | +\begin{verbatim} |
| 39 | +int x = 10; int g(int z) { |
| 40 | + return f(z - x); |
| 41 | +int f(int y) { } |
| 42 | + return x + y; |
| 43 | +} int run() { |
| 44 | + int x = 3; |
| 45 | + return g(1); |
| 46 | + } |
| 47 | +\end{verbatim} |
51 | 48 |
|
| 49 | +\noindent{}Hvad returnerer \texttt{run()}? |
52 | 50 |
|
53 |
| -\subsection{Opgave 6} |
54 |
| -Giv et formelt bevis for følgende udsagn: |
55 |
| -\[ |
56 |
| - \forall x P(x)\lor \forall x Q(x)\Rightarrow \forall x \left(P(x)\lor |
57 |
| - Q(x)\right)\ . |
58 |
| -\] |
59 | 51 |
|
| 52 | +\subsection{Opgave 3} |
60 | 53 |
|
61 |
| -\subsection{Opgave 7} |
62 |
| -Forklar hvad følgende INTERCAL kode gør. Er programmet høfligt nok? Er det |
63 |
| -\emph{for} høfligt? |
| 54 | +For at undgå flaskehalse har Kantinebestyrelsen anskaffet sig en ny colaautomat |
| 55 | +med et flerbrugersystem, så nu kan $n > 1$ brugere købe cola fra den samme |
| 56 | +automat samtidigt. Automaten blev leveret med følgende enterprise-kode: |
64 | 57 | \begin{verbatim}
|
65 |
| -DO ,1 <- #13 |
66 |
| -PLEASE DO ,1 SUB #1 <- #238 |
67 |
| -DO ,1 SUB #2 <- #108 |
68 |
| -DO ,1 SUB #3 <- #112 |
69 |
| -DO ,1 SUB #4 <- #0 |
70 |
| -DO ,1 SUB #5 <- #64 |
71 |
| -DO ,1 SUB #6 <- #194 |
72 |
| -DO ,1 SUB #7 <- #48 |
73 |
| -PLEASE DO ,1 SUB #8 <- #22 |
74 |
| -DO ,1 SUB #9 <- #248 |
75 |
| -DO ,1 SUB #10 <- #168 |
76 |
| -DO ,1 SUB #11 <- #24 |
77 |
| -DO ,1 SUB #12 <- #16 |
78 |
| -DO ,1 SUB #13 <- #162 |
79 |
| -PLEASE READ OUT ,1 |
80 |
| -PLEASE GIVE UP |
| 58 | +int antal_colaer = 1000; |
| 59 | +
|
| 60 | +void køb_en_cola() { |
| 61 | + afspil_fanfare(); |
| 62 | + if (antal_colaer > 0) { |
| 63 | + træk_kroner(14); |
| 64 | + antal_colaer--; |
| 65 | + giv_cola(); |
| 66 | + } |
| 67 | +} |
81 | 68 | \end{verbatim}
|
| 69 | +Antag at koden køres samtidigt af flere brugere. Lokalisér kapløbsstriden og |
| 70 | +reparér den med en lås. |
82 | 71 |
|
83 |
| -Hvad er iøvrigt det fulde navn for programmeringssproget INTERCAL? |
84 | 72 |
|
85 |
| -% Det er hello world |
| 73 | +\subsection{Opgave 4} |
86 | 74 |
|
87 |
| -\subsection{Opgave 8} |
88 |
| -Du er givet $n$ linjesegmenter, som udgør en pinball maskine, samt et |
89 |
| -$x$-koordinat, hvor en pinball bliver smidt ned i maskinen. Bolden vil falde |
90 |
| -nedad (negativ $y$-retning) indtil den rammer en af linjerne. Den følger |
91 |
| -derefter linjen nedad indtil linjen slutter, hvorefter den falder videre ned. |
92 |
| -Lav en algoritme, der beregner hvilket $x$-koordinat bolder falder ud af i |
93 |
| -bunden. Det kan antages, at alle linjesegmenterne hælder, og at ingen af dem |
94 |
| -overlapper. Se figuren herunder for et eksempel på hvordan bolden falder ned |
95 |
| -igennem pinball maskinen. |
| 75 | +Giv et formelt bevis for at |
| 76 | +\begin{align*} |
| 77 | +\forall x P(x) \lor \forall x Q(x) \lor \forall x R(x) \Rightarrow |
| 78 | +\forall x \left(P(x) \lor Q(x) \lor R(x)\right) |
| 79 | +\end{align*} |
96 | 80 |
|
97 |
| -Din algoritme skal køre $O(n\log n)$. |
98 | 81 |
|
99 |
| -\begin{figure}[h!] |
100 |
| - \centering |
101 |
| - \includegraphics[width=0.7\linewidth]{figures/pinball.pdf} |
102 |
| - \caption{Eksempel på en bolds rute ned gennem pinball maskinen.} |
103 |
| - \label{fig:pinball} |
104 |
| -\end{figure} |
| 82 | +\subsection{Exercise 5} |
| 83 | + |
| 84 | +This one's also for our international guests! |
| 85 | + |
| 86 | +Half-Broken Car in Heavy Traffic (or ``HBCHT'') is a programming language for |
| 87 | +the modern, dystopic age. You define a two-dimensional grid in which you place |
| 88 | +road redirections, a car, and an exit. You then let the car follow the road |
| 89 | +redirections. Unfortunately, the car is half-broken and can never turn left, |
| 90 | +relative to its current heading. |
| 91 | + |
| 92 | +A program must contain exactly one car and exactly one exit. When a program |
| 93 | +starts, the car turns to a random direction -- either south, west, north, or |
| 94 | +east. After the initial car heading has been determined, the car moves one step |
| 95 | +in that direction, determines its new direction, moves one step in that |
| 96 | +direction, and so on, until it maybe reaches the exit. If the car is at |
| 97 | +position $(x, y)$, moving north puts it at $(x, y - 1)$, south at $(x, y + 1)$, |
| 98 | +west at $(x - 1, y)$, and east at $(x + 1, y)$. Moves ``wrap around'', so that |
| 99 | +e.g. $(0, y)$ moved west becomes $(x_{max}, y)$, where $x_{max}$ is the highest |
| 100 | +$x$ value. |
| 101 | + |
| 102 | +The basic road redirections are ``go east'', ``go west'', ``go north'', and ``go |
| 103 | +south''. If the car moves to a position where there is a redirection, the car |
| 104 | +changes heading unless that means turning left (relative to its current |
| 105 | +heading). |
| 106 | + |
| 107 | +To use the car for computations, a scheme has been set up whereby road |
| 108 | +redirections double as instructions in a minimal tape-based instruction set. |
| 109 | +The program uses a memory tape with cell IDs from $-\infty$ to $+\infty$, and a |
| 110 | +program starts on cell $0$. All cells have the initial value $0$ and contain |
| 111 | +arbitrary precision integers. The following table describes the road |
| 112 | +redirection semantics, along with a final road redirection, and the shorthands |
| 113 | +used for programming a grid. |
| 114 | + |
| 115 | +{ |
| 116 | +\scriptsize |
| 117 | +\begin{center} |
| 118 | +\begin{tabular}{l|c|p{4cm}} |
| 119 | +Redirection & Shorthand & Tape semantics\\\hline |
| 120 | +Car start position & \texttt{o} & -\\ |
| 121 | +Highway exit & \texttt{\#} & Halt program\\ |
| 122 | +Go east & \texttt{>} & Increment memory cell pointer\\ |
| 123 | +Go west & \texttt{<} & Decrement memory cell pointer\\ |
| 124 | +Go north & \textasciicircum & Increment current memory cell value\\ |
| 125 | +Go south & \texttt{v} & Decrement current memory cell value\\ |
| 126 | +Maybe go east & \texttt{/} & Go east if the current memory cell $n$ has the same value as |
| 127 | +cell $n - 1$; else continue |
| 128 | +\end{tabular} |
| 129 | +\end{center} |
| 130 | +} |
| 131 | + |
| 132 | +\noindent\textbf{6 (a)} Write a program in HBCHT that increments cell 0 and |
| 133 | +exits, without causing any other lasting effects, i.e. all other cell values |
| 134 | +must have the value $0$ (the start value) when the car hits the exit. |
| 135 | + |
| 136 | +\noindent\textbf{6 (b)} Prove or disprove that HBCHT is Turing complete. |
105 | 137 |
|
106 |
| -% Brug en sweepline fra top til bottom |
107 |
| -\newpage |
108 |
| -\subsection{Opgave 9} |
109 | 138 |
|
110 |
| -Lad $G$ være en plan, 3-regulær, bipartit graf, som er 3-vertex-connected. |
111 |
| -Bevis eller modbevis at alle sådanne grafer $G$ indeholder en hamilton cycle. |
| 139 | +\subsection{Opgave 6} |
| 140 | + |
| 141 | +$k$ dataloger står på den samme linje på en cirkulær løbebane med omkreds på 1 |
| 142 | +meter. Startskuddet går, og de begynder alle samtidigt at løbe. Hver datalog |
| 143 | +har en unik løbehastighed. |
| 144 | + |
| 145 | +En fysiker opstiller en konjektur: For alle $k \geq 0$ gælder at der for hver af |
| 146 | +de $k$ dataloger findes et tidspunkt hvor datalogen er mindst $\frac{1}{k}$ m |
| 147 | +væk fra enhver anden datalog i cirklen. |
| 148 | + |
| 149 | +Bevis eller modbevis konjekturen. |
| 150 | + |
| 151 | +\vspace{.1in} \textbf{\emph{NB: Der udloddes en flaske snaps til den første som |
| 152 | + kommer op i baren med en korrekt besvarelse af denne opgave!}} |
112 | 153 |
|
113 |
| -\vspace{.1in} |
114 |
| -\textbf{\emph{NB: Der udloddes en flaske snaps til den første som kommer op i baren med en korrekt besvarelse af denne opgave!}} |
| 154 | +% Uløst problem: Lonely runner conjecture |
115 | 155 |
|
116 |
| -% Uløstproblem. "Barnette's Conjecture". |
| 156 | +\setlength{\parindent}{0mm} |
0 commit comments