Created
April 4, 2020 14:01
-
-
Save alxfv/4e1f46b57bd720f823ca0fd987a1f4f4 to your computer and use it in GitHub Desktop.
PyPy2 Python Competitive Template: Fast IO + unittest
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# <editor-fold desc="Fast IO"> | |
# !/usr/bin/env python | |
from __future__ import division, print_function | |
import os | |
import random | |
import sys | |
from io import BytesIO, IOBase | |
if sys.version_info[0] < 3: | |
from __builtin__ import xrange as range | |
from future_builtins import ascii, filter, hex, map, oct, zip | |
BUFFER_SIZE = 8192 | |
DBG = os.environ.get('DBG') == '1' | |
class FastIO(IOBase): | |
newlines = 0 | |
def __init__(self, file): | |
self._fd = file.fileno() | |
self.buffer = BytesIO() | |
self.writable = 'x' in file.mode or 'r' not in file.mode | |
self.write = self.buffer.write if self.writable else None | |
def read(self): | |
while True: | |
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFFER_SIZE)) | |
if not b: | |
break | |
ptr = self.buffer.tell() | |
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr) | |
self.newlines = 0 | |
return self.buffer.read() | |
def readline(self): | |
while self.newlines == 0: | |
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFFER_SIZE)) | |
self.newlines = b.count(b'\n') + (not b) | |
ptr = self.buffer.tell() | |
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr) | |
self.newlines -= 1 | |
return self.buffer.readline() | |
def flush(self): | |
if self.writable: | |
os.write(self._fd, self.buffer.getvalue()) | |
self.buffer.truncate(0), self.buffer.seek(0) | |
class IOWrapper(IOBase): | |
def __init__(self, file): | |
self.buffer = FastIO(file) | |
self.flush = self.buffer.flush | |
self.writable = self.buffer.writable | |
self.write = lambda s: self.buffer.write(s.encode('ascii')) | |
self.read = lambda: self.buffer.read().decode('ascii') | |
self.readline = lambda: self.buffer.readline().decode('ascii') | |
def print(*args, **kwargs): | |
"""Prints the values to a stream, or to sys.stdout by default.""" | |
sep, file = kwargs.pop('sep', ' '), kwargs.pop('file', sys.stdout) | |
at_start = True | |
for x in args: | |
if not at_start: | |
file.write(sep) | |
file.write(str(x)) | |
at_start = False | |
file.write(kwargs.pop('end', '\n')) | |
if kwargs.pop('flush', False): | |
file.flush() | |
if sys.version_info[0] < 3: | |
sys.stdin, sys.stdout = FastIO(sys.stdin), FastIO(sys.stdout) | |
else: | |
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout) | |
def str_to_matrix(m, n, s): | |
a = [] | |
for line in s.splitlines(): | |
a.append(list(map(int, line.split()))) | |
return a | |
input = lambda: sys.stdin.readline() | |
cin_str = input | |
def cin_int_list(): | |
return [int(x) for x in sys.stdin.readline().split()] | |
def cin_int_iter(): | |
return (int(x) for x in sys.stdin.readline().split()) | |
def cin_int(): | |
return int(input()) | |
def cout_int_iter(a): | |
print(' '.join(map(str, a))) | |
def iota(n, start=0): | |
return list(range(start, n)) | |
def cin_digits_list(): | |
return [ord(x) - ord('0') for x in input()] | |
# </editor-fold> | |
def solve(*args): | |
pass | |
def main(): | |
pass | |
if __name__ == '__main__': | |
if DBG: | |
import unittest | |
class TestCase(unittest.TestCase): | |
pass | |
unittest.main() | |
exit() | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment