当将DNA翻译成蛋白质时,核糖体读取DNA核苷酸3×3的序列。每组3个核苷酸被称为密码子,每个密码子编码一个氨基酸,存在一些冗余。这是大多数有机体使用的转换表(表读左、上、右):

人类和大多数其他生物只使用一个氨基酸作为“开始”密码子:蛋氨酸,也就是a。相遇,M,或ATG。这意味着任何编码蛋白质的DNA序列都是从ATG开始的,ATG将被翻译机器识别。
然而,三个不同的密码子被用来停止翻译: TAA,TAG和TGA。如果复制机器遇到任何这些,它将停止,翻译的蛋白质将被释放到细胞。
因此,可能发生的最危险的突变之一是会导致蛋白质翻译的早期终止。例如,如果我们取这个DNA序列:
ATGGCCTTCATATCGGCGGACAGCGAATCTGGTGATTAA
分裂成密码子:
ATG GCC TTC ATA TCG GCG GAC AGC GAA TCT GGT GAT TAA
翻译后,将:
met ala phe ile ser ala asp ser glu ser gly asp STOP
但是如果我们在第14位将C替换成A,那么蛋白质序列将是
met ala phe ile STOP
这一替代将在基因组学中写成14C>A。
我还可以执行其他替换(例如,25G>T),这些替换会导致早期终止,但14C>A是序列中的第一个,因此在翻译后会产生最短的蛋白质。
给出一串编码一个蛋白质的核苷酸(第一个密码子是ATG,最后是一个停止),找到第一个替换,这将导致蛋白质翻译的早期终止,从而产生尽可能最短的蛋白质。这是代码高尔夫,所以最少字节赢!
(如果有人问到关于什么是允许的相关问题,这些都会被更新)
ATGCACTGTTGGGGAGGCAGCTGTAACTCAAAGCCTTAG
-> 9T>A
ATGGTAGAACGGAGCAGCTGGTCATGTGTGGGCCCACCGGCCCCAGGCTCCTGTCTCCCCCCAGGTGTGTGGTCATGCCAGGCATGCCCTTAG
-> 7G>T
ATGGAACATCAATCTCAGGCACCTGGCCCAGGTCATTAA
-> 4G>T
ATGTGCCAAGTGCATTCTTGTGTGCTTGCATCTCATGGAACGCCATTTCCCCAGACATCCCTGTGGCTGGCTCCTGATGCCCGAGGCCCATGA
-> 6C>A
ATGCTTTTCCATGTTCTTTGGCCGCAGCAAGGCCGCTCTCACTGCAAAGTTAACTCTGATGCGTGA
-> 20G>A
ATGGTAGAGTAA
-> 7G>T
ATGGTTCCACGGTAA
-> ERROR发布于 2019-10-15 19:26:30
os3ḅ4f“EGM‘Ḋ
JṬ€×Ɱ4ZẎçƇ⁸ḢĖżW€Ṁ接受整数列表(分别在[1,2,3,4]映射到ACGT中)的一元链接,它生成整数列表( [[position, new nucleotide], original nucleotide] )。
(具有start和stop的有效序列,但没有可能导致早期终止的替代,将输出[[4]])
...Or参见这个版本,它既执行来自ACGT输入格式的转换,又执行到{position}{original nucleotide}>{new nucleotide}输出格式的转换。
os3ḅ4f“EGM‘Ḋ - helper Link: [0,...,0,new nucleotide], N; DNA integer list, A
o - (N) logical OR (A) (vectorises)
s3 - split into chunks of three
ḅ4 - convert from base four to integer
“EGM‘ - code-page index list = [69,71,77]
f - filter keep (i.e. only keep stops)
Ḋ - dequeue (so if only a single stop was found and hence no early
stops we'll have an empty list which is falsey)
JṬ€×Ɱ4ZẎçƇ⁸ḢĖżW€Ṁ - Main Link: DNA integer list, A
J - range of length (of A) -> [1,2,...]
Ṭ€ - untruth each -> [[1],[0,1],[0,0,1],...]
×Ɱ4 - map across [1,2,3,4[ performing multiplication
Z - transpose
Ẏ - tighten -> [[1],[2],[3],[4],[0,1],[0,2],[0,3],[0,4],[0,0,1],...]
- (call that X)
⁸ - use chain's left argument, A, as the right argument
Ƈ - filter keep those (x in X) for which this is truthy:
ç - call the helper link as a dyad f(x, A)
Ḣ - head (which will be the shortest)
Ė - enumerate (that)
W€ - wrap each (integer a in A) in a list
ż - zip left and right together
Ṁ - get the maximum发布于 2019-10-16 09:46:24
f=lambda i,j,k,*l,n=1:(j+k<4)*(n,i,5)+(i-k>2)*(n+1,j,1)or(i-j>2)*(n+2,k,1)or f(*l,n=n+3)没有正则表达式的解。分别将1235用于AGCT。将每个基作为单独的参数。将建议A用于T*A, T*G, TA*, TG*的任何实例。输出为(position, original base, new base)。在没有早期终止站点时返回(无效)6元素元组。
f=lambda i,j,k,*l,n=1:
(j+k<4) # If the last two bases are 1+1 (AA), 1+2 (AG) or 2+1 (AG)
*(n,i,5) # Return (position, 1st base, 5 (T))
+(i-k>2) # If the 1st base is 5 (T) and the 3rd base 1 (A) or 2 (G)
*(n+1,j,1) # Return (position, 2nd base, 1 (A))
or(i-j>2) # If the 1st base is 5 (T) and the 2nd base 1 (A) or 2 (G)
*(n+2,k,1) # Return (position, 3rd base, 1 (A))
or f(*l,n=n+3) # Else process the next three bases发布于 2019-10-16 03:34:24
x=>{for(int i=0;;i++)foreach(var k in"AGT")if("TAG TAA TGA".Contains(x.Remove(i,1).Insert(i,k+"").Substring(i-i%3,3)))return(i+1,x[i],k);}https://codegolf.stackexchange.com/questions/194297
复制相似问题