builtins.py 4.4 KB

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