Trong ấn bản tháng 7 năm 2012 của "Mensa Bulletin" có một bài viết mang tựa đề "The Brain kỹ thuật số". Trong đó tác giả liên hệ bộ não con người với máy tính base64. Nó là một bài viết khá thú vị và thú vị với một dấu nhắc ở cuối. Lời nhắc được yêu cầu người đọc chuyển đổi Cytosine Guanine Adenine Guanine Adenine Guanine thành số cơ sở 10 bằng cách sử dụng Cytosine Cytosine Guanine Cytosine Adenine Guanine bằng năm 2011 (bộ mã đầu tiên được đề cập là cgagag cho ngắn và thứ hai là ccgcag viết tắt). bạn phải chuyển đổi số cơ sở 64 thành cơ số 10 bằng cách sử dụng một bảng trong bài viết hiển thị tất cả các codon có thể theo thứ tự thích hợp với aug = 0, uuu = 1, uuc = 2, ..., gga == 61, ggg = 62, uag = 63. Tôi đã quyết định cho việc này một lần nữa và quyết định viết một chương trình python để chuyển đổi các số codon thành số 10 và 10 số cơ sở thành các codon. Sau khi viết một thuật toán nhanh cho cả hai, tôi đã chạy nó. Chương trình đã không có lỗi và bật ra codons cho số của tôi và ngược lại. Tuy nhiên, chúng là những con số sai! Tôi không thể nhìn thấy những gì đang xảy ra và sẽ đánh giá rất cao sự giúp đỡ nào.Chuyển mã (cơ số 64) thành số 10
Nếu không có thêm ado, mã:
codons = ['aug', 'uuu', 'uuc', 'uua', 'uug', 'ucu', 'ucc', 'uca', 'ucg', 'uau', 'uac', 'uaa', 'ugu', 'ugc', 'uga', 'ugg', 'cuu', 'cuc', 'cua', 'cug', 'ccu', 'ccc', 'cca', 'ccg', 'cau', 'cac', 'caa', 'cag', 'cgu', 'cgc', 'cga', 'cgg', 'auu', 'auc', 'aua', 'acu', 'acc', 'aca', 'acg', 'aau', 'aac', 'aaa', 'aag', 'agu', 'agc', 'aga', 'agg', 'guu', 'guc', 'gua', 'gug', 'gcu', 'gcc', 'gca', 'gcg', 'gau', 'gac', 'gaa', 'gag', 'ggu', 'ggc', 'gga', 'ggg', 'uag' ]
def codonNumToBase10 (codonValue) :
numberOfChars = len(codonValue)
# check to see if contains sets of threes
if len(codonValue) % 3 != 0 :
return -1
# check to see if it contains the correct characters
for i in range(0, numberOfChars) :
if codonValue[i] != 'a' :
if codonValue[i] != 'u' :
if codonValue[i] != 'c' :
if codonValue[i] != 'g' :
return -2
# populate an array with decimal versions of each codon in the input
codonNumbers = []
base10Value = 0
numberOfCodons = int(numberOfChars/3)
for i in range(0, numberOfCodons) :
charVal = codonValue[ 0 + (i*3) ] + codonValue[ 1 + (i*3) ] + codonValue[ 2 + (i*3) ]
val = 0
for j in codons :
if j == charVal :
codonNumbers.append(val)
break
val += 1
base10Value += (pow(64, numberOfCodons - i - 1)) * codonNumbers[i]
return base10Value
def base10ToCodonNum (number) :
codonNumber = ''
hitZeroCount = 0
while(1==1) :
val = number % 64
number = int(number/64)
codonNumber = codons[val] + codonNumber
if number == 0 :
if hitZeroCount > 0:
break
hitZeroCount += 1
return codonNumber
val_2011 = 'ccgcag'
val_unknown = 'cgagag'
print(base10ToCodonNum(codonNumToBase10(val_2011)), '::', codonNumToBase10(val_2011))
print(base10ToCodonNum(codonNumToBase10(val_unknown)), '::', codonNumToBase10(val_unknown))
EDIT 1: Các giá trị tôi nhận được là 1499 cho ccgcag và 1978 cho cgagag.
EDIT 2: base10ToCodonNum chức năng cố định nhờ Ashwini Chaudhary.
sản lượng dự kiến của bạn cho ' 'auguuuuuc' là gì? –
Chỉ cần đếm tôi tìm ccg = 23 và cag = 27, cũng được tìm thấy bởi tập lệnh của bạn. Nhưng: 23 * 64 + 27 = 1499, đó là kết quả của tập lệnh của bạn. Vì vậy, đối với những gì tôi có thể thấy: kết quả chỉ đơn giản là chính xác?! Đó có thể là một câu hỏi ngớ ngẩn, nhưng: Bạn đã sao chép các codon theo đúng thứ tự? –
@Sonryell: kết quả của bạn có vẻ đúng cho bảng đã cho. –