From 6ebdfde50c636d2b359a17e15167f9d52a7edb74 Mon Sep 17 00:00:00 2001 From: Fedor Lyanguzov Date: Mon, 2 Dec 2024 21:38:53 +0300 Subject: [PATCH] 02.2 python fast, O(N*M) --- 02/02.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 72 insertions(+), 15 deletions(-) diff --git a/02/02.py b/02/02.py index 5bd303a..d7a8a1d 100644 --- a/02/02.py +++ b/02/02.py @@ -1,31 +1,88 @@ - data = open('input.txt').read().strip().split("\n") data = [list(map(int, x.strip().split(" "))) for x in data] -less = lambda a, b: ab +def less(a, b): + return ab q = lambda a, b: abs(a-b)<=3 -def safe1(l): - if l[0]l[1]: - f = more - else: - return False +def safe1(l, f=None): + if not f: + if l[0]l[1]: + f = more + else: + return False return all(f(a, b) and q(a, b) for a, b in zip(l, l[1:])) -print(sum(1 for x in data if safe1(x))) def safe2(l): - r = False for i in range(len(l)): t = l[:] del t[i] - r = r or safe1(t) - return r + if safe1(t): + return True + return False -print(sum(1 for x in data if safe2(x))) +def safe3(l): + cl = 0 + cm = 0 + cq = 0 + il, im, iq = None, None, None + for i, (a, b) in enumerate(zip(l, l[1:]), 1): + if a>=b: + cl += 1 + if not il: + il = i + if a<=b: + cm += 1 + if not im: + im = i + if not q(a, b): + cq += 1 + if not iq: + iq = i + if cq==0 and (cm==0 or cl==0): + return True + if cq>2 or cl>2 and cm>2: + return False + if cq==2: + del l[iq] + return safe1(l) + if iq: + t = l[:] + del t[iq-1] + del l[iq] + return safe1(l) or safe1(t) + if 03 for x in data) +except: + pass + +if __name__ == "__main__": + print(sum(1 for x in data if safe1(x))) + print(sum(1 for x in data if safe3(x)))