Guest User

Untitled

a guest
Apr 26th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. def head(arr):
  2. return arr[0] if len(arr) > 0 else None
  3.  
  4. def last(arr):
  5. return arr[len(arr) - 1] if len(arr) > 0 else None
  6.  
  7. def init(arr):
  8. return arr[:-1]
  9.  
  10. def tail(arr):
  11. return arr[1:]
  12.  
  13. def take(n, arr):
  14. return arr[:n]
  15.  
  16. def drop(n, arr):
  17. return arr[n:]
  18.  
  19. def reverse(arr):
  20. return list(reversed(arr))
  21.  
  22. ############
  23.  
  24. def byDefault(default, value):
  25. return default if value is None else value
  26.  
  27. def fromIndex(i, arr):
  28. try:
  29. return arr[i]
  30. except:
  31. return None
  32.  
  33. ############
  34.  
  35. def spiral(matrix):
  36. if not matrix:
  37. return []
  38.  
  39. left_column = []
  40. right_column = []
  41. new_matrix = []
  42. for row in init(tail(matrix)): # mid rows
  43. left_column.append(head(row))
  44. right_column.append(last(row))
  45. new_matrix.append(init(tail(row)))
  46.  
  47. return byDefault([], head(matrix)) + \
  48. reverse(right_column) + \
  49. reverse(byDefault([], last(tail(matrix)))) + \
  50. left_column + \
  51. spiral(new_matrix)
  52.  
  53. def operands(arr):
  54. if not arr:
  55. return 0
  56.  
  57. if len(arr) == 1:
  58. return head(arr)
  59.  
  60. [a, b] = take(2, arr)
  61.  
  62. adds = a + b
  63. subs = adds - byDefault(0, fromIndex(2, arr))
  64. mult = subs * byDefault(1, fromIndex(3, arr))
  65.  
  66. return operands([mult] + drop(4, arr))
  67.  
  68. ############
  69.  
  70. matrix = [
  71. [5,4,7],
  72. [1,2,3],
  73. [3,2,1],
  74. ]
  75.  
  76. print(operands(spiral(matrix)) == 14)
Add Comment
Please, Sign In to add comment