package main

import (
	"flag"
	"fmt"
	"os"
	"strconv"
)

func CheckPassword1(password int) bool {
	digits := strconv.Itoa(password)
	last := rune(0)
	dup := false
	for _, c := range digits {
		if c == last {
			dup = true
		}
		if c < last {
			return false
		}
		last = c
	}
	return dup
}

func CheckPassword2(password int) bool {
	digits := strconv.Itoa(password)
	last := rune(0)
	dups := make(map[rune]int)
	for _, c := range digits {
		dups[c]++
		if c < last {
			return false
		}
		last = c
	}
	for _, d := range dups {
		if d == 2 {
			return true
		}
	}
	return false
}

func main() {
	var start, end int
	flag.IntVar(&start, "start", 0, "start of range")
	flag.IntVar(&end, "end", 0, "end of range")
	flag.Parse()

	if start == 0 || end == 0 {
		flag.PrintDefaults()
		os.Exit(-1)
	}

	c1 := 0
	c2 := 0
	for i := start; i <= end; i++ {
		if CheckPassword1(i) {
			c1++
		}
		if CheckPassword2(i) {
			c2++
		}
	}

	fmt.Printf("c1: %d, c2: %d\n", c1, c2)
}