misc2.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. # Сортировка строки. В каждом слове содержится число.
  2. # "is2 Thi1s T4est 3a" --> "Thi1s is2 3a T4est"
  3. # "4of Fo1r pe6ople g3ood th5e the2" --> "Fo1r the2 g3ood 4of th5e pe6ople"
  4. from msilib import sequence
  5. from operator import itemgetter
  6. from numpy import block
  7. def order(sentence):
  8. my_list = sentence.split(' ')
  9. new_list = []
  10. print(my_list)
  11. for i in range(len(my_list)):
  12. for j in range(len(my_list)):
  13. if my_list[j].rfind(str(i+1)) != -1:
  14. new_list.append(my_list[j])
  15. return (' '.join(new_list))
  16. #
  17. # def order(sentence):
  18. # return " ".join(sorted(sentence.split(), key=lambda x: int(filter(str.isdigit, x))))
  19. #
  20. # def order(words):
  21. # return ' '.join(sorted(words.split(), key=lambda w:sorted(w)))
  22. # print(order("is2 Thi1s T4est 3a"))
  23. # ------------------------------------------------------------------------------- #
  24. #
  25. def find_even_index(arr):
  26. sum_left = 0
  27. sum_right = 0
  28. sum = []
  29. for i in range(len(arr)):
  30. for j in range(i):
  31. sum_left += arr[j]
  32. for k in range(len(arr) - 1,i ,-1):
  33. sum_right += arr[k]
  34. if sum_left == sum_right:
  35. sum.append(i)
  36. # print(f"Sum let: {sum_left} and sun right: {sum_right}")
  37. sum_left = sum_right = 0
  38. if len(sum) == 0:
  39. return -1
  40. else:
  41. sum.sort()
  42. return(sum[0])
  43. '''
  44. # Лучшее решение
  45. def find_even_index(arr):
  46. for i in range(len(arr)):
  47. if sum(arr[:i]) == sum(arr[i+1:]):
  48. return i
  49. return -1
  50. '''
  51. # print(find_even_index([1,2,3,4,3,2,1]))
  52. # print(find_even_index([1,2,3,4,5,6]))
  53. # ------------------------------------------------------------------------------- #
  54. # Задачка на работу с boxplot
  55. # Пока не завершил.
  56. class StatisticalSummary(object):
  57. BOXPLOT = 0
  58. BOX_AND_WHISKER = 1
  59. BOX_AND_DECILE_WHISKER = 2
  60. TUKEY_BOX_AND_WHISKER = 3
  61. def __init__(self, seq):
  62. self.seq = seq
  63. self.le = 0
  64. self.eu = 0
  65. self.median = 0
  66. self.q1 = 0
  67. self.q3 = 0
  68. def boxplot(self, plot=BOXPLOT, precision=None):
  69. result = []
  70. temp_list = []
  71. number = 0
  72. if type(self.seq[0]) == tuple:
  73. print("Пока не обрабатываем картежи")
  74. else:
  75. temp_list = self.clear_list(self.seq)
  76. temp_list.sort()
  77. self.calculation(temp_list)
  78. result.append(('Sample', number))
  79. return result
  80. def calculation(self, data):
  81. self.le = min(data)
  82. self.eu = max(data)
  83. self.median = self.calculate_median(data)
  84. self.calculate_quartile(data)
  85. def clear_list(self, data):
  86. cleared_list = []
  87. for i in data:
  88. if type(i) == int or type(i) == float:
  89. cleared_list.append(i)
  90. return cleared_list
  91. def calculate_median(self, data):
  92. data_len = len(data)
  93. if data_len%2 == 0:
  94. return ((data[int(data_len/2) - 1] + data[int(data_len/2)]))/2
  95. else:
  96. return data[data_len//2]
  97. def calculate_quartile(self, data):
  98. data_len = len(data)
  99. if data_len%4 == 0:
  100. index = int(data_len/4)
  101. q1 = (data[index] - data[index - 1])*0.25 + data[index - 1]
  102. index = int(data_len/4*3)
  103. q3 = (data[index] - data[index - 1])*0.75 + data[index - 1]
  104. print(data)
  105. print(q1)
  106. print(q3)
  107. return q1, q3
  108. # data = list(range(1, 33)) + list(range(12, 21)) + list(range(12, 21)) + list(range(12, 21)) + [16]
  109. # d1 = list(range(1, 33)) + list(range(12, 21)) + list(range(12, 21)) + list(range(12, 21)) + [16]
  110. # print(data)
  111. # d1 = range(1, 33) + range(12, 21) + range(12, 21) + range(12, 21) + [16]
  112. # d2 = [d - 2 for d in d1[:len(data)//2]] + [d + 2 for d in d1[len(data)//2:]]
  113. # data2 = [("A", n) for n in d1] + [("B", n) for n in d2]
  114. # print(data2)
  115. # print(type(data2))
  116. # print(d2)
  117. # test_list = [1, 2, 5, 2, 3, 'asdfasd', 2, 3, 12, 45, 3, 6, 25, 54, 32, 12, 14, 2]
  118. # summary1 = StatisticalSummary(test_list)
  119. # summary1.boxplot()
  120. # ------------------------------------------------------------------------------- #
  121. def is_valid_walk(walk):
  122. horizontl = 0
  123. vertical = 0
  124. for i in walk:
  125. if i == 'n':
  126. vertical += 1
  127. elif i == 's':
  128. vertical -= 1
  129. elif i == 'w':
  130. horizontl -= 1
  131. elif i == 'e':
  132. horizontl += 1
  133. return vertical == 0 and horizontl == 0 and len(walk) == 10
  134. # Решение через метод count
  135. # def isValidWalk(walk):
  136. # return len(walk) == 10 and walk.count('n') == walk.count('s') and walk.count('e') == walk.count('w')
  137. # print(is_valid_walk(['w','e','w','e','w','e','w','e','w','e','w','e']))
  138. # ------------------------------------------------------------------------------- #
  139. # На входе одно число из массив четное или нечетно. Нужно его найти и вернуть.
  140. def find_outlier(integers):
  141. types = []
  142. def is_even(value):
  143. return value%2 == 0
  144. for i in integers:
  145. types.append(is_even(i))
  146. if types.count(True) > types.count(False):
  147. return integers[types.index(False)]
  148. else:
  149. return integers[types.index(True)]
  150. # Более короткое решение
  151. # def find_outlier(int):
  152. # odds = [x for x in int if x%2!=0]
  153. # evens= [x for x in int if x%2==0]
  154. # return odds[0] if len(odds)<len(evens) else evens[0]
  155. # print(find_outlier([2, 4, 0, 100, 4, 11, 2602, 36]))
  156. # ------------------------------------------------------------------------------- #
  157. # В переданной строке должно быть только 4 или 6 цифр
  158. def validate_pin(pin):
  159. return len(pin) in (4, 6) and pin.isdigit()
  160. # print(validate_pin('-234'))
  161. # ------------------------------------------------------------------------------- #
  162. # Преобразует список в десятичное число
  163. def binary_array_to_number(arr):
  164. return int(''.join(str(_) for _ in arr), 2)
  165. # Решение через функцию map (Применяет функцию str к каждому элементу итерируемого объекта)
  166. # def binary_array_to_number(arr):
  167. # return int("".join(map(str, arr)), 2)
  168. # print(binary_array_to_number([1,0,0,1]))
  169. # ------------------------------------------------------------------------------- #
  170. def litres(time):
  171. return int(time*0.5//1)
  172. # print(litres(2))
  173. # ------------------------------------------------------------------------------- #
  174. # Нужно вернуть n числе последовательности Трибоначчи
  175. '''
  176. def tribonacci(signature, n):
  177. sequence = []
  178. if n < 3:
  179. for i in range(n):
  180. sequence.append(signature[i])
  181. return sequence
  182. else:
  183. sequence.extend(signature)
  184. for i in range(3, n):
  185. sequence.append(sequence[i-3] + sequence[i-2] + sequence[i-1])
  186. return(sequence)
  187. '''
  188. # Хорошее решение через срез
  189. def tribonacci(signature, n):
  190. res = signature[:n]
  191. print(res)
  192. for i in range(n - 3):
  193. res.append(sum(res[-3:]))
  194. return res
  195. # print(tribonacci([0.5, 0.5, 0.5], 1))