|  | @@ -122,7 +122,7 @@ func checkRuleOnField(currentRule rule, field int) bool {
 | 
	
		
			
				|  |  |  type fieldRules struct {
 | 
	
		
			
				|  |  |  	id    int
 | 
	
		
			
				|  |  |  	size  int
 | 
	
		
			
				|  |  | -	rules []rule
 | 
	
		
			
				|  |  | +	rules []string
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type bySize []fieldRules
 | 
	
	
		
			
				|  | @@ -133,7 +133,7 @@ func (a bySize) Less(i, j int) bool { return a[i].size < a[j].size }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type fieldRule struct {
 | 
	
		
			
				|  |  |  	id         int
 | 
	
		
			
				|  |  | -	mappedRule rule
 | 
	
		
			
				|  |  | +	mappedRule string
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  var mapping []fieldRule
 | 
	
	
		
			
				|  | @@ -142,7 +142,7 @@ func notTaken(item fieldRules) {
 | 
	
		
			
				|  |  |  	for _, currentRule := range item.rules {
 | 
	
		
			
				|  |  |  		new := true
 | 
	
		
			
				|  |  |  		for _, takenRule := range mapping {
 | 
	
		
			
				|  |  | -			if currentRule.name == takenRule.mappedRule.name {
 | 
	
		
			
				|  |  | +			if currentRule == takenRule.mappedRule {
 | 
	
		
			
				|  |  |  				new = false
 | 
	
		
			
				|  |  |  				break
 | 
	
		
			
				|  |  |  			}
 | 
	
	
		
			
				|  | @@ -158,21 +158,29 @@ func notTaken(item fieldRules) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func establishOrder() {
 | 
	
		
			
				|  |  |  	numberOfFields := len(rules)
 | 
	
		
			
				|  |  | +	numberOfValidTickets := len(validTickets)
 | 
	
		
			
				|  |  |  	var rulesByField []fieldRules
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	for i := 0; i < numberOfFields; i++ {
 | 
	
		
			
				|  |  | -		current := fieldRules{id: i, size: 0}
 | 
	
		
			
				|  |  | -		for _, currentRule := range rules {
 | 
	
		
			
				|  |  | -			ruleValid := true
 | 
	
		
			
				|  |  | -			for _, item := range validTickets {
 | 
	
		
			
				|  |  | -				if !checkRuleOnField(currentRule, item[i]) {
 | 
	
		
			
				|  |  | -					ruleValid = false
 | 
	
		
			
				|  |  | -					break
 | 
	
		
			
				|  |  | +	validForField := make([]map[string]int, numberOfFields)
 | 
	
		
			
				|  |  | +	for i, _ := range validForField {
 | 
	
		
			
				|  |  | +		validForField[i] = make(map[string]int)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for _, item := range validTickets {
 | 
	
		
			
				|  |  | +		for i := 0; i < numberOfFields; i++ {
 | 
	
		
			
				|  |  | +			for _, currentRule := range rules {
 | 
	
		
			
				|  |  | +				if checkRuleOnField(currentRule, item[i]) {
 | 
	
		
			
				|  |  | +					validForField[i][currentRule.name]++
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			if ruleValid {
 | 
	
		
			
				|  |  | -				current.rules = append(current.rules, currentRule)
 | 
	
		
			
				|  |  | +	for i, item := range validForField {
 | 
	
		
			
				|  |  | +		current := fieldRules{id: i, size: 0}
 | 
	
		
			
				|  |  | +		for key, value := range item {
 | 
	
		
			
				|  |  | +			if value == numberOfValidTickets {
 | 
	
		
			
				|  |  | +				current.rules = append(current.rules, key)
 | 
	
		
			
				|  |  |  				current.size++
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -190,7 +198,7 @@ func checkMyTicket() int {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	result := 1
 | 
	
		
			
				|  |  |  	for _, currentRule := range mapping {
 | 
	
		
			
				|  |  | -		if !strings.Contains(currentRule.mappedRule.name, "departure") {
 | 
	
		
			
				|  |  | +		if !strings.Contains(currentRule.mappedRule, "departure") {
 | 
	
		
			
				|  |  |  			continue
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 |