✨ 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