Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/csmith/aoc-2019/common"
  5. "github.com/csmith/aoc-2019/intcode"
  6. )
  7. func run(memory []int, startWhite bool) (int, [500][500]bool) {
  8. input := make([]int, len(memory))
  9. copy(input, memory)
  10. vm := intcode.NewVirtualMachine(input)
  11. vm.Input = make(chan int, 1)
  12. vm.Output = make(chan int, 1)
  13. go vm.Run()
  14. var grid [500][500]bool
  15. var painted [500][500]bool
  16. paintCount := 0
  17. x := 250
  18. y := 250
  19. dir := 0
  20. grid[y][x] = startWhite
  21. for {
  22. if grid[y][x] {
  23. vm.Input <- 1
  24. } else {
  25. vm.Input <- 0
  26. }
  27. paint, more := <-vm.Output
  28. if !more {
  29. break
  30. }
  31. turn := <-vm.Output
  32. grid[y][x] = paint == 1
  33. if !painted[y][x] {
  34. paintCount++
  35. painted[y][x] = true
  36. }
  37. if turn == 1 {
  38. dir = (dir + 1) % 4
  39. } else {
  40. dir = (dir + 3) % 4
  41. }
  42. switch dir {
  43. case 0:
  44. y--
  45. case 1:
  46. x++
  47. case 2:
  48. y++
  49. case 3:
  50. x--
  51. }
  52. }
  53. return paintCount, grid
  54. }
  55. func main() {
  56. input := common.ReadCsvAsInts("11/input.txt")
  57. paintCount, _ := run(input, false)
  58. _, grid := run(input, true)
  59. println(paintCount)
  60. for _, line := range grid {
  61. for _, b := range line {
  62. if b {
  63. fmt.Print("█")
  64. } else {
  65. fmt.Print(" ")
  66. }
  67. }
  68. fmt.Println()
  69. }
  70. }