Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.95 KB | None | 0 0
  1. //: ## version that only accepts positive values
  2. //:
  3. //: This version follows the instructions of only working for positive values of sum and product
  4.  
  5. func sumAndProduct(sum: Int, product: Int) -> [Int] {
  6. for x in 1...sum/2 {
  7. let y = sum - x
  8. if x * y == product {
  9. return [x, y]
  10. }
  11. }
  12. return []
  13. }
  14.  
  15. sumAndProduct(sum: 6, product: 9) // [3, 3]
  16. sumAndProduct(sum: 21, product: 108) // [9, 12]
  17. sumAndProduct(sum: 10, product: 25) // [5, 5]
  18. sumAndProduct(sum: 20, product: 100) // [10, 10]
  19. sumAndProduct(sum: 101, product: 100) // [1, 100]
  20. sumAndProduct(sum: 67, product: 3) // []
  21.  
  22. //:-------------------------------------------------------
  23. //:
  24. //: Everything below was added after the deadline passed
  25. //:
  26. //: ## version for any int values (not just positive)
  27.  
  28. func sumAndProductAny(sum: Int, product: Int) -> [Int] {
  29. var x = sum / 2
  30. var y = sum - x
  31.  
  32. while x * y >= product {
  33. if x * y == product {
  34. if x > y {
  35. return [y, x]
  36. }
  37. return [x, y]
  38. }
  39. x -= 1
  40. y += 1
  41. }
  42. return []
  43. }
  44.  
  45. sumAndProductAny(sum: 8, product: -20) // -2, 10
  46. sumAndProductAny(sum: -6, product: 9) // -3, -3
  47. sumAndProductAny(sum: -8, product: -20) // -10, 2
  48. sumAndProductAny(sum: 5, product: 0) // 0, 5
  49. sumAndProductAny(sum: 2, product: 1) // 1, 1
  50. sumAndProductAny(sum: -2, product: 1) // -1, -1
  51. sumAndProductAny(sum: 0, product: 25) // []
  52. sumAndProductAny(sum: 0, product: -25) // -5, 5
  53. sumAndProductAny(sum: 6, product: 9) // 3, 3
  54. sumAndProductAny(sum: 21, product: 108) // 9, 12
  55. sumAndProductAny(sum: 10, product: 25) // 5, 5
  56. sumAndProductAny(sum: 20, product: 100) // 10, 10
  57. sumAndProductAny(sum: 101, product: 100) // 1, 100
  58. sumAndProductAny(sum: 23, product: 60) // 3, 20
  59. sumAndProductAny(sum: 67, product: 3) // []
  60. sumAndProductAny(sum: 1, product: 2) // []
  61. sumAndProductAny(sum: -2, product: 20) // []
  62. sumAndProductAny(sum: 2, product: -20) // []
  63. sumAndProductAny(sum: -32, product: -42) // []
  64.  
  65. //: ## Messy version I made along the way
  66. //:
  67. //: The following version of `sumAndProductAny()` was made before I made the much cleaner version above.
  68.  
  69. func sumAndProductAnyMessy(sum: Int, product: Int) -> [Int] {
  70. if abs(sum) == 1 && product != 0 { return [] }
  71. if sum > 0 {
  72. if product > 0 { // sum pos, prod pos
  73. for x in 1 ... (sum / 2) {
  74. let y = sum - x
  75. if x * y == product {
  76. return [x, y]
  77. }
  78. }
  79. } else if product == 0 { // sum pos, prod 0
  80. return [0, sum]
  81. } else if product < 0 { // sum pos, prod neg
  82. for x in ((-sum / 2) ... -1) {
  83. let y = sum - x
  84. if x * y == product {
  85. return [x, y]
  86. }
  87. }
  88. }
  89. } else if sum == 0 {
  90. // // sum 0, prod pos -> []
  91. if product == 0 { // sum 0, prod 0
  92. return [0,0]
  93. } else if product < 0 { // sum 0, prod neg
  94. var x = -1, y = 1
  95. while x * y >= product {
  96. if x * y == product {
  97. return [x,y]
  98. }
  99. x -= 1
  100. y += 1
  101. }
  102. }
  103. } else if sum < 0 {
  104. if product > 0 { // sum neg, prod pos
  105. let absSum = -sum
  106. for x in 1 ... (absSum / 2) {
  107. let y = absSum - x
  108. if x * y == product {
  109. return [-x, -y]
  110. }
  111. }
  112. } else if product == 0 { // sum neg, prod 0
  113. return [sum, 0]
  114. } else { // sum neg, prod neg
  115. let absSum = -sum
  116. for x in 1 ... (absSum / 2) {
  117. let y = -1 * (sum - x)
  118. if -x * y == product {
  119. return [-y, x]
  120. }
  121. }
  122. }
  123. }
  124. return []
  125. }
  126.  
  127. sumAndProductAnyMessy(sum: 8, product: -20) // -2, 10
  128. sumAndProductAnyMessy(sum: -6, product: 9) // -3, -3
  129. sumAndProductAnyMessy(sum: -8, product: -20) // -10, 2
  130. sumAndProductAnyMessy(sum: 5, product: 0) // 0, 5
  131. sumAndProductAnyMessy(sum: 2, product: 1) // 1, 1
  132. sumAndProductAnyMessy(sum: -2, product: 1) // -1, -1
  133. sumAndProductAnyMessy(sum: 0, product: 25) // []
  134. sumAndProductAnyMessy(sum: 0, product: -25) // -5, 5
  135. sumAndProductAnyMessy(sum: 6, product: 9) // 3, 3
  136. sumAndProductAnyMessy(sum: 21, product: 108) // 9, 12
  137. sumAndProductAnyMessy(sum: 10, product: 25) // 5, 5
  138. sumAndProductAnyMessy(sum: 20, product: 100) // 10, 10
  139. sumAndProductAnyMessy(sum: 101, product: 100) // 1, 100
  140. sumAndProductAnyMessy(sum: 67, product: 3) // []
  141. sumAndProductAnyMessy(sum: 1, product: 2) // []
  142. sumAndProductAnyMessy(sum: -2, product: 20) // []
  143. sumAndProductAnyMessy(sum: 2, product: -20) // []
  144. sumAndProductAnyMessy(sum: -32, product: -42) // []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement