Program 1: rozpoznávající parkovací funkce

parkovani[q_] := Apply[And,Thread[Sort[q]≤Range[Length[q]]]]

parkovani[{1,2,2,5,5}]

Program 2: Pro zadané n vrátí seznam všech parkovacích funkcí.

seznamPF[x_] := Select[Tuples[Table[Range[x],x]],parkovani]

seznamPF[2]

Program 3:
Pro každé parkovací místo najde auto, které zde zaparkuje.
Výstupní seznam lze vnímat jako parkoviště a hodnoty v seznamu jako čísla zaparkovaných aut.

kdeParkuji[x_] := Module[{list2=Table[0,Length[x]]}, 
   Do[a = x[[i]]; While[list2[[a]] ≠ 0, a++]; 
    list2[[a]] = i, {i, 1, Length[x]} ]; list2];
kdeParkuji[{1, 3, 3, 2, 2, 5}]

Program 4:
Pro každé auto najde místo, kde zaparkuje.
Výstupní seznam lze vnímat jako čísla aut, jehož hodnoty jsou pozice, na kterých auta zaparkují.

hledameIAuto[y_] := InversePermutation[kdeParkuji[y]]
hledameIAuto[{1, 3, 3, 2, 2, 5}]

Program 5: hledání počtu šťastných aut

pocetVyvolenych[z_]:=Count[MapThread[Equal,{hledameIAuto[z],z}],True]
pocetVyvolenych[{1, 3, 3, 2, 2, 5}]

Program 6, 1. způsob: průměrný počet šťastných aut

prumerSA[n_] := Mean[Map[pocetVyvolenych, seznamPF[n]]]
prumerSA[2]

Program 6, 2. způsob: počty parkovacích funkcí délky n s l šťastnými auty, kde l=0, ..., n

koefAl[n_]:=CoefficientList[z(Product[(i+(n-i+1)z),{i,1,n-1}]),z]
koefAl[3]

Program 7: výpočet členů rekurentní posloupnosti

p[0] = 1;
p[1] = 1;
p[n_] := Sum[Binomial[n-1,i](i+1)p[i]p[n-1-i], {i,0,n-1}];
Table[p[i], {i,0,10}]

Program 8: Pravděpodobnost, že pro náhodně zvolenou parkovací funkci délky n bude právě l aut šťastných, kde l=0, ..., n.

pravl[n_] := koefAl[n]/((n+1)^(n-1))
pravl[2]

Program 9: numerické řešení diferenciální rovnice se zpožděním

sol =NDSolveValue[{M'[x] == (2 M[x - 1] + 1 - M[x])/(x - 1),
M[x /; x ≤ 2] == 1}, M[x], {x, 1, 10}]

Plot[sol,{x, 1, 10},PlotRange -> All,AxesLabel -> {"délka intervalu", "M(x)"}, BaseStyle -> 12,PlotStyle ->{Purple, Thick}]