builtins.py 4.2 KB

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