import sort_date correct_locs = [ ] temp = None moved_item = None moved_item_loc = None exp_date = [ ] shelf_new = [ ] repeats = 0 moves_return = None pickup = [] replace = [] def throw_check(): for i in range(0,len(moves_return),2): loc = i + 2; if moves_return[i + 1] != 0: break if 0 in moves_return[loc:]: return True return False def seperate(): global pickup global replace for i in range(1,len(moves_return),2): pickup.append(moves_return[i-1]) replace.append(moves_return[i]) def backArray( myArray ): global shelf_back shelf_back = [ ] for i in range( len( myArray ) ): shelf_back.append( myArray[ i ] ) def eqArray( myArray ): global exp_date exp_date = [ ] for i in range( len( myArray ) ): exp_date.append( myArray[ i ] ) def place(): global exp_date global shelf_new global repeats global shelf_back global moves_return repeats += 1 backArray( exp_date ) moved_item = None moved_item_loc = None if (exp_date[ len( exp_date ) - 1 ] != None): empty_loc = exp_date.index( None ) moved_item_loc = exp_date.index( shelf_new[ empty_loc ] ) reps = 0 while True: reps += 1 if (moved_item_loc in correct_locs): exp_date.pop( moved_item_loc ) moved_item_loc = exp_date.index( shelf_new[ empty_loc ] ) + reps continue break eqArray( shelf_back ) moved_item = exp_date[ moved_item_loc ] if (exp_date[ moved_item_loc ] != shelf_new[ moved_item_loc ]): exp_date[ moved_item_loc ] = None exp_date[ empty_loc ] = moved_item correct_locs.append( empty_loc ) print " Moved item {0} to location {1}. Location {2} is now empty!".format( moved_item, empty_loc + 1, moved_item_loc + 1 ) print "=============================================================================" moves_return.append( str( moved_item_loc + 1 ) ) moves_return.append( str( empty_loc + 1 ) ) else: print " Leaving item {0} in location {1}. Location {2} is still empty!".format( moved_item, moved_item_loc + 1, empty_loc + 1 ) print "============================================================================" correct_locs.append( moved_item_loc ) place() else: return def faster(): global moves_return for i in range( 1, len( moves_return ) - 1, 2 ): if (moves_return[ i ] == moves_return[ i + 1 ]): moves_return.pop( i ) moves_return.pop( i ) faster() else: continue return moves_return def generate( dates, date_cur ): global exp_date global shelf_new global repeats global moves_return shelf_new = [ ] moves_return = [ ] exp_date = sort_date.calcDate( dates, date_cur ) shelf_back = exp_date[ : ] try: expired = exp_date.count( -1 ) for i in range( expired ): shelf_back.pop( shelf_back.index( -1 ) ) shelf_new = sorted( shelf_back ) for i in range( expired ): shelf_new.append( -1 ) except ValueError: print('') exp_date.append( None ) shelf_new.append( None ) repeats = 0 print "\n\n\n//////////////////////////////////////////////////////////////////////////////" print(" {} ".format( exp_date )) print(" {} ".format( shelf_new )) print "/////////////////////////////////////////////////////////////////////////////\n\n\n" while True: if (repeats < len( exp_date )): for i in range( len( exp_date ) ): if (exp_date[ len( exp_date ) - 1 ] == None): if (exp_date[ i ] == shelf_new[ i ]): continue else: exp_date[ len( exp_date ) - 1 ] = exp_date[ i ] print '\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' print ' TEMP IS EMPTY, MOVING {0} FROM LOCATION {1} TO THE TEMP'.format( exp_date[ i ], i + 1 ) print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n' print "============================================================================" exp_date[ i ] = None moves_return.append( str( i + 1 ) ) moves_return.append( str( len( exp_date ) ) ) else: break place() try: print('***********************************************************************************') print(' The last {} items have expired, throwing them away.'.format( len( exp_date ) - shelf_new.index( -1 ) - 1 )) print('***********************************************************************************') if (len( shelf_new ) != 3): for i in range( len( shelf_new ) - 1, len( shelf_new ) - shelf_new.index( -1 ), -1 ): print "aaa" moves_return.append( str( i ) ) moves_return.append( "0" ) else: for i in range( len( shelf_new ), len( shelf_new ) - shelf_new.index( -1 ), -1 ): print "aaa" moves_return.append( str( i - 1 ) ) moves_return.append( "0" ) except ValueError: print(" No items have expired") print('***********************************************************************************') faster() return moves_return print generate( [ "11.07.2019", "12.09.2019" ], "10.08.2019" ) seperate() print(pickup) print replace