From 931d213d4395c6d0ef93f30fe606da8ee3baa6d2 Mon Sep 17 00:00:00 2001
From: Hong-Phuc Bui <hong-phuc.bui@htwsaar.de>
Date: Mon, 29 Apr 2024 02:14:56 +0200
Subject: [PATCH] update permutation
---
python-grundlage/cli-example.py | 7 ++
python-grundlage/find-machinell-epsilon.py | 18 ++++--
python-grundlage/binary.py | 22 +++++++
python-grundlage/sqrt-newton.py | 12 ++-
python-grundlage/euclid-gcd.py | 13 ++++
python-grundlage/hex-table.py | 10 +++
python-grundlage/prime-factorize.py | 20 ++++++
python-grundlage/permutation-iterative.py | 31 ++++++++++
python-grundlage/harmonic-serie.py | 9 +++
python-grundlage/prime-factorize-half.py | 21 +++++++
python-c-interface/prime-factory.py | 0
11 files changed, 152 insertions(+), 11 deletions(-)
diff --git a/python-c-interface/prime-factory.py b/python-c-interface/prime-factory.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python-c-interface/prime-factory.py
diff --git a/python-grundlage/binary.py b/python-grundlage/binary.py
new file mode 100755
index 0000000..6e23ffa
--- /dev/null
+++ b/python-grundlage/binary.py
@@ -0,0 +1,22 @@
+#! /usr/bin/env python
+
+from typing import Final
+import sys
+
+n = int(sys.argv[1])
+power = 1
+LIMIT: Final[int] = n // 2
+
+# find the largest power of 2, which is less than or equal to n/2
+while power <= LIMIT:
+ power *= 2
+
+binary_presentation = ""
+while power > 0:
+ if n < power:
+ binary_presentation += "0"
+ else:
+ binary_presentation += "1"
+ n -= power
+ power //= 2
+print(binary_presentation)
diff --git a/python-grundlage/cli-example.py b/python-grundlage/cli-example.py
new file mode 100644
index 0000000..f64c442
--- /dev/null
+++ b/python-grundlage/cli-example.py
@@ -0,0 +1,7 @@
+import sys
+
+a = int(sys.argv[1])
+b = int(sys.argv[2])
+s = a + b
+
+print(s)
\ No newline at end of file
diff --git a/python-grundlage/euclid-gcd.py b/python-grundlage/euclid-gcd.py
new file mode 100644
index 0000000..41ffcac
--- /dev/null
+++ b/python-grundlage/euclid-gcd.py
@@ -0,0 +1,13 @@
+#! /usr/bin/env python
+
+import sys
+
+a = int(sys.argv[1])
+b = int(sys.argv[2])
+
+while b != 0:
+ t = b
+ b = a % b
+ a = t
+
+print(a)
diff --git a/python-grundlage/find-machinell-epsilon.py b/python-grundlage/find-machinell-epsilon.py
index 4fd47a5..9505c55 100644
--- a/python-grundlage/find-machinell-epsilon.py
+++ b/python-grundlage/find-machinell-epsilon.py
@@ -1,13 +1,19 @@
-# Credit: https://stackoverflow.com/a/57579379
-
import sys
-eps = 1.0
-while eps + 1 > 1:
- eps /= 2
-eps *= 2
sys_eps = sys.float_info.epsilon
+
+eps = 1.0
+while 1.0 + eps > 1.0:
+ eps /= 2.0
+eps *= 2.0
+
print(f"The calculated epsilon: {eps}")
print(f" The system epsilon: {sys_eps}")
+# with assign expression
+eps = 1.0
+while 1.0 + (eps := eps / 2.0) > 1.0: pass
+eps *= 2.0
+print(f"The calculated epsilon: {eps}")
+print(f" The system epsilon: {sys_eps}")
diff --git a/python-grundlage/harmonic-serie.py b/python-grundlage/harmonic-serie.py
new file mode 100644
index 0000000..d9a42e3
--- /dev/null
+++ b/python-grundlage/harmonic-serie.py
@@ -0,0 +1,9 @@
+n = 10
+h = 1
+algebraic_h = "1"
+
+for k in range(2, n+2):
+ print(f"{algebraic_h} = {h}")
+ algebraic_h = f"{algebraic_h} + 1/{k}"
+ h = h + 1/k
+
diff --git a/python-grundlage/hex-table.py b/python-grundlage/hex-table.py
new file mode 100755
index 0000000..fee668d
--- /dev/null
+++ b/python-grundlage/hex-table.py
@@ -0,0 +1,10 @@
+#! /usr/bin/env python
+# -*-encoding utf-8-*-
+
+n = 0xF
+
+for i in range(n + 1):
+ for j in range(n + 1):
+ p = i * j
+ print(f"{p:02X} ", end="")
+ print()
diff --git a/python-grundlage/permutation-iterative.py b/python-grundlage/permutation-iterative.py
new file mode 100755
index 0000000..8b4030c
--- /dev/null
+++ b/python-grundlage/permutation-iterative.py
@@ -0,0 +1,31 @@
+#! /usr/bin/env python
+import sys
+
+n = int(sys.argv[1])
+
+# permutations = [[0]]
+# element = 1
+# n = 2
+#
+# next_permutations = []
+# for p in permutations:
+# for position in range(0, len(p) + 1):
+# new_permutation = p.copy()
+# new_permutation.insert(position, element)
+# next_permutations.append(new_permutation)
+# print(next_permutations)
+
+permutations = [[]]
+element = n - 1
+
+while element >= 0:
+ next_permutations = []
+ for p in permutations:
+ for position in range(len(p), -1, -1):
+ new_permutation = p.copy()
+ new_permutation.insert(position, element)
+ next_permutations.append(new_permutation)
+ permutations = next_permutations
+ element -= 1
+
+print(permutations)
\ No newline at end of file
diff --git a/python-grundlage/prime-factorize-half.py b/python-grundlage/prime-factorize-half.py
new file mode 100755
index 0000000..d309f51
--- /dev/null
+++ b/python-grundlage/prime-factorize-half.py
@@ -0,0 +1,21 @@
+#! /usr/bin/env python
+import sys
+n = int(sys.argv[1])
+
+# quote_test ist ein 2-er Tupel (q, r)
+while (quote_rest := divmod(n, 2)) and quote_rest[1] == 0:
+ print(f"{2} ", end="")
+ n = quote_rest[0]
+
+p = 3
+while p * p <= n:
+ if (quote_rest := divmod(n, p)) and quote_rest[1] == 0:
+ print(f"{p} ", end="")
+ n = quote_rest[0]
+ else:
+ p += 2
+if n != 1:
+ print(n)
+
+#print(f"iteration: {__iteration}")
+
diff --git a/python-grundlage/prime-factorize.py b/python-grundlage/prime-factorize.py
new file mode 100755
index 0000000..15cfe8e
--- /dev/null
+++ b/python-grundlage/prime-factorize.py
@@ -0,0 +1,20 @@
+#! /usr/bin/env python
+# -*-encoding utf-8-*-
+
+import sys
+
+n = int(sys.argv[1])
+p = 2
+
+iteration = 0
+while n > 1:
+ q, r = divmod(n, p)
+ if r == 0:
+ print(f"{p} ", end="")
+ n = q
+ else:
+ p += 1
+ iteration += 1
+
+print(f"\niteration: {iteration}")
+
diff --git a/python-grundlage/sqrt-newton.py b/python-grundlage/sqrt-newton.py
old mode 100644
new mode 100755
index 00cfa07..3eb8e68
--- a/python-grundlage/sqrt-newton.py
+++ b/python-grundlage/sqrt-newton.py
@@ -1,10 +1,12 @@
+#! /usr/bin/env python
import sys
+from typing import Final
n = float(sys.argv[1])
-EPSILON = sys.float_info.epsilon
+EPSILON: Final[float] = sys.float_info.epsilon
-t = n
-while abs(t - n/t) > (EPSILON*t):
- t = (n / t + t) / 2
+x = n # !$x_0 = n$!
+while abs(x - (q := n / x)) > (EPSILON * x): # !$\left|\frac{x^2-n}{x^2}\right| > \varepsilon $!
+ x = (x + q) / 2.0 # !$x_{i+1} = \frac{1}{2}(x_i + \frac{n}{x_i})$!
-print(f"sqrt({n}) ~= {t}")
+print(f"sqrt({n}) ~ {x}")
--
Gitblit v1.10.0