builtins.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. import sys as _sys
  2. def print(*args, sep=' ', end='\n'):
  3. s = sep.join([str(i) for i in args])
  4. _sys.stdout.write(s + end)
  5. def round(x, ndigits=0):
  6. assert ndigits >= 0
  7. if ndigits == 0:
  8. return int(x + 0.5) if x >= 0 else int(x - 0.5)
  9. if x >= 0:
  10. return int(x * 10**ndigits + 0.5) / 10**ndigits
  11. else:
  12. return int(x * 10**ndigits - 0.5) / 10**ndigits
  13. def abs(x):
  14. return -x if x < 0 else x
  15. def max(a, b):
  16. return a if a > b else b
  17. def min(a, b):
  18. return a if a < b else b
  19. def all(iterable):
  20. for i in iterable:
  21. if not i:
  22. return False
  23. return True
  24. def any(iterable):
  25. for i in iterable:
  26. if i:
  27. return True
  28. return False
  29. def enumerate(iterable, start=0):
  30. n = start
  31. for elem in iterable:
  32. yield n, elem
  33. n += 1
  34. def sum(iterable):
  35. res = 0
  36. for i in iterable:
  37. res += i
  38. return res
  39. def map(f, iterable):
  40. for i in iterable:
  41. yield f(i)
  42. def filter(f, iterable):
  43. for i in iterable:
  44. if f(i):
  45. yield i
  46. def zip(a, b):
  47. for i in range(min(len(a), len(b))):
  48. yield (a[i], b[i])
  49. def reversed(iterable):
  50. a = list(iterable)
  51. a.reverse()
  52. return a
  53. def sorted(iterable, reverse=False):
  54. a = list(iterable)
  55. a.sort(reverse=reverse)
  56. return a
  57. ##### str #####
  58. str.__mul__ = lambda self, n: ''.join([self for _ in range(n)])
  59. def str@split(self, sep):
  60. if sep == "":
  61. return list(self)
  62. res = []
  63. i = 0
  64. while i < len(self):
  65. if self[i:i+len(sep)] == sep:
  66. res.append(self[:i])
  67. self = self[i+len(sep):]
  68. i = 0
  69. else:
  70. i += 1
  71. res.append(self)
  72. return res
  73. def str@format(self, *args):
  74. if '{}' in self:
  75. for i in range(len(args)):
  76. self = self.replace('{}', str(args[i]), 1)
  77. else:
  78. for i in range(len(args)):
  79. self = self.replace('{'+str(i)+'}', str(args[i]))
  80. return self
  81. def str@strip(self, chars=None):
  82. chars = chars or ' \t\n\r'
  83. i = 0
  84. while i < len(self) and self[i] in chars:
  85. i += 1
  86. j = len(self) - 1
  87. while j >= 0 and self[j] in chars:
  88. j -= 1
  89. return self[i:j+1]
  90. ##### list #####
  91. list.__new__ = lambda iterable: [x for x in iterable]
  92. list.__repr__ = lambda self: '[' + ', '.join([repr(i) for i in self]) + ']'
  93. tuple.__repr__ = lambda self: '(' + ', '.join([repr(i) for i in self]) + ')'
  94. list.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']'
  95. tuple.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']'
  96. def __qsort(a: list, L: int, R: int):
  97. if L >= R: return;
  98. mid = a[(R+L)//2];
  99. i, j = L, R
  100. while i<=j:
  101. while a[i]<mid: i+=1
  102. while a[j]>mid: j-=1
  103. if i<=j:
  104. a[i], a[j] = a[j], a[i]
  105. i+=1
  106. j-=1
  107. __qsort(a, L, j)
  108. __qsort(a, i, R)
  109. def list@sort(self, reverse=False):
  110. __qsort(self, 0, len(self)-1)
  111. if reverse:
  112. self.reverse()
  113. def list@remove(self, value):
  114. for i in range(len(self)):
  115. if self[i] == value:
  116. del self[i]
  117. return
  118. value = repr(value)
  119. raise ValueError(f'{value} is not in list')
  120. def list@index(self, value):
  121. for i in range(len(self)):
  122. if self[i] == value:
  123. return i
  124. value = repr(value)
  125. raise ValueError(f'{value} is not in list')
  126. def list@pop(self, i=-1):
  127. res = self[i]
  128. del self[i]
  129. return res
  130. def list@__eq__(self, other):
  131. if type(self) is not type(other):
  132. return False
  133. if len(self) != len(other):
  134. return False
  135. for i in range(len(self)):
  136. if self[i] != other[i]:
  137. return False
  138. return True
  139. tuple.__eq__ = list.__eq__
  140. list.__ne__ = lambda self, other: not self.__eq__(other)
  141. tuple.__ne__ = lambda self, other: not self.__eq__(other)
  142. def list@count(self, x):
  143. res = 0
  144. for i in self:
  145. if i == x:
  146. res += 1
  147. return res
  148. tuple.count = list.count
  149. def list@__contains__(self, item):
  150. for i in self:
  151. if i == item:
  152. return True
  153. return False
  154. tuple.__contains__ = list.__contains__
  155. class property:
  156. def __init__(self, fget, fset=None):
  157. self.fget = fget
  158. self.fset = fset
  159. if hasattr(fget, '__doc__'):
  160. self.__doc__ = fget.__doc__
  161. def __get__(self, obj):
  162. return self.fget(obj)
  163. def __set__(self, obj, value):
  164. if self.fset is None:
  165. raise AttributeError("readonly property")
  166. self.fset(obj, value)
  167. class staticmethod:
  168. def __init__(self, f):
  169. self.f = f
  170. def __get__(self, obj):
  171. return self.f
  172. def __call__(self, *args):
  173. return self.f(*args)
  174. def type@__repr__(self):
  175. return "<class '" + self.__name__ + "'>"
  176. def help(obj):
  177. if hasattr(obj, '__func__'):
  178. obj = obj.__func__
  179. if hasattr(obj, '__doc__'):
  180. print(obj.__doc__)
  181. else:
  182. print("No docstring found")