Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. # this passes all but Test Case 7
  2. # now let's try to crak the test cases
  3. # ;)
  4.  
  5.  
  6. def distances(pegs):
  7. l = len(pegs) - 1
  8. return [pegs[i+1] - pegs[i] for i in range(l)]
  9.  
  10. def poop(pegs):
  11.  
  12. l = len(pegs) - 1
  13.  
  14. def solve(pegs):
  15. d = distances(pegs)
  16. m = len(d) - 1
  17. sign = 1
  18.  
  19. g = [0 for i in range(l)]
  20.  
  21. # this is what elimination turns out to be
  22. for i in range(m):
  23. sign *= -1
  24. d[i+1] -= d[i]
  25.  
  26. # get our first value
  27. x = d[-1]
  28. g[0] = x/(sign + 0.5)
  29.  
  30. # and the rest of them!
  31. d = distances(pegs)
  32. for i in range(m):
  33. g[i+1] = d[i] - g[i]
  34.  
  35. return g, sign
  36.  
  37. def check(g):
  38. # gears ain't NEGATIVE
  39. for i, x in enumerate(g):
  40. if x <= 0:
  41. # print 'Negative gear:', i, x
  42. return False
  43.  
  44. if g[0] < 1 and abs(g[0] - 1.0) > 0.01:
  45. # print 'Too small'
  46. return False
  47.  
  48. return True
  49.  
  50. def fraction(ans, sign):
  51. if sign == -1:
  52. return [int(round(ans)), 1]
  53.  
  54. elif sign == 1:
  55. # .33333 vs .00001
  56. if abs(ans - round(ans)) < 0.01:
  57. return [int(round(ans)), 1]
  58. else:
  59. return [int(round(3*ans)), 3]
  60.  
  61. gears, sign = solve(pegs)
  62. ans = gears[0]
  63.  
  64. if check(gears):
  65. return fraction(ans, sign)
  66. else:
  67. return [-1, -1]
  68.  
  69. def answer(pegs):
  70. correct_answer = poop(pegs)
  71. return correct_answer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement