Problem p03488 (python)

Fixed submission:
from sys import exit
from collections import defaultdict
import itertools
# dic = defaultdict(int)
# N = int(input())
# a = [int(input()) for _ in range(N)]
S = str(input())
x,y = [int(n) for n in input().split()]

dx = []
dy = []
X = True
tmp = 0


S = [len(s) for s in S.split("T")]
dx = S[0::2]
dy = S[1::2]
x -= dx[0]
del dx[0]

def check(d, p):
    memo = set([0])
    for t in d:
        memo = {a+b for a,b in itertools.product(memo, [-t, t])}
    return (p in memo)


print("Yes" if check(dx,x) and check(dy,y) else "No")

Buggy submission (verdict: Runtime Error):
from sys import exit
 
S = str(input())#["F","F","T","F"]
Gx, Gy = [int(n) for n in input().split()]#[4,4]
Xds = []
Yds = []
X = True
L = len(S)
for s in S.split("T"):
    if X:
        Xds.append(len(s))
    else:
        Yds.append(len(s))
    X = not X
# print(Xds)
# print(Yds)
if(len(Xds) != 0):
    memox = [set([Xds[0]])] + [0]*(len(Xds)-1)
else:
    memox = [0]
for i in range(1,len(Xds)):
    can = set()
    for x in memox[i-1]:
        can.add(x+Xds[i])
        can.add(x-Xds[i])
    memox[i]=can
 
if(len(Yds) != 0):
    memoy = [set([Yds[0],-Yds[0]])] + [0]*(len(Yds)-1)
else:
    memoy = [0]
for i in range(1,len(Yds)):
    can = set()
    for y in memoy[i-1]:
        can.add(y+Yds[i])
        can.add(y-Yds[i])
    memoy[i]=can
if Gx in memox[-1] and Gy in memoy[-1]:
    print("Yes")
else:
    print("No")

Buggy submission (verdict: Runtime Error):
from sys import exit

S = str(input())#["F","F","T","F"]
Gx, Gy = [int(n) for n in input().split()]#[4,4]
Xds = []
Yds = []
X = True
L = len(S)
for s in S.split("T"):
    if X:
        Xds.append(len(s))
    else:
        Yds.append(len(s))
    X = not X
# print(Xds)
# print(Yds)
if(len(Xds) != 0):
    memox = [set([Xds[0]])] + [0]*(len(Xds)-1)
else:
    memox = [0]
for i in range(1,len(Xds)):
    can = set()
    for x in memox[i-1]:
        can.add(x+Xds[i])
        can.add(x-Xds[i])
    memox[i]=can

if(len(Yds) != 0):
    memoy = [set([Yds[0],-Yds[0]])] + [0]*(len(Yds)-1)
else:
    memoy = [0]
for i in range(1,len(Yds)):
    can = set()
    for y in memoy[i-1]:
        can.add(y+Yds[i])
        can.add(y-Yds[i])
    memoy[i]=can
if Gx in memox[-1] and Gy in memoy[-1]:
    print("Yes")
else:
    print("No")

Buggy submission (verdict: Runtime Error):
from sys import exit

S = str(input())#["F","F","T","F"]
Gx, Gy = [int(n) for n in input().split()]#[4,4]
Xds = []
Yds = []
X = True
L = len(S)
for s in S.split("T"):
    if X:
        Xds.append(len(s))
    else:
        Yds.append(len(s))
    X = not X
# print(Xds)
# print(Yds)
memox = [[False for _ in range(2*L)] for __ in range(len(Xds))]
memoy = [[False for _ in range(2*L)] for __ in range(len(Yds))]

def move(current, i, Ds,memo):
    if i == len(Ds): return
    pm = current+Ds[i]
    memo[i][pm] = True
    move(pm, i+1,Ds,memo)
    nm = current-Ds[i]
    memo[i][nm] = True
    move(nm, i+1,Ds,memo)
memox[0][Xds[0]] = True
move(Xds[0],1, Xds,memox)
move(0,0, Yds,memoy)
# print(Xds)
# print(Yds)
# print(memox)
# print(memoy)
if not (memox != [] or memoy != []):
    print("Yes" if memox[len(Xds)-1][Gx] and memoy[len(Yds)-1][Gy] else "No")
elif (memox == [] and memoy != []):
    print("Yes" if 0==Gx and memoy[len(Yds)-1][Gy] else "No")
else:
    print("Yes" if memox[len(Xds)-1][Gx] and 0==Gy else "No")

Buggy submission (verdict: Runtime Error):
from sys import exit

S = str(input())#["F","F","T","F"]
Gx, Gy = [int(n) for n in input().split()]#[4,4]
Xds = []
Yds = []
X = True
L = len(S)
for s in S.split("T"):
    if X:
        Xds.append(len(s))
    else:
        Yds.append(len(s))
    X = not X
# print(Xds)
# print(Yds)
memox = [[False for _ in range(2*L)] for __ in range(len(Xds))]
memoy = [[False for _ in range(2*L)] for __ in range(len(Yds))]

def move(current, i, Ds,memo):
    if i == len(Ds): return
    pm = current+Ds[i]
    memo[i][pm] = True
    move(pm, i+1,Ds,memo)
    nm = current-Ds[i]
    memo[i][nm] = True
    move(nm, i+1,Ds,memo)
memox[0][Xds[0]] = True
move(Xds[0],1, Xds,memox)
move(0,0, Yds,memoy)
# print(Xds)
# print(Yds)
# print(memox)
# print(memoy)
if not (memox != [] or memoy != []):
    print(memox[len(Xds)-1][Gx] and memoy[len(Yds)-1][Gy])
elif (memox == [] and memoy != []):
    print(0==Gx and memoy[len(Yds)-1][Gy])
else:
    print(memox[len(Xds)-1][Gx] and 0==Gy)

Buggy submission (verdict: Runtime Error):
from sys import exit
from enum import Enum
class Direction(Enum):
    xp = 0
    xn = 1
    yp = 2
    yn = 3
def move(S, current, D, G):
    # print(D == Direction.xn)
    # print(S,D,current)
    if(S == []):return current == G
    elif(S[0] == "F"):
        if(D == Direction.xp):
            if move(S[1:],[current[0]+1,current[1]],D,G):return True
        elif(D == Direction.xn):
            if move(S[1:],[current[0]-1,current[1]],D,G):return True
        elif(D == Direction.yp):
            if move(S[1:],[current[0],current[1]+1],D,G):return True
        elif(D == Direction.yn):
            if move(S[1:],[current[0],current[1]-1],D,G):return True
        # del S[0]
    elif(S[0] == "T" and (D == Direction.xp or D == Direction.xn)):
        # del S[0]
        if move(S[1:],current,Direction.yp,G): return True
        if move(S[1:],current,Direction.yn,G): return True
    elif(S[0] == "T" and (D == Direction.yp or D == Direction.yn)):
        # del S[0]
        if move(S[1:],current,Direction.xp,G): return True
        if move(S[1:],current,Direction.xn,G): return True
    return False
current = [0,0]
D = Direction.xp
S = list(input())#["F","F","T","F"]
G = [int(n) for n in input().split()]#[4,4]

if(move(S,current,D,G)):
    print("Yes")
    exit()
else:
    print("No")