From: Sergey Matveev Date: Sat, 30 Dec 2017 10:17:16 +0000 (+0300) Subject: Initial commit X-Git-Url: http://www.git.stargrave.org/?p=randomart.git;a=commitdiff_plain;h=e9e021797097c32c6e185e6afdbc792a43a5f56c Initial commit --- e9e021797097c32c6e185e6afdbc792a43a5f56c diff --git a/randomart.py b/randomart.py new file mode 100644 index 0000000..8d26931 --- /dev/null +++ b/randomart.py @@ -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