✨ Finish task for part one and two for day 4
This commit is contained in:
		
							parent
							
								
									7d66e8b910
								
							
						
					
					
						commit
						c7ce85ed63
					
				
							
								
								
									
										108
									
								
								day4/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								day4/main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,108 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"math"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	countPasswords := CountPossiblePasswords(245318, 765747, false)
 | 
			
		||||
	countAdditionalPasswords := CountPossiblePasswords(245318, 765747, true)
 | 
			
		||||
 | 
			
		||||
	log.Println("Part1: " + strconv.Itoa(countPasswords))
 | 
			
		||||
	log.Println("Part2: " + strconv.Itoa(countAdditionalPasswords))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CountPossiblePasswords(start int, end int, additional bool) int {
 | 
			
		||||
	sum := 0
 | 
			
		||||
	for i := start; i < end; i++ {
 | 
			
		||||
		if MeetPasswordCriteria(i, additional) {
 | 
			
		||||
			sum++
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return sum
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func MeetPasswordCriteria(number int, additional bool) bool {
 | 
			
		||||
 | 
			
		||||
	if CountDigits(number) != 6 {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !AreDigitsNotDecreasing(number) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !HaveDoubleInputs(number) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if additional && !HasOneDouble(number) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func CountDigits(i int) int {
 | 
			
		||||
	count := 0
 | 
			
		||||
	for i != 0 {
 | 
			
		||||
		i /= 10
 | 
			
		||||
		count = count + 1
 | 
			
		||||
	}
 | 
			
		||||
	return count
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AreDigitsNotDecreasing(i int) bool {
 | 
			
		||||
	iStr := strconv.Itoa(i)
 | 
			
		||||
	prevInt := math.MinInt32
 | 
			
		||||
 | 
			
		||||
	for _, a := range iStr {
 | 
			
		||||
		aInt, _ := strconv.Atoi(string(a))
 | 
			
		||||
 | 
			
		||||
		if prevInt > aInt {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		prevInt = aInt
 | 
			
		||||
	}
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HaveDoubleInputs(i int) bool {
 | 
			
		||||
	iStr := strconv.Itoa(i)
 | 
			
		||||
	hasDouble := false
 | 
			
		||||
	for i := 0; i < len(iStr)-1; i++ {
 | 
			
		||||
		if iStr[i] == iStr[i+1] {
 | 
			
		||||
			hasDouble = true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return hasDouble
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HasOneDouble(i int) bool {
 | 
			
		||||
	iStr := strconv.Itoa(i)
 | 
			
		||||
 | 
			
		||||
	for len(iStr) >= 2 {
 | 
			
		||||
		if iStr[0] != iStr[1] {
 | 
			
		||||
			iStr = iStr[1:]
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i := 1
 | 
			
		||||
		for len(iStr) > i && iStr[0] == iStr[i] {
 | 
			
		||||
			i++
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if i == 2 {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(iStr) <= i {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		iStr = iStr[i:]
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										156
									
								
								day4/main_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								day4/main_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,156 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import "testing"
 | 
			
		||||
 | 
			
		||||
func TestCountDigitsPositiveNumber(t *testing.T) {
 | 
			
		||||
	count := CountDigits(237841)
 | 
			
		||||
	solution := 6
 | 
			
		||||
 | 
			
		||||
	if count != solution {
 | 
			
		||||
		t.Errorf("DigitCount was incorrect, got: {%d}, want: {%d}.", count, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCountDigitsNegativeNumber(t *testing.T) {
 | 
			
		||||
	count := CountDigits(-2378541)
 | 
			
		||||
	solution := 7
 | 
			
		||||
 | 
			
		||||
	if count != solution {
 | 
			
		||||
		t.Errorf("DigitCount was incorrect, got: {%d}, want: {%d}.", count, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestAreDigitsNotDecreasingSuccess(t *testing.T) {
 | 
			
		||||
	success := AreDigitsNotDecreasing(1134569)
 | 
			
		||||
	solution := true
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("AreDigitsNotDecreasing was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestAreDigitsNotDecreasingFailure(t *testing.T) {
 | 
			
		||||
	success := AreDigitsNotDecreasing(12246378)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("AreDigitsNotDecreasing was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsSuccess(t *testing.T) {
 | 
			
		||||
	success := HaveDoubleInputs(123445)
 | 
			
		||||
	solution := true
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsFailure(t *testing.T) {
 | 
			
		||||
	success := HaveDoubleInputs(12345)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsSuccessAdditional(t *testing.T) {
 | 
			
		||||
	success := HasOneDouble(114444)
 | 
			
		||||
	solution := true
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsSuccessAdditional2(t *testing.T) {
 | 
			
		||||
	success := HasOneDouble(111444)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsSuccessAdditional3(t *testing.T) {
 | 
			
		||||
	success := HasOneDouble(111114)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsSuccessAdditional4(t *testing.T) {
 | 
			
		||||
	success := HasOneDouble(111111)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestHaveDoubleInputsFailureAdditional(t *testing.T) {
 | 
			
		||||
	success := HasOneDouble(1234555)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("HaveDoubleInputs was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCheckPasswordCriteriaExample1(t *testing.T) {
 | 
			
		||||
	success := MeetPasswordCriteria(111111, false)
 | 
			
		||||
	solution := true
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("PasswordCriteria was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCheckPasswordCriteriaExample2(t *testing.T) {
 | 
			
		||||
	success := MeetPasswordCriteria(223450, false)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("PasswordCriteria was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCheckPasswordCriteriaExample3(t *testing.T) {
 | 
			
		||||
	success := MeetPasswordCriteria(123789, false)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("PasswordCriteria was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCheckPasswordAdditionalCriteriaExample1(t *testing.T) {
 | 
			
		||||
	success := MeetPasswordCriteria(112233, true)
 | 
			
		||||
	solution := true
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("PasswordCriteria was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCheckPasswordAdditionalCriteriaExample2(t *testing.T) {
 | 
			
		||||
	success := MeetPasswordCriteria(123444, true)
 | 
			
		||||
	solution := false
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("PasswordCriteria was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCheckPasswordAdditionalCriteriaExample3(t *testing.T) {
 | 
			
		||||
	success := MeetPasswordCriteria(111122, true)
 | 
			
		||||
	solution := true
 | 
			
		||||
 | 
			
		||||
	if success != solution {
 | 
			
		||||
		t.Errorf("PasswordCriteria was incorrect, got: {%t}, want: {%t}.", success, solution)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user