import random as rnd
import time
import os
from matplotlib import pyplot as plt


def lcg(seed, n, r):
    m = 2**31
    a = 1103515245
    c = 12345

    nums = []
    indicies = []

    x = seed

    for i in range(n):
        x = (a * x + c) % m

        nums.append(x % r)
        indicies.append(i)

    return nums, indicies


def random(seed, n, r):
    nums = []
    indicies = []
    rnd.seed(seed)

    for i in range(n):
        x = rnd.randint(0, r)

        nums.append(x)
        indicies.append(i)

    return nums, indicies


if __name__ == "__main__":
    print("Enter N (amount of numbers)")
    n = int(input())

    print("Enter R (maximum possible number)")
    r = int(input())

    seed = time.time()

    lcg_nums, lcg_indicies = lcg(seed, n, r)
    random_nums, random_indicies = random(seed, n, r)

    fig = plt.figure(figsize=(20, 10))

    lcg_plot = fig.add_subplot(1, 2, 1)
    lcg_plot.set_title("linear congruential generator")
    lcg_plot.scatter(lcg_indicies, lcg_nums)

    random_plot = fig.add_subplot(1, 2, 2)
    random_plot.set_title("built-in random")
    random_plot.scatter(random_indicies, random_nums)

    fig_path = os.path.join(os.path.dirname(__file__), 'rnd.png')
    fig.savefig(fig_path)
    print("Saved result as {}".format(fig_path))
