]> Sergey Matveev's repositories - randomart.git/commitdiff
Initial commit
authorSergey Matveev <stargrave@stargrave.org>
Sat, 30 Dec 2017 10:17:16 +0000 (13:17 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 30 Dec 2017 10:17:16 +0000 (13:17 +0300)
randomart.py [new file with mode: 0644]

diff --git a/randomart.py b/randomart.py
new file mode 100644 (file)
index 0000000..8d26931
--- /dev/null
@@ -0,0 +1,29 @@
+def randomart(dgst, header="DIGEST"):
+    """Drunked-bishop algorithm for visualizing random art of the digest
+    """
+    augmentation = " .o+=*BOX@%&#/^SE"
+    max_len = len(augmentation) - 1
+    field_y = 8 + 1
+    field_x = 8 * 2 + 1
+    field = [[0 for _ in range(field_y)] for _ in range(field_x)]
+    dgst = bytearray(dgst)
+    x = field_x // 2
+    y = field_y // 2
+    for byte in dgst:
+        for _ in range(4):
+            x += 1 if (byte & 0x1) else -1
+            y += 1 if (byte & 0x2) else -1
+            x = min(max(x, 0), field_x - 1)
+            y = min(max(y, 0), field_y - 1)
+            if field[x][y] < max_len - 2:
+                field[x][y] += 1
+            byte >>= 2
+    field[field_x // 2][field_y // 2] = augmentation.index("S")
+    field[x][y] = augmentation.index("E")
+    result = ["+--[%s]%s+" % (header, "-" * (field_x - 2 - 2 - len(header)))]
+    for y in range(field_y):
+        result.append("|%s|" % "".join(
+            [augmentation[min(field[x][y], max_len)] for x in range(field_x)]
+        ))
+    result.append("+%s+" % ("-" * field_x))
+    return result