Files
Sublinear_variable_difficul…/statisticsFromHashes.py

66 lines
1.5 KiB
Python

import os, math, matplotlib.pyplot as plt
path = '/home/benjamin/Desktop/bens_folder/school/m2/internship/work/romaric/me/'
os.chdir(path)
def getDifficultyOfHash(hexHash):
return int(hexHash, 16)
difficultyRatios = {}
X, Y = [], []
with open('hashes.txt') as f:
lines = f.read().splitlines()
for line in lines:
lineParts = line.split()
hash = lineParts[0]
target = lineParts[1]
hashDifficulty = getDifficultyOfHash(hash)
targetDifficulty = getDifficultyOfHash(target)
# If use `round` instead of `int`, then it gives the same result as before.
difficultyRatio = round(math.log2(targetDifficulty / hashDifficulty))
if difficultyRatio in difficultyRatios:
difficultyRatios[difficultyRatio] += 1
else:
difficultyRatios[difficultyRatio] = 1
for i in range(max(difficultyRatios) + 1):
if i in difficultyRatios:
X += [i]
Y += [difficultyRatios[i] / len(lines)]
## To improve the readability:
plt.scatter(X, Y)
plt.xticks(X, X)
YP = [2 ** -i for i in range(len(X))][:7]
plt.yticks(YP, YP)
for x, y in zip(X, Y):
if x <= 5:
plt.text(x, y, f'({x}, {round(y, 4)})', ha='center', va='top')
##
plt.plot(X, Y)
plt.show()
## To understand the difference between `int` and `round:`
import numpy as np
x = np.linspace(0, 10, 1000)
plt.plot(x, np.vectorize(int)(x), label = 'int')
plt.plot(x, np.vectorize(round)(x), label = 'round')
plt.legend(loc = 'upper left')
plt.show()