diff --git a/12-knihovna/kostky.py b/12-knihovna/kostky.py
new file mode 100755
index 0000000000000000000000000000000000000000..a066e08a63789542c8c8f5f3f73346840cf3ac15
--- /dev/null
+++ b/12-knihovna/kostky.py
@@ -0,0 +1,12 @@
+#!/usr/bin/python3
+
+import random
+
+N = 1000
+pocty = [0]*6
+
+for _ in range(N):
+    hod = random.randrange(6)
+    pocty[hod] += 1
+
+print(pocty)
diff --git a/12-knihovna/permutace.py b/12-knihovna/permutace.py
new file mode 100755
index 0000000000000000000000000000000000000000..0f1274ff5f15801a6e52a08afe42be6380636f57
--- /dev/null
+++ b/12-knihovna/permutace.py
@@ -0,0 +1,9 @@
+#!/usr/bin/python3
+
+import random
+
+slova = "nemám rád zbytečně použité permutace".split()
+
+for _ in range(20):
+    perm = random.sample(slova, len(slova))
+    print(" ".join(perm))
diff --git a/12-knihovna/pevne-body.py b/12-knihovna/pevne-body.py
new file mode 100755
index 0000000000000000000000000000000000000000..8bba7bb9d22b3b1e562c016200ddc23bc72fd67a
--- /dev/null
+++ b/12-knihovna/pevne-body.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python3
+
+import random
+
+N = 10
+pokusu = 1000
+bez_pevnych = 0
+celkem_pevnych = 0
+
+for _ in range(pokusu):
+    perm = random.sample(range(N), N)
+
+    pevne = 0
+    for i in range(N):
+        if perm[i] == i:
+            pevne += 1
+
+    celkem_pevnych += pevne
+    if pevne == 0:
+        bez_pevnych += 1
+
+print("Celkem pokusů:", pokusu)
+print("Pravděpodobnost permutace bez pevného bodu:", bez_pevnych / pokusu)
+print("Průměrný počet pevných bodů:", celkem_pevnych / pokusu)
diff --git a/12-knihovna/pi.py b/12-knihovna/pi.py
new file mode 100755
index 0000000000000000000000000000000000000000..296841f006672957b519e2aa68fcb776c5eda862
--- /dev/null
+++ b/12-knihovna/pi.py
@@ -0,0 +1,13 @@
+#!/usr/bin/python3
+
+import random
+
+N = 1000000
+v_kruhu = 0
+
+for _ in range(N):
+    x, y = random.uniform(-1, 1), random.uniform(-1, 1)
+    if x**2 + y**2 <= 1:
+        v_kruhu += 1
+
+print(4*v_kruhu/N)