그냥 반복문 하나 함수에 얹은것 뿐인거 같은데
냅다 틀렸다고 바꿔버리네
근데 생각할만한 예외상황은 다 직접 입력해 봤는데 내가 했을땐 잘되더라
사용하는 라이브러리도 기본내장 라이브러리 하나가 끝이라 환경 문제도 아닌것 같고..
참고로 3.8.10버전임
코드 1 (제대로 작동하는 코드)
from re import search
with open("genome.txt") as f:
genome = f.read().replace("\n", "")
S = input().split() # 접두문자열: list[str]
E = input().split() # 접미문자열: list[str]
pattern = rf"({'|'.join(S)}).*?({'|'.join(E)})" #패턴: str
res = [] # 반환값: list[str]
while True:
tmp = search(pattern, genome) # 패턴 검색: re.Match
if tmp is None:
break
res.append(tmp.group())
genome = genome[tmp.span()[0] + 1 :]
print(sorted(res, key=lambda seq: (len(seq), seq))[0] if res else "None")
with open("genome.txt") as f:
genome = f.read().replace("\n", "")
S = input().split() # 접두문자열: list[str]
E = input().split() # 접미문자열: list[str]
pattern = rf"({'|'.join(S)}).*?({'|'.join(E)})" #패턴: str
res = [] # 반환값: list[str]
while True:
tmp = search(pattern, genome) # 패턴 검색: re.Match
if tmp is None:
break
res.append(tmp.group())
genome = genome[tmp.span()[0] + 1 :]
print(sorted(res, key=lambda seq: (len(seq), seq))[0] if res else "None")
코드 2 (제대로 작동하지 않는? 코드)
from re import search, split
# s로 시작하고 e로 끝나는 모든 문자열 추출
def find_units(genome, pattern): # -> list[str]
res = []
while True:
tmp = search(pattern, genome)
# s로 시작하고 e로 끝나는 모든 문자열 추출
def find_units(genome, pattern): # -> list[str]
res = []
while True:
tmp = search(pattern, genome)
if tmp:
res.append(tmp.group())
genome = genome[tmp.span()[0] + 1 :]
else:
break
return res
# main
with open("genome.txt", "r") as f:
genome = f.read().replace("\n", "") # 게놈 데이터:str
S = split(r"[, ]+", input()) # 시작 유닛:list[str]
E = split(r"[, ]+", input()) # 끝 유닛:list[str]
pattern = rf"({'|'.join(S)}).*?({'|'.join(E)})"
sol = sorted(
find_units(genome, pattern), key=lambda x: (len(x), x)
) # 시작 유닛과 끝 유닛을 조합하여 모든 유닛을 추출하고, 길이와 알파벳 순으로 정렬: list[str]
print(sol[0] if sol else "None")
res.append(tmp.group())
genome = genome[tmp.span()[0] + 1 :]
else:
break
return res
# main
with open("genome.txt", "r") as f:
genome = f.read().replace("\n", "") # 게놈 데이터:str
S = split(r"[, ]+", input()) # 시작 유닛:list[str]
E = split(r"[, ]+", input()) # 끝 유닛:list[str]
pattern = rf"({'|'.join(S)}).*?({'|'.join(E)})"
sol = sorted(
find_units(genome, pattern), key=lambda x: (len(x), x)
) # 시작 유닛과 끝 유닛을 조합하여 모든 유닛을 추출하고, 길이와 알파벳 순으로 정렬: list[str]
print(sol[0] if sol else "None")