#!/usr/bin/python3
import random
#Δηλώνουμε ότι πρόκειται για Python3 script
#Εισάγουμε το module random για να μπορούμε να κάνουμε τυχαίες επιλογές (ομοιόμορφη και κανονική κατανομή)
#Global listes
uniform_list=[]
guasian_list=[]
#Δημιουργούμε δυο παγκόσμιες λίστες τις οποίες θα γεμίσουμε στη συνέχεια:
#uniform_list:με τιμές απο ομοιόμορφη κατανομή.
#guassian_lists:με τιμές απο κανονική(Gaussian) κατανομή.
def fill_uniform(a,b):
   global uniform_list
   #Δημιούργησε 2*b τυχαίους ακέραιους αριθμούς απο την [a,b-1]
   uniform_list=[random.randint(a,b-1) for _ in range(2*b)]
#Οι αριθμοί είναι ομοιόμορφοα κατανεμημένοι στο διάστημα [a,b-1]
def fill_gaussian(a,b):
   global gaussian_list
   count=2*b
   while len(gaussian_list)<count:
   		x=int(random.gauss(a+b)/2, (b-a/6))
   		if a<=x<b:
   		   gaussian_list.append(x)
#Θέλουμε 2*b τιμές όπως και πριν.
#Παράγουμε τυχαίες τιμές απο κανονική κατανομή με:
#Μέση τιμή (mean)=(a+b)/2
#Τυπική απόκλιση (std dev)=(b-a)/6 Για να κρατάει τις τιμές σχετικά στο διάστημα [a,b).
#Αν η τιμή x βρίσκεται μέσα στο διάστημα [a,b) την κρατάμε.
def find_equal_positions():
   ml=[]
   for i ,(u,g) in enumerate(zip(uniform_list,gaussian_list)):
      if u==g:
         ml.append(i)
      return ml
#Συγκρίνει θέση προς θέση τις δύο λίστες(uniform_list,guassian_list)
#Αν οι τιμές είναι ίδιες στη θέση i,καταγράφεται η θέση i στη λίστα ml.
def main():
	a=None
	b=None
	while True:
		try:
		   a = int(input("Δώσε a:"))
		   b = int(input("Δώσε b:"))
		   if a>=b:
		      raise ValueError("To a mikrotero tou b")
		   if b<=10:
		      raise ValueError("To b > 10")
		   break
		except Exception as e:
		   print (f"Error {e} ")
		   exit(1)
#Ζητάει απο τον χρήστη να εισάγει δύο ακέραιες τιμές a και b
#Ελέγχει οτι a<b(το κάτω όριο μικρότερο από το άνω)
#b>10(για να έχει νόημα ο αριθμός δειγμάτων)
#Αν κάτι δεν πάει καλά, τερματίζει το πρόγραμμα με μήνυμα λάθους
		fill_gaussian(a,b)
		fill_uniform(a,b)
		print(uniform_list)
		print(guassian_list)
		matches=find_equal_positions()
		print(matches)
#Καλεί τις δύο συναρτήσεις για να γεμίζει τις λίστες 
#Εκτυπώνει τις λίστες 
#Εντοπίζει τις θέσεις με ίδιες τιμές και τις εκτυπώνει 
if __name__=="__main__":
	main()
#Εκτελέι τη main() μόνο αν το πρόγραμμα τρέχει ως script(όχι όταν εισάγεται σαν module)

#Απο αυτή την άσκηση μαθαίνω πως να δουλεύω με τυχαίους αριθμούς απο διάφορες κατανομές (uniform,gauss)
#Πώς να χειρίζομαι λίστες και να συγκρίνω στοιχεία θέση προς θέση.
#Πως να ελέγχω την εγκυρότητα των εισόδων.
#Πως να χρησιμοποιώ try/except για διαχείριση λαθών.
