দীর্ঘতম বিপরীত প্যালিনড্রমিক ডিএনএ সাবস্ট্রিং


11

আপনারা জানেন যে ডিএনএতে চারটি ঘাঁটি রয়েছে - অ্যাডেনিন ( A), সাইটোসিন ( C), গুয়ানাইন ( G) এবং থাইমাইন ( T)। সাধারণত Aসঙ্গে বন্ড Tএবং Cসঙ্গে বন্ড G, এর "rungs" বিরচন ডিএনএ ডবল হেলিক্স কাঠামো

আমরা সংজ্ঞায়িত সম্পূরক একটি বেস এর বেস এটা বন্ড হতে - অর্থাত সম্পূরক Aহয় T, এর সম্পূরক Tহয় A, এর সম্পূরক Cহয় Gএবং সম্পূরক Gহয় C। আমরা একটি DNA স্ট্রিং এর সম্পূরক সংজ্ঞায়িত প্রতিটি বেস complemented, যেমন সম্পূরক সঙ্গে স্ট্রিং হতে পারেন GATATCহয় CTATAG

ডিএনএর দ্বৈত-প্রসারিত কাঠামোর কারণে, একটি স্ট্র্যান্ডের ঘাঁটিগুলি অন্য স্ট্র্যান্ডের ঘাঁটির পরিপূরক হয়। তবে ডিএনএর একটি দিক রয়েছে এবং ডিএনএ প্রতিলিপি দুটি স্ট্র্যান্ডের বিপরীত দিকে ঘটে directions সুতরাং আণবিক জীববিজ্ঞানীরা প্রায়শই ডিএনএ স্ট্রিংয়ের বিপরীত পরিপূরকটিতে আগ্রহী হন - বেশ আক্ষরিক অর্থে স্ট্রিংয়ের পরিপূরকগুলির বিপরীত।

আমাদের আগের উদাহরণ প্রসারিত করার জন্য, এর বিপরীত সম্পূরক GATATCহয় CTATAGপিছন তাই হয়, GATATC। যেমন আপনি লক্ষ্য করেছেন, এই উদাহরণে বিপরীত পরিপূরকটি মূল স্ট্রিংয়ের সমান - আমরা এই জাতীয় একটি স্ট্রিংকে একটি বিপরীত প্যালিনড্রোম বলে থাকি *

ডিএনএর একটি স্ট্রিং দেওয়া, আপনি কি সবচেয়ে দীর্ঘতম স্ট্রিং খুঁজে পাবেন যা একটি বিপরীত প্যালিনড্রোম?

* প্যালিনড্রোমের সাধারণ অর্থ থেকে আলাদা করতে আমি রোজালিন্ড থেকে নেওয়া "বিপরীত প্যালিনড্রোম" শব্দটি ব্যবহার করি ।


ইনপুট

ইনপুটটি একটি একক স্ট্রিং হবে যা কেবল ACGTউচ্চ অক্ষরের অক্ষরের সমন্বয় করে। আপনি এই চ্যালেঞ্জের জন্য কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন।

আউটপুট

আপনি মুদ্রণ বা প্রত্যাবর্তনের মাধ্যমে আউটপুট চয়ন করতে পারেন (পরের পছন্দটি কেবল কোনও ফাংশনের ক্ষেত্রে পাওয়া যায়)।

যদি কোনও অনন্য সমাধান থাকে তবে আপনার প্রোগ্রামটির ইনপুট স্ট্রিংয়ের দীর্ঘতম বিপরীত প্যালিনড্রোমিক স্ট্রিং আউটপুট করা উচিত। যদি একাধিক সমাধান বিদ্যমান থাকে, তবে আপনি হয় সেগুলির একটিরও আউটপুট পেতে পারেন বা সেগুলি সমস্ত (আপনার পছন্দ)। সদৃশগুলি ঠিক আছে যদি আপনি সেগুলির সমস্ত আউটপুট চয়ন করেন।

ইনপুটটিতে কমপক্ষে দৈর্ঘ্য 2 এর সমাধান থাকার গ্যারান্টিযুক্ত।

কাজ করেছেন উদাহরণ

ATGGATCCG -> GGATCC

এর বিপরীত পরিপূরকটি GGATCCহ'ল ( GGATCC --complement--> CCTAGG --reverse--> GGATCC), তবে GGATCCএটি একটি বিপরীত প্যালিনড্রোম। GATCএটি একটি বিপরীত প্যালিনডমও তবে এটি দীর্ঘতম নয় not

পরীক্ষার মামলা

AT -> AT
CGT -> CG
AGCA -> GC
GATTACA -> AT, TA
ATGGATCCG -> GGATCC
CCCCCGGGGG -> CCCCCGGGGG
ACATATATAGACT -> ATATAT, TATATA
ATTCGATCTATGTAAAGAGG -> TCGA, GATC
CGCACGTCTACGTACCTACGTAG -> CTACGTAG
TCAATGCATGCGGGTCTATATGCAT -> ATGCAT, GCATGC [, ATGCAT]
CGCTGAACTTTGCCCGTTGGTAGAACGGACTGATGTGAACGAGTGACCCG -> CG, GC, TA, AT [, GC, CG, CG, CG, CG]
CTCGCGTTTGCATAACCGTACGGGCGGAACAGTCGGCGGTGCCTCCCAGG -> CCGTACGG

স্কোরিং

এটি কোড গল্ফ, সুতরাং কয়েকটি বাইটে সমাধান জিততে পারে।


এগুলি সবার মুদ্রণ করে যদি কিছু বোনাস থাকে তবে এটি আরও ভাল হত।
অপ্টিমাইজার

@ অপ্টিমাইজারগুলি সবগুলি মুদ্রণের চেয়ে দীর্ঘতম বেশি মুদ্রণযোগ্য নয়?
ট্রাইকোপলাক্স

বা আপনি দীর্ঘতম সমস্ত মুদ্রণ মানে?
ট্রাইকোপ্লাক্স

@ গিথুব্যাগগোসাইট হ্যাঁ, আপনার দ্বিতীয় মন্তব্য।
অপ্টিমাইজার 15

উত্তর:


6

পাইথ, 37 36 28 24 বাইট

ef&}TzqmaCd6T_mx4aCk6Tyz

FryAmTheEggman থেকে টিপস এবং পিটারের বিপরীত প্যালিনড্রোম চেক কৌশল একত্রিত করা, এটি একটি সুপার শর্ট সংস্করণ।

তবে এটি কেবল পাইথ Py.০.১ নিয়ে কাজ করে যা আপনি এই লিঙ্কটি থেকে ডাউনলোড করে চালাতে পারেন can

python3 pyth.py -c "ef&}TzqmaCd6T_mx4aCk6Tyz" <<< "ATTCGATCTATGTAAAGAGG"

(কেবল লিনাক্স ব্যাশ। উইন্ডোতে <<< এর পরিবর্তে এন্টার টিপুন এবং তারপরে ইনপুট টাইপ করুন)


এটি আমার পূর্ববর্তী জমা - 28 বাইট সমাধান

J"ACGT"ef&}TzqTjk_m@_JxJdTyz

এই সংস্করণটির জন্য FryAmTheEggman কে ধন্যবাদ। এটি একটি ইনপুট ডিএনএ স্ট্রিংয়ের সমস্ত সম্ভাব্য সাবসেট তৈরি করে, সাবসেটকে এই শর্তে ফিল্টার করে যে সাবসেটটি ইনপুটটির একটি সাবস্ট্রিং এবং ট্রান্সফর্মের বিপরীতটি সাবসেটের সমান।

সমস্ত সম্ভাব্য সাবসেট তৈরির কারণে, এটি পিটারের উত্তরের চেয়ে আরও বেশি স্মৃতি গ্রহণ করে।


এটি আমার প্রথম জমা - 36 বাইট সমাধান।

J"ACGT"eolNfqTjk_m@_JxJdTm:zhkek^Uz2

এটি আমার সিজেএম উত্তরের হুবহু অনুবাদ । আমি আশা করছিলাম যে এটি অনেক ছোট হবে তবে দেখা যাচ্ছে যে অনুবাদ পদ্ধতির অভাবে এটি প্রায় একই আকারে পরিণত হয়েছে (এখনও 2 বাইট যদিও ছোট)

এটি এখানে অনলাইনে চেষ্টা করুন


Uzসমতূল্য Ulz
isaacg

1
J"ACGT"eolNf&}TzqTjk_m@_JxJdTyzyz
সাবসেটিংয়ের

1
ওহ, এবং যদি আপনি এটি করেন তবে আপনার বাছাই করতে হবে না কারণ yইতোমধ্যে দৈর্ঘ্য অনুসারে বাছাই করা হয়েছে। আপনি কেবলমাত্র করতে পারেনef...
FryAmTheEggman

5

গল্ফস্ক্রিপ্ট ( 35 34 বাইট)

]{{..(;\);}%)}do{{6&}%.{4^}%-1%=}?

পরীক্ষার উদ্দেশ্যে আপনি ব্যবহার করতে পারেন

]{{..(;\);}%.&)}do{{6&}%.{4^}%-1%=}?

যা .&সদৃশ প্রচেষ্টা কমাতে একটি যুক্ত করে।

ব্যবচ্ছেদ

]{         # Gather string into an array and do-while...
  {        #   Map over each string in the array
    ..     #     Make a couple of copies of the string
    (;     #     Remove the first character from one of them
    \);    #     Remove the last character from the other
  }%
  )        #   Extract the last string from the array
}do        # Loop until that last string is ''
           # Because of the duplication we now have an array containing every substring
           # of the original string, and if we filter to the first occurrence of each
           # string then they're in descending order of length
{          # Find the first element in the string satisfying the condition...
  {6&}%    #   Map each character in the string to its bitwise & with 6
  .{4^}%   #   Duplicate, and map each to its bitwise ^ with 4
           #   This serves to test for A <-> T, C <-> G
  -1%=     #   Reverse and test for equality
}?

q{]{__(;\);}%~}h]{:c:i6f&_4f^W%=}=সিজেমে। একই আকার. 7 দৈর্ঘ্যের ইনপুট থেকে বড় কোনও কিছুর জন্য অনলাইন সংকলকটিতে এটি ব্যবহার করে দেখুন না
অপ্টিমাইজার

4

সিজেম, 39 38 বাইট

আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে ...

q:Q,,_m*{~Q<>}%{,~}${_"ACGT"_W%erW%=}=

এসটিডিইএন থেকে ডিএনএ স্ট্রিং নেয় এবং দীর্ঘতম বিপরীত প্যালিনড্রমিক ডিএনএ এসটিডিউটে আউটপুট করে

এটি এখানে অনলাইনে চেষ্টা করুন

(শীঘ্রই ব্যাখ্যা) (1 টি বাইট পিটারের জন্য ধন্যবাদ সংরক্ষণ করা হয়েছে)


4

পাইথন 3, 125 অক্ষর

S=input()
l=[]
while S:
 s=_,*S=S
 while s:l+=[s]*all(x+y in"ATA CGC"for x,y in zip(s,s[::-1]));*s,_=s
print(*max(l,key=len))

মা দেখুন, কোনও ইনডেক্সিং নেই! (আচ্ছা, স্ট্রিংটি উল্টো করা ছাড়া, এটি গণনা করে না))

সাবস্ট্রিংগুলিতে ইটারেটিংয়ের কাজটি সামনে থেকে অক্ষরগুলি নিয়ে এবং তারার অ্যাসাইনমেন্ট ব্যবহার করে শেষ করা হয় । বাইরের লুপটি শুরুর জন্য অক্ষরগুলি সরিয়ে দেয়S এবং প্রতিটি প্রত্যয়টির sজন্য এটির সমস্ত উপসর্গের উপরে লুপ করে, সেগুলি একে একে পরীক্ষা করে।

বিপরীত প্যালিনড্রোমের জন্য টেস্টিং কোড দ্বারা করা হয়

all(x+y in"ATA CGC"for x,y in zip(s,s[::-1]))

যা প্রতিটি চিহ্ন এবং এর বিপরীত স্ট্রিং প্রতিরূপ "এটি", "টিএ", "সিজি", এবং "জিসি" এর একটি। আমি একটি চরিত্রের সংক্ষিপ্ত হওয়ার জন্য একটি সেট-ভিত্তিক সমাধানও পেয়েছি, তবে বাহ্যিক পেরেনগুলি ব্যবহার করার সময় দুটি অক্ষর হারিয়ে ফেলে।

set(zip(s,s[::-1]))<=set(zip("ACTG","TGAC"))

এটি এখনও ছোট করে দেওয়া যেতে পারে বলে মনে হচ্ছে।

অবশেষে, দীর্ঘতম প্যালিনড্রোম মুদ্রিত হয়।

print(*max(l,key=len))

আমি আশা করি স্থান দ্বারা পৃথক করা আউটপুটগুলি ঠিক আছে। যদি একটি তালিকাও সূক্ষ্ম হয়, তারাটি সরানো যেতে পারে। আমি পরিবর্তে লুপটিতে চলমান সর্বাধিক ট্র্যাক করার চেষ্টা করেছি, পাশাপাশি অভ্যন্তরীণ লুপগুলিকে একটি তালিকা বোঝার জন্য ক্র্যামিং করেছিলাম যাতে আমি বিনা ব্যয়ে সরাসরি সর্বোচ্চটি নিতে পারি lএবং উভয়ই কিছুটা দীর্ঘতর হয়ে গেছে। তবে এটি এতটা কাছে ছিল যে কোন পদ্ধতির আসলে সবচেয়ে ভাল তা বলা শক্ত।


আমি এই প্রশ্নের সাথে আরও নমনীয় হতে চেয়েছিলাম যাতে আমি বাঁধা সমাধানগুলির জন্য সঠিক আউটপুট ফর্ম্যাটটি নির্দিষ্ট করতে পারি না। যদি সমাধানগুলি কী তা পরিষ্কার হয়ে যায় তবে এটি ঠিক আছে, সুতরাং একটি তালিকা ঠিক আছে।
Sp3000

3

জে (45)

{.@(\:#&.>)@,@(('ACGT'&(|.@]-:[{~3-i.)#<)\\.)

এটি একটি ফাংশন যা একটি স্ট্রিং নেয়:

   {.@(\:#&.>)@,@(('ACGT'&(|.@]-:[{~3-i.)#<)\\.) 'ATGGATCCG'
┌──────┐
│GGATCC│
└──────┘

ব্যাখ্যা:

{.@(\:#&.>)@,@(('ACGT'&(|.@]-:[{~3-i.)#<)\\.) 

              (                          \\.)  for each prefix of each suffix
               (                      #<)      include the argument if,
                        |.@]                      its reverse
                            -:                    is equal to
                'ACGT'&(      [{~3-i.)            the complement
            ,@                                 ravel
   (\:#&.>)@                                   sort by length of item
{.@                                            take the first one   

3

পার্ল - 59 বাইট

#!perl -p
$_=$_[~!map$_[length]=$_,/((.)(?R)?(??{'$Q5'^$+.-$+}))/gi]

শেবাংকে এক হিসাবে গণনা করা, ইনপুট নেওয়া হয়েছে STDIN

নমুনা ব্যবহার:

$ echo CTCGCGTTTGCATAACCGTACGGGCGGAACAGTCGGCGGTGCCTCCCAGG | perl dna.pl
CCGTACGG

3

পাইথন 2 - 177 বাইট

s=raw_input()
r,l,o=range,len(s),[]
for a in[s[i:j+1]for i in r(l)for j in r(i,l)]:q=['TC GA'.index(c)-2for c in a];o+=[a if[-n for n in q][::-1]==q else'']
print max(o,key=len)

সাধারণ উদ্দীপনা। আসল "বিপরীত প্যালিনড্রমিক" চেকটি কেবল আকর্ষণীয় অংশ। এখানে এটি আরও পঠনযোগ্যভাবে লেখা হয়েছে:

check = ['TC GA'.index(c)-2 for c in substring]
if [-n for n in check][::-1] == check:
    # substring is reverse palindromic

আমি প্রতিটি সম্ভাব্য স্ট্রিংগুলিতে এটি করি এবং যদি এটি সত্য হয় তবে তাদের একটি তালিকায় রাখি। যদি এটি মিথ্যা হয় তবে আমি এর পরিবর্তে একটি খালি স্ট্রিং রেখেছি। সমস্ত চেক সম্পন্ন হয়ে গেলে আমি তালিকার দীর্ঘতম উপাদানটি আউটপুট করি। আমি একটি খালি স্ট্রিং ব্যবহার করেছি কারণ এটি কিছুই না দেওয়ার চেয়ে বাইটস সংরক্ষণ করে, তবে এর অর্থ হ'ল কোনও সমাধান না থাকলে প্রোগ্রামটি শ্বাসরোধ করবে না। এটি একটি খালি লাইন আউটপুট দেয় এবং সযত্নে প্রস্থান করে।


1
আপনি যদি একটি একক তালিকায় সব কিছু ছাপিয়ে যান তবে এটি সংক্ষিপ্ত বলে মনে হচ্ছে। আমাকে কিছুটা যুক্তি পরিবর্তন করতে হয়েছিল, তবে আমি 162 পেয়েছিলাম s=raw_input();r,l,g=range,len(s),'TGCA';print max([a for a in[s[i:j+1]for i in r(l)for j in r(i,l)]if[g[n]for n in[~g.find(c)for c in a]]==list(a)[::-1]],key=len)। এছাড়াও, স্ট্রিংয়ের জন্য, findওভার ব্যবহার করুন index:)
FryAmTheEggman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.