Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.96 KB | None | 0 0
  1. // VALUES = [3, 1, 5, 8], EXPECTED_SCORE = 167
  2. // VALUES = [ 9, 76, 64, 21, 97, 60 ], EXPECTED_SCORE = 1086136
  3. VALUES = [35, 16, 83, 87, 84, 59, 48, 41, 20, 54], EXPECTED_SCORE = 1849648
  4.  
  5. // maxCoins = maximizeScoreViaSorting
  6. // maxCoins = maximizeScoreViaThrees
  7. maxCoins = maximizeScoreViaRecursion
  8.  
  9. console.log("Score:", maxCoins(VALUES))
  10. console.log(" =", EXPECTED_SCORE + "?")
  11.  
  12. function maximizeScoreViaRecursion(values, leftvalue = 1, rightvalue = 1) {
  13. // console.log(values, leftvalue, rightvalue)
  14.  
  15. score = 0
  16.  
  17. while(values.length >= 3) {
  18. const sortedValues = values.slice().sort((a, b) => b - a)
  19. const spicyValues = sortedValues.slice(0, 3)
  20. const spicyIndexes = spicyValues.map((value) => {
  21. return values.indexOf(value)
  22. }).sort()
  23.  
  24. if(spicyIndexes[0]+1 != spicyIndexes[1]) {
  25. let a = spicyIndexes[0]+1
  26. let b = spicyIndexes[1]
  27. let leftvalue = values[a-1]
  28. let rightvalue = values[b]
  29. let subvalues = values.slice(a, b)
  30. values.splice(a, b- a)
  31. score += maximizeScoreViaRecursion(subvalues, leftvalue, rightvalue)
  32. } else if(spicyIndexes[1]+1 != spicyIndexes[2]) {
  33. let a = spicyIndexes[1]+1
  34. let b = spicyIndexes[2]
  35. let leftvalue = values[a-1]
  36. let rightvalue = values[b]
  37. let subvalues = values.slice(a, b)
  38. values.splice(a, b - a)
  39. score += maximizeScoreViaRecursion(subvalues, leftvalue, rightvalue)
  40. } else {
  41. score += values[spicyIndexes[0]] * values[spicyIndexes[1]] * values[spicyIndexes[2]]
  42. console.log(">", values[spicyIndexes[0]] * values[spicyIndexes[1]] * values[spicyIndexes[2]])
  43. values.splice(spicyIndexes[1], 1)
  44. }
  45. }
  46.  
  47. if(values.length == 2) {
  48. if(values[0] < values[1]) {
  49. score += leftvalue * values[0] * values[1]
  50. console.log(">", leftvalue * values[0] * values[1])
  51. values.splice(0, 1)
  52. } else {
  53. score += values[0] * values[1] * rightvalue
  54. console.log(">", values[0] * values[1] * rightvalue)
  55. values.splice(1, 1)
  56. }
  57. }
  58.  
  59. if(values.length == 1) {
  60. score += leftvalue * values[0] * rightvalue
  61. console.log(">", leftvalue * values[0] * rightvalue)
  62. values.splice(0, 1)
  63. }
  64.  
  65. return score
  66. }
  67.  
  68. function maximizeScoreViaThrees(values) {
  69. function pop(index) {
  70. const value = values[index] * (values[index-1] || 1) * (values[index+1] || 1)
  71. values.splice(index, 1)
  72. return value
  73. }
  74.  
  75. let sum = 0
  76.  
  77. while(values.length > 0) {
  78. const bursts = values.map((value, index) => {
  79. return {
  80. "index": index,
  81. "value": values[index] * (values[index-1] || 1) * (values[index+1] || 1)
  82. }
  83. })
  84.  
  85. bursts.sort((a, b) => {
  86. return a.value - b.value
  87. })
  88.  
  89. console.log(bursts)
  90. const bestBurst = bursts.pop()
  91. console.log(bestBurst)
  92.  
  93. sum += bestBurst.value
  94.  
  95. pop(bestBurst.index)
  96.  
  97. console.log("-----")
  98. }
  99.  
  100. console.log(sum)
  101. return sum
  102. }
  103.  
  104. function maximizeScoreViaSorting(nums) {
  105. let values = nums
  106.  
  107. // values = values.map(function(value) {
  108. // return {value}
  109. // })
  110.  
  111. // const indexes = values.map((value, index) => {
  112. // return {value, index}
  113. // })
  114. //
  115. // indexes.pop()
  116. // indexes.shift()
  117. //
  118. // indexes.sort(function(a, b) {
  119. // return a.value - b.value
  120. // })
  121.  
  122. function pop(index) {
  123. const value = values[index] * (values[index-1] || 1) * (values[index+1] || 1)
  124. values.splice(index, 1)
  125. return value
  126. }
  127.  
  128. // console.log(values)
  129. // console.log(pop(2))
  130. // console.log(values)
  131.  
  132. // console.log(watervalues)
  133. // console.log(values)
  134. // console.log(watervalues === values)
  135.  
  136. let coins = 0
  137. while(values.length > 2) {
  138. let watervalues = values.slice()
  139. watervalues.pop()
  140. watervalues.shift()
  141. const index = watervalues.indexOf(Math.min(...watervalues)) // does not handle dupes sorry
  142. console.log(values)
  143. console.log("Removing", watervalues[index])
  144. coins += pop(index + 1)
  145. console.log(values)
  146. console.log("coins", coins)
  147. console.log("--------")
  148. }
  149.  
  150. if(values.length == 2) {
  151. console.log(values)
  152. coins += pop(0)
  153. console.log(values)
  154. console.log(coins)
  155. console.log("--------")
  156. }
  157.  
  158. if(values.length == 1) {
  159. console.log(values)
  160. coins += pop(0)
  161. console.log(values)
  162. console.log(coins)
  163. console.log("--------")
  164. }
  165.  
  166. console.log("final coins", coins)
  167. return coins
  168. }
  169.  
  170. // function maxCoins(nums) {
  171. // const viaSorted = maxCoinsViaSorted(nums.slice())
  172. // const viaThrees = maxCoinsViaThrees(nums.slice())
  173. // const coins = Math.max(viaSorted, viaThrees)
  174. // console.log(coins)
  175. // return coins
  176. // }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement