blocks.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package solver
  2. import (
  3. "encoding/csv"
  4. "io"
  5. "log"
  6. "os"
  7. "strconv"
  8. )
  9. func (solver *Solver) load_blocks() {
  10. var blocks []int
  11. file, err := os.Open("blocks.csv")
  12. if err != nil {
  13. panic(err)
  14. }
  15. defer file.Close()
  16. r := csv.NewReader(file)
  17. for {
  18. record, err := r.Read()
  19. if err == io.EOF {
  20. break
  21. }
  22. if err != nil {
  23. log.Fatal(err)
  24. }
  25. block, _ := strconv.Atoi(record[0])
  26. blocks = append(blocks, block)
  27. }
  28. solver.blocks = blocks
  29. }
  30. func (solver *Solver) generate_blocks() []int {
  31. var blocks []int
  32. decvals := [9]int{49, 50, 51, 52, 53, 54, 55, 56, 57}
  33. for counter := 123456789; counter <= 987654321; counter++ {
  34. // Convert number to string ([]byte)
  35. digits := strconv.Itoa(counter)
  36. // Check if every number is only represented only once
  37. var valid bool
  38. valid = true
  39. for decval := range decvals {
  40. var count int
  41. for digit := range digits {
  42. if digits[digit] == byte(decvals[decval]) {
  43. count = count + 1
  44. }
  45. }
  46. if count != 1 {
  47. valid = false
  48. }
  49. }
  50. if valid {
  51. blocks = append(blocks, counter)
  52. }
  53. }
  54. return blocks
  55. }