# Melita Mihaljevic
# 0036411392
#Studenti ciji maticni broj zavrsava s 2 ili 3 trebaju ostvariti simulaciju
# LRU strategije izbacivanja stranica.

import sys
import random

#zadavanje strukture
broj_okvira = int(sys.argv[1])      # broj okvira
broj_zahtjeva = int(sys.argv[2])	# broj zahtjeva
LRU_lista=[]						# lista koja cuva kada su zadani pojedini zahtjevi i to cuva jedan manje od koiko ima okvira
okvir_lista =[]						# cuva listu okvira
zahtjevi= []						#generira zahtjeve
brojac = 0							#brojac zahtjeva

print broj_okvira				
print broj_zahtjeva


broj = [1,2,3,4,5,6,7,8]
zahtjevi = [random.choice(broj) for i in range(broj_zahtjeva)]	# generiram random zahtjeve koje stavim u listu

print 'ZAHTJEVI:',zahtjevi

for i in range (0, broj_okvira):
        okvir_lista.append('-')		# definiram praznu listu okvira dakle inicializiram je

# ispis pocetka
print '#N',
for i in range (1,broj_okvira + 1):
        print'  ',  i,
print ' '
#ispis nulte iteracije
print '0',
for i in okvir_lista:
        print '  ', i,
	
print ' '
#obrada zahtjeva:

for i in zahtjevi:
	brojac = brojac + 1
	print brojac,'',
        if( i in okvir_lista): # ako je vec zadani u memoriji onda smo pogodili i sad samo zapisemo
                novi_zapis= i;
                for j in okvir_lista:
                        if (j == novi_zapis):
                                print '(',j,')',
                        else:
                                print' ', j,' ',
                print'#pogodak'

                LRU_lista.append(i)
                if (len(LRU_lista)>=broj_okvira):
                        LRU_lista= LRU_lista[1:]
        elif ('-' in okvir_lista):					# ako ima jos mjesta onda dodamo 
                okvir_lista[okvir_lista.index('-') ]= i
                novi_zapis= i
                for j in okvir_lista:
                        if (j == novi_zapis):
                                print'[',j,']',
                        else:
                               print' ',  j,' ',
                LRU_lista.append(i)
		print ' '
                if(len(LRU_lista)>=broj_okvira):
                        LRU_lista= LRU_lista[1:]
        else:										#ako nema mjesta onda moram izbaciti stranicu koja se nije nedavno koristila a to je stranica koja se ne nalazi u LRU_lista
                for j in okvir_lista:
                        if j not in LRU_lista:
                                okvir_lista[okvir_lista.index(j)]= i
				break
                novi_zapis = i

                for j in okvir_lista:
                        if(j== novi_zapis):
                                print'{',j,'}',
                        else:
                                print' ', j,' ',
		print' '
                LRU_lista.append(i)
                if(len(LRU_lista)>=broj_okvira):
                        LRU_lista= LRU_lista[1:]



