Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. //
  2. // Written By Joel Simonoff
  3. // April 24, 2017
  4. //
  5.  
  6. package main
  7.  
  8. import (
  9. "fmt"
  10. "math/rand"
  11. "time"
  12. )
  13.  
  14. func main() {
  15. failCount := 0
  16. numRuns := 100
  17. numVals := 67
  18.  
  19. for i := 0; i < numRuns; i++ {
  20. s := generateData(numVals)
  21. fmt.Printf("Run 1\nBefore: %v\n\n", s)
  22. rgb(&s)
  23. if validateResult(s) {
  24. fmt.Printf("After: %v\nTest Passed!\n\n", s)
  25. } else {
  26. failCount++
  27. fmt.Printf("TEST FAILED 😐 After:%v\n\n", s)
  28. }
  29. }
  30.  
  31. fmt.Printf("Summary\nNum Fails: %v,\nNum Runs: %v,\nNum Vals Per Run: %v\n", failCount, numRuns, numVals)
  32. }
  33.  
  34. //
  35. // r = 0, g = 1, b = 2
  36. //
  37. func rgb(p *([]int)) {
  38. s := *p
  39. g := -1
  40. b := -1
  41.  
  42. for i := range s {
  43. if s[i] == 2 {
  44. handleBlue(s, i, &b)
  45. continue
  46. }
  47. if s[i] == 1 {
  48. handleGreen(s, i, &b, &g)
  49. continue
  50. }
  51.  
  52. handleRed(s, i, &b, &g)
  53. }
  54.  
  55. *p = s
  56. }
  57.  
  58. func handleBlue(s []int, i int, b *int) {
  59. checkNotSetAndReplace(b, i)
  60. }
  61.  
  62. func handleGreen(s []int, i int, b, g *int) {
  63. if *b != -1 {
  64. swap(s, i, *b)
  65.  
  66. *b++
  67.  
  68. checkNotSetAndReplace(g, *b-1)
  69.  
  70. return
  71. }
  72.  
  73. checkNotSetAndReplace(g, i)
  74. }
  75.  
  76. func handleRed(s []int, i int, b, g *int) {
  77. if *g != -1 {
  78. swap(s, i, *g)
  79.  
  80. *g++
  81. }
  82.  
  83. if *b != -1 {
  84. swap(s, i, *b)
  85.  
  86. *b++
  87. }
  88. }
  89.  
  90. func validateResult(s []int) bool {
  91. for i := 0; i < len(s)-1; i++ {
  92. if s[i] > s[i+1] {
  93. return false
  94. }
  95. }
  96.  
  97. return true
  98. }
  99.  
  100. // checkNotSetAndReplace replaces the value at location v with i if *v == -1.
  101. func checkNotSetAndReplace(v *int, i int) {
  102. if *v == -1 {
  103. *v = i
  104. }
  105. }
  106.  
  107. func swap(s []int, l int, r int) {
  108. s[l], s[r] = s[r], s[l]
  109. }
  110.  
  111. func generateData(n int) []int {
  112. rand.Seed(time.Now().UnixNano())
  113.  
  114. s := make([]int, n)
  115.  
  116. for i := 0; i < n; i++ {
  117. s[i] = rand.Intn(3)
  118. }
  119.  
  120. return s
  121. }
  122.  
  123. func printSlice(s []int) {
  124. for _, i := range s {
  125. fmt.Print(i)
  126. }
  127.  
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement