RNA를 코돈으로 파싱


18

소개

RNA는 덜 유명한 DNA의 사촌입니다. 그것의 주요 목적은 번역 이라는 과정을 통해 세포에서 단백질의 생산을 제어하는 ​​것입니다 . 이 과제에서, 당신의 임무는 RNA가 코돈 으로 분리되는이 과정의 일부를 구현하는 것 입니다.

이 과제 는 주제별로 관련되어 있지만 번역 프로세스의 다른 부분에 중점을 둡니다.

코돈

우리는 RNA를 기본 쌍의 알파벳보다 긴 문자열로 생각할 것입니다 AUCG. 번역에서, RNA는 코돈이라고 불리는 3 개의 염기쌍의 겹치지 않는 덩어리로 나뉩니다. 이 과정은에서 시작 개시 코돈 , AUG(A)에서, 그리고 끝 정지 코돈 중 하나 UAA, UAG또는 UGA. 각각의 코돈 (정지 코돈을 제외하고)은 아미노산에 상응하고, 결과적인 아미노산 스트링은 단백질을 형성한다.

입력

입력은 비어 있지 않은 RNA 문자열입니다.

산출

결과는 RNA가 합리적인 형식으로 분할 된 코돈 목록입니다. 이 단순화 된 모델에서 프로세스는 출력에 포함 된 가장 왼쪽의 시작 코돈 AUG에서 시작 합니다. 정지 코돈이 발생하거나 RNA가 부족할 때 종료됩니다. 입력에 시작 코돈이 없으면 출력은 빈 목록이어야합니다.

입력 순서를 고려하십시오

ACAUGGAUGGACUGUAACCCCAUGC

구문 분석은의 가장 왼쪽 AUG에있는 인덱스 2에서 시작 합니다. 다음과 같이 계속됩니다.

AC AUG GAU GGA CUG UAA CCCCAUGC
   *   ^   ^   ^   +

로 표시된 코돈 *은 시작 코돈이며로 표시된 코돈 ^도 출력의 일부입니다. 정지 코돈은로 표시되어 +있습니다. 올바른 출력은

AUG,GAU,GGA,CUG

짧은 입력

ACAUGGAUGGACUGU

과정은 간다

AC AUG GAU GGA CUG U
   *   ^   ^   ^

이번에는 중지 코돈이 발생하지 않으므로 기본 쌍이 부족하면 프로세스가 중지됩니다. 출력은 위와 동일합니다.

규칙과 득점

함수의 전체 프로그램을 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점은 허용되지 않습니다.

테스트 사례

GGUACGGAUU -> 
GGCGAAAUCGAUGCC -> AUG
ACAUGGAUGGACUGU -> AUG,GAU,GGA,CUG
AUGACGUGAUGCUUGA -> AUG,ACG
UGGUUAGAAUAAUGAGCUAG -> AUG,AGC
ACAUGGAUGGACUGUAACCCCAUGC -> AUG,GAU,GGA,CUG
CUAAGAUGGCAUGAGUAAUGAAUGGAG -> AUG,GCA
AAUGGUUUAAUAAAUGUGAUAUGAUGAUA -> AUG,GUU
UGUCACCAUGUAAGGCAUGCCCAAAAUCAG -> AUG
UAUAGAUGGUGAUGAUGCCAUGAGAUGCAUGUUAAU -> AUG,GUG,AUG,AUG,CCA
AUGCUUAUGAAUGGCAUGUACUAAUAGACUCACUUAAGCGGUGAUGAA -> AUG,CUU,AUG,AAU,GGC,AUG,UAC
UGAUAGAUGUAUGGAUGGGAUGCUCAUAGCUAUAAAUGUUAAAGUUAGUCUAAUGAUGAGUAGCCGAUGGCCUAUGAUGCUGAC -> AUG,UAU,GGA,UGG,GAU,GCU,CAU,AGC,UAU,AAA,UGU

13
DNA와 RNA 대 단백질의 관계는 내가 이해할 수있는 컴퓨팅 용어로 한 번 나에게 설명되었다. DNA는 하드 디스크의 프로그램과 같다. RNA는 메모리에로드 된 프로그램과 같습니다. 단백질은 프로그램 실행의 결과로 생성 된 출력 데이터와 동일합니다.
Digital Trauma

4
분자 생물학의 교리 (Dogma)는 "DNA가 RNA를 단백질로 만든다"는 것이다. 따라서 DNA는 매우 드물고 RNA는 덜 유명하지만 훨씬 일반적입니다. 단백질이 가장 일반적입니다.
Level River St

1
@DigitalTrauma : 유전 학자로서 저는이 비유가 DNA가 어떻게 작동하는지에 대한 현실을 설명하기에는 부적절하다고 지적해야합니다. DNA는 RNA로 전사되기를 기다리는 죽은 것이 아니기 때문에 무언가를 할 수 있습니다.
Jack Aidley

(일단 예에서와 같이) 정지 코돈 이전에 mRNA 조각이 종료되면 실제로 발생하는 것은 무엇입니까?
Monica Monica 복원-ζ--

1
@Jack 하드 디스크 내용은 업그레이드, 자동 업데이트 등 반드시 죽은 것은 아니지만 DNA를 이해하는 정도까지는 스스로 치료할 수는 없습니다. 그러나 당신 말이 맞아요-그것은 약한 비유입니다. 그러나 나는 그것이 유전학자가 아닌 자기 자신을 평신도 이해에 조금 더 가깝게 생각한다고 생각합니다.
Digital Trauma

답변:


9

망막 , 39 38 32 30 바이트

M!`AUG|\B\G...
U(AA|AG|GA)\D*

후행 줄 바꿈이 중요합니다.

줄 바꿈으로 구분 된 목록으로 출력합니다.

온라인으로 사용해보십시오.

설명

M!`AUG|\B\G...

이것은 입력으로 모든 피드의 줄 바꿈으로 구분 된 목록으로 변환하는 일치 단계입니다 (로 인해 !). 정규 표현식 자체는 처음부터 모든 코돈과 일치합니다 AUG. 우리는 두 가지 옵션으로 이것을 달성합니다. AUG무조건 일치하므로 일치 목록을 시작할 수 있습니다. 두 번째 일치는 임의의 코돈이 될 수 있지만 ( ...세 개의 문자와 일치), \G이는 또 다른 일치 직후에만 일치 할 수 있도록하는 특수 앵커입니다. 유일한 문제는 \G우리가 원하지 않는 문자열의 시작 부분에서도 일치 한다는 것 입니다. 입력은 단어 문자로만 구성되므로 입력 \B의 시작 부분에서이 일치가 사용되지 않도록하기 위해 (단어 경계가 아닌 모든 위치)를 사용합니다.

U(AA|AG|GA)\D*

이것은 첫 번째 정지 코돈을 찾은 U(AA|AG|GA)후 그 이후의 모든 것뿐만 아니라 문자열에서 제거합니다. 첫 번째 단계는 코돈을 별도의 줄로 나누기 때문에이 일치 항목이 시작 코돈과 올바르게 정렬되었음을 알 수 있습니다. 우리는 사용 \D하기 때문에, 모든 문자를 일치 (비 자리) .줄 바꿈을지나 가지 않을 것이고, 입력이 숫자가 포함되지 않습니다.


5

하스켈, 115112 바이트

import Data.Lists
fst.break(\e->elem e["UAA","UAG","UGA"]||length e<3).chunksOf 3.snd.spanList((/="AUG").take 3)

사용 예 :

*Main> ( fst.break(\e->elem e["UAA","UAG","UGA"]||length e<3).chunksOf 3.snd.spanList((/="AUG").take 3) ) "AUGCUUAUGAAUGGCAUGUACUAAUAGACUCACUUAAGCGGUGAUGAA"
["AUG","CUU","AUG","AAU","GGC","AUG","UAC"]

작동 방식 :

                spanList((/="AUG").take 3)  -- split input at the first "AUG"
             snd                            -- take 2nd part ("AUG" + rest)
     chunksOf 3                             -- split into 3 element lists
fst.break(\e->                              -- take elements from this list
           elem e["UAA","UAG","UGA"]||      -- as long as we don't see end codons
           length e<3)                      -- or run out of full codons 

1

자바 스크립트 88 82 70 69 자

s=>/AUG(...)+?(?=(U(AA|AG|GA)|$))/.exec(s)[0].match(/.../g).join(",")

사용 예 :

(s=>/AUG(...)+?(?=(U(AA|AG|GA)|$))/.exec(s)[0].match(/.../g).join(","))("ACAUGGAUGGACUGUAACCCCAUGC")

정지 코돈이 없으면 입력이 실패하지 않습니까?
Flambino

1
네 말이 맞아, 나는 그것이 옵션 인 고정 된 것을 보지 못했다
Benjamin Gruenbaum

시도하십시오 s=>/AUG(...)+?(?=(U(AA|AG|GA)|$))/.exec(s)[0].match(/.../g).
Mama Fun Roll

정지 코돈에 대해서는 여전히 실패합니다. (테스트 케이스 3를 시도하십시오)
user81655

1

파이썬 2, 185 바이트

i=input()
o=[]
if i.find('AUG')>=0:i=map(''.join,zip(*[iter(i[i.find('AUG'):])]*3))
else:print "";exit()
for j in i:
 if j not in['UGA','UAA','UAG']:o+=[j]
 else:break
print ','.join(o)

설명 설정 i입력. 'AUG'에서 끝으로 나눕니다. 세 줄로 나눕니다. 코돈을 멈추고 절단했는지 확인하십시오.

여기 사용해보십시오


1

MATL , 57 바이트

j'AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))'XXtn?1X)tnt3\-:)3[]e!

이 사용하는 최신 버전 (9.3.1) 언어 / 컴파일러를.

입력 및 출력은 stdin 및 stdout을 통해 이루어집니다. 출력은 줄 바꿈으로 구분됩니다.

>> matl
 > j'AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))'XXtn?1X)tnt3\-:)3[]e!
 >
> ACAUGGAUGGACUGUAACCCCAUGC
AUG
GAU
GGA
CUG

편집 (2016 년 6 월 12 일) : 언어 변경에 적응하려면 []제거해야합니다. 아래 링크는 그 수정을 포함합니다

온라인으로 사용해보십시오!

설명

코드는 정규식을 기반으로합니다.

AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))

문자열로 시작이 일치 AUG세 문자의 그룹 (포함 ...) 및 하나 끝나는 UAA, UAG또는 UGA; 또는 문자열 끝에서 끝나는 경우이 경우 마지막 불완전한 그룹 ( .?.?$) 이있을 수 있습니다 . 정지 코돈이 일치하지 않도록 Lookahead ( (?=...))가 사용됩니다. 발견 된 첫 번째 정지 코돈 (있는 경우 )에서 완료하기 위해 일치하는 게으름 ( *?)입니다.

j                                     % input string
'AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))'   % regex
XX                                    % apply it. Push cell array of matched substrings
tn?                                   % if non-empty
1X)                                   % get first substring
tnt3\-:)                              % make length the largest possible multiple of 3
3[]e!                                 % reshape into rows of 3 columns
                                      % implicit endif
                                      % implicit display

0

루비, 97 95 78 75 62 바이트

->(r){r.scan(/AUG|\B\G.../).join(?,).sub(/,U(AA|AG|GA).*/,'')}

나는 골프를 많이하지 않으므로 향상 될 수 있다고 확신합니다.

편집 : 스톨은 Martin Büttner의 훌륭한 \B\G트릭을 빌 렸습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.