পটভূমি:
এমটিডিএনএ হ'ল মানব ডিএনএর একটি অংশ যা একটি মা থেকে একটি সন্তানের কাছে চলে যায় এবং এটি খুব কমই পরিবর্তিত হয়। যেহেতু সমস্ত মানুষের পক্ষে এটি সত্য, এটি একটি বিশাল গাছ তৈরি করা সম্ভব যা কল্পনা করে যে সমস্ত মানুষ কীভাবে তাদের মাতৃ বংশের মাধ্যমে একে অপরের সাথে সম্পর্কিত হয়ে থাকে কল্পনা করা যায় যে সমস্ত কল্পিত ইভিতে ফিরে আসা যায় না। কোনও সন্তানের জন্মের সময় এমটিডিএনএর প্রতিটি রূপান্তর গাছের পিতামাতার শাখা থেকে একটি নতুন উপ-শাখা তৈরি করে।
মাইটোকন্ড্রিয়াল ডিএনএ (এমটিডিএনএ) সম্পর্কে আরও জানুন: https://en.wikedia.org/wiki/Mitochondrial_DNA
উদ্দেশ্য:
আপনার প্রোগ্রামটি এমটিডিএনএ ট্রি শাখার মিউটেশন কাউন্টের একটি তালিকা পরিবেশন করা হবে এবং আপনার প্রোগ্রামটি এটির একটি ট্রি ভিউ সরবরাহ করবে
ইনপুট এবং আউটপুট উদাহরণ:
ইনপুটটি প্রতিটি শাখার জন্য একটি লাইন সহ একটি 3-কলাম আধা-কোলন পৃথক করা টেবিল। উদাহরণ:
L0a'b'f'k;L0;14
L0a'b'f;L0a'b'f'k;23
L0;mtEVE;10
L0a'b;L0a'b'f;30
L0a;L0a'b;38
L0a1'4;L0a;39
L0a1;L0a1'4;40
L0a1a;L0a1;42
L0a1a NL;L0a1a;43
L0a1a1;L0a1a NL;44
L0a1a2;L0a1a NL;45
L0a1a3;L0a1a NL;44
L0a1 NL;L0a1;41
L0a1b;L0a1 NL;44
L0a1b NL;L0a1b;45
L0a1b1;L0a1b NL;46
L0a1b1a;L0a1b1;47
L0a1b1a1;L0a1b1a;48
L0a1b2;L0a1b NL;48
L0a1b2a;L0a1b2;50
L0a1c;L0a1 NL;45
L0a1d;L0a1 NL;44
L0a4;L0a1'4;55
L0a2;L0a;47
L0a2a;L0a2;49
L0a2a1;L0a2a;50
L0a2a1a;L0a2a1;51
L0a2a1a1;L0a2a1a;53
L0a2a1a2;L0a2a1a;53
L0a2a2;L0a2a;53
L0a2a2a;L0a2a2;54
L0a2b;L0a2;57
L0a2b1;L0a2b;58
L0a2c;L0a2;60
L0a2d;L0a2;49
L0a3;L0a;53
L0b;L0a'b;48
L0f;L0a'b'f;37
L0f1;L0f;61
L0f2;L0f;41
L0f2a;L0f2;46
L0f2a1;L0f2a;59
L0f2b;L0f2;63
L0k;L0a'b'f'k;39
L0k1;L0k;48
L0k2;L0k;54
L0d;L0;21
L0d1'2;L0d;25
L0d1;L0d1'2;30
L0d1 NL;L0d1;31
L0d1a;L0d1 NL;38
L0d1a1;L0d1a;41
L0d1c;L0d1 NL;39
L0d1c1;L0d1c;45
L0d1c1a;L0d1c1;46
L0d1c1b;L0d1c1;46
L0d1b;L0d1 NL;36
L0d1b1;L0d1b;40
L0d2;L0d1'2;31
L0d2a'b;L0d2;32
L0d2a;L0d2a'b;42
L0d2a1;L0d2a;43
L0d2b;L0d2a'b;46
L0d2c;L0d2;45
L0d3;L0d;39
আপনার প্রোগ্রামের ইনপুট উপর ভিত্তি করে কিছু নম্বর সহ একটি বাম থেকে ডান গাছ ভিউ আউটপুট করা উচিত। উদাহরণ ইনপুট উপর ভিত্তি করে, এটি বৈধ আউটপুট:
0│ ┐ mtEVE [ 0][ 63]
10│ └♦♦♦♦♦♦♦♦♦┬────────────────┬─────────────────────────────────── L0 [ 10][ 63]
21│ │ └♦♦♦♦♦♦♦♦♦♦┬──────┬───────────────── L0d [ 11][ 46]
39│ │ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0d3 [ 18][ 39]
25│ │ └♦♦♦┐ L0d1'2 [ 4][ 46]
30│ │ ├♦♦♦♦┬─────────────── L0d1 [ 5][ 46]
31│ │ │ └┬────┬┐ L0d1 NL [ 1][ 46]
36│ │ │ │ │└♦♦♦♦┬─── L0d1b [ 5][ 40]
40│ │ │ │ │ └♦♦♦ L0d1b1 [ 4][ 40]
38│ │ │ │ └♦♦♦♦♦♦┬── L0d1a [ 7][ 41]
41│ │ │ │ └♦♦ L0d1a1 [ 3][ 41]
39│ │ │ └♦♦♦♦♦♦♦┬────── L0d1c [ 8][ 46]
45│ │ │ └♦♦♦♦♦┬ L0d1c1 [ 6][ 46]
46│ │ │ ├ L0d1c1a [ 1][ 46]
46│ │ │ └ L0d1c1b [ 1][ 46]
31│ │ └♦♦♦♦♦┬┬───────────── L0d2 [ 6][ 46]
45│ │ │└♦♦♦♦♦♦♦♦♦♦♦♦♦ L0d2c [ 14][ 45]
32│ │ └┬──┐ L0d2a'b [ 1][ 46]
42│ │ │ └♦♦♦♦♦♦♦♦♦┬ L0d2a [ 10][ 43]
43│ │ │ └ L0d2a1 [ 1][ 43]
46│ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦ L0d2b [ 14][ 46]
14│ └♦♦♦┬────────┐ L0a'b'f'k [ 4][ 63]
39│ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦┬─────┬──────── L0k [ 25][ 54]
48│ │ │ └♦♦♦♦♦♦♦♦ L0k1 [ 9][ 48]
54│ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0k2 [ 15][ 54]
23│ └♦♦♦♦♦♦♦♦┬──┐ L0a'b'f [ 9][ 63]
30│ │ └♦♦♦♦♦♦┬───────────┐ L0a'b [ 7][ 60]
48│ │ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0b [ 18][ 48]
38│ │ └♦♦♦♦♦♦♦┬────┬─┬────────────── L0a [ 8][ 60]
53│ │ │ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0a3 [ 15][ 53]
39│ │ │ └┬────┐ L0a1'4 [ 1][ 55]
40│ │ │ │ └┬────┬──── L0a1 [ 1][ 50]
42│ │ │ │ │ └♦┬── L0a1a [ 2][ 45]
43│ │ │ │ │ └┬┐ L0a1a NL [ 1][ 45]
44│ │ │ │ │ │├ L0a1a1 [ 1][ 44]
44│ │ │ │ │ │└ L0a1a3 [ 1][ 44]
45│ │ │ │ │ └♦ L0a1a2 [ 2][ 45]
41│ │ │ │ └┬────┬┐ L0a1 NL [ 1][ 50]
44│ │ │ │ │ │└♦♦ L0a1d [ 3][ 44]
45│ │ │ │ │ └♦♦♦ L0a1c [ 4][ 45]
44│ │ │ │ └♦♦┬───── L0a1b [ 3][ 50]
45│ │ │ │ └┬─┐ L0a1b NL [ 1][ 50]
46│ │ │ │ │ └┬─ L0a1b1 [ 1][ 48]
47│ │ │ │ │ └┬ L0a1b1a [ 1][ 48]
48│ │ │ │ │ └ L0a1b1a1 [ 1][ 48]
48│ │ │ │ └♦♦┬─ L0a1b2 [ 3][ 50]
50│ │ │ │ └♦ L0a1b2a [ 2][ 50]
55│ │ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0a4 [ 16][ 55]
47│ │ └♦♦♦♦♦♦♦♦┬─┬───┬────┬─ L0a2 [ 9][ 60]
49│ │ │ │ │ └♦ L0a2d [ 2][ 49]
49│ │ │ │ └♦┬┬─── L0a2a [ 2][ 54]
50│ │ │ │ │└┬── L0a2a1 [ 1][ 53]
51│ │ │ │ │ └┬─ L0a2a1a [ 1][ 53]
53│ │ │ │ │ ├♦ L0a2a1a1 [ 2][ 53]
53│ │ │ │ │ └♦ L0a2a1a2 [ 2][ 53]
53│ │ │ │ └♦♦♦┬ L0a2a2 [ 4][ 54]
54│ │ │ │ └ L0a2a2a [ 1][ 54]
57│ │ │ └♦♦♦♦♦♦♦♦♦┬ L0a2b [ 10][ 58]
58│ │ │ └ L0a2b1 [ 1][ 58]
60│ │ └♦♦♦♦♦♦♦♦♦♦♦♦ L0a2c [ 13][ 60]
37│ └♦♦♦♦♦♦♦♦♦♦♦♦♦┬─┬─────────────────────── L0f [ 14][ 63]
61│ │ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0f1 [ 24][ 61]
41│ └♦♦♦┬───┬───────────────── L0f2 [ 4][ 63]
46│ │ └♦♦♦♦┬──────────── L0f2a [ 5][ 59]
59│ │ └♦♦♦♦♦♦♦♦♦♦♦♦ L0f2a1 [ 13][ 59]
63│ └♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦♦ L0f2b [ 22][ 63]
ইনপুট: বিশদ
ইনপুট টেবিলটি কোনও নির্দিষ্ট ক্রমে সাজানো হয় না । আমরা যদি এলোমেলোভাবে ইনপুট লাইনগুলিকে পুনরায় অর্ডার করি তবে আউটপুটটি একই থাকবে।
ইনপুটটির প্রতিটি লাইন একটি এমটিডিএনএ ট্রি শাখা বা হাইপোথিটিকাল ট্রি শাখা উপস্থাপন করে। ইনপুট টেবিল দৈর্ঘ্যের কোনও সংখ্যা হতে পারে।
ইনপুট: বিশদ - কলাম এ (শাখার নাম):
প্রথম কলামটি আসল শাখার নাম। নামটি ইনপুট লাইনগুলিকে 2 টি লাইনের ধরণের গ্রুপে ভাগ করে দেয় যা একে অপরের থেকে পৃথক (পরে ব্যাখ্যা করা) করা উচিত:
- প্রকার 1: নামটি যে কোনও
'
বা প্রত্যয় নিয়ে গঠিতNL
- প্রকার 2: নামটি কোনও
'
বা প্রত্যয় নিয়ে গঠিত নয়NL
।
নামটি দৈর্ঘ্যে 20 টি অক্ষর পর্যন্ত হতে পারে।
ইনপুট: বিশদ - কলাম বি (মূল শাখার নাম):
দ্বিতীয় কলামে মূল শাখার নামের একটি পয়েন্টার রয়েছে। বেশ কয়েকটি লাইন (শাখা) একই পিতামাতাকে ভাগ করতে পারে। ইনপুট টেবিলটিতে সর্বদা ঠিক 1 স্বতন্ত্র পিতামাতার শাখার নাম থাকে যা কোনও পিতামাতাকে নির্দেশ করে যা ইনপুট লাইনের মধ্যে প্রতিনিধিত্ব করে না, পিতামাতার শাখার নাম গাছের মূল root উদাহরণের ইনপুটটিতে এটি মূলের দিকে ইঙ্গিত করা তৃতীয় লাইন mtEVE
। যদি ইনপুটটির একাধিক মূল বা অন্তহীন লুপ থাকে তবে এটি একটি অবৈধ ইনপুট।
ইনপুট: বিশদ - কলাম সি (পরিবর্তনের #):
তৃতীয় কলামটি মূল শাখাটি মূল থেকে গণনা করা মোট পরিব্যক্তিগুলির সংখ্যা। হাইপোটেটিকাল মাতৃমূল (হিউম্যান / চিম্প পূর্বপুরুষ ইভিই) থেকে একক লাইনে হিউম্যান এমটিডিএনএ 100 বারেরও বেশি রূপান্তরিত করতে পারে নি, তবে আপনার প্রোগ্রামটি 999 অবধি 3 ডিজিটের # মিউটেশন পরিচালনা করতে সক্ষম হবে।
ইনপুট থেকে আপনি তার বিভাজনের পিতামাতার # অভিভাবকের কাছ থেকে এর # রূপান্তরকে বিয়োগ করে অনন্য মিউটেশনের একটি শাখা গণনা করতে পারেন।
আউটপুট: বিশদ
আপনার প্রোগ্রামটি 3 টির মধ্যে 1 টির মধ্যে পৃথক ত্রুটি বার্তা আউটপুট করা উচিত যদি ইনপুট বিবরণ অনুসারে ইনপুটটি অবৈধ।
- ত্রুটি বার্তা 1, যদি ইনপুটটিতে একাধিক মূল থাকে:
ERROR: Multiple roots
- ত্রুটি বার্তা 2, যদি ইনপুট পিতামাতারা লুপগুলি নির্দেশ করে:
ERROR: Endless loop
- ত্রুটি বার্তা 3, ইনপুট সম্পর্কে অবৈধ অন্য কিছু:
ERROR: Invalid input
যদি ইনপুটটিতে কোনও ত্রুটি না থাকে তবে আপনার প্রোগ্রামটি নিম্নলিখিত সীমাবদ্ধতা অনুযায়ী গাছটিকে আউটপুট দেয়: প্রতিটি লাইনে 5 টি অংশ A, B, C, D এবং E থাকে:
- একটি: 5 টি অক্ষর, 3
|
চরটি ডান-সংযুক্ত # রূপান্তরগুলি, একটি উল্লম্ব রেখার অক্ষর: এবং 1 ফাঁকা স্থান - বি: [সর্বাধিক # রূপান্তরকরণ] অক্ষর প্রশস্ত গাছ + 1 ফাঁকা স্থান
- সি: 20 টি অক্ষর, বাম-সারিবদ্ধ শাখার নাম
- ডি: 5 টি অক্ষর, 3 টি অক্ষর ডান-সংযুক্ত # শাখার জন্য অনন্য রূপান্তরগুলির মধ্যে
[
এবং এর মধ্যে আবদ্ধ হয়]
। (অনন্য মিউটেশনগুলি নীচে ব্যাখ্যা করা হবে)। - ই: 5 অক্ষর, 3 চরিত্র এই শাখা মোট পরিব্যক্তি এবং সব সন্তানের শাখার মধ্যে encapsulated ডান প্রান্তিককৃত সর্বোচ্চ #
[
এবং]
।
অনন্য রূপান্তরগুলির একটি শাখা হ'ল বর্তমান শাখায় তার অভিভাবক শাখার # রূপান্তরগুলির মধ্যে পার্থক্য। প্রথম লাইনটি মূল এবং এটি 0
# রূপান্তর এবং # স্বতন্ত্র রূপান্তরগুলির সাথে প্রতিনিধিত্ব করা উচিত ।
আউটপুট: বিশদ - লাইন ক্রম / বাছাই
যদি দুটি বা ততোধিক উপ-শাখা একই পিতামাতাকে ভাগ করে নিচ্ছে তবে শাখাগুলি উপ-শাখাগুলি ক্রমবর্ধমান ক্রমে সর্বোচ্চ # মিউটেশনগুলির সর্বোচ্চ # দ্বারা অর্ডার করা হয়েছে। আমাদের উদাহরণে L0a1'4
, L0a3
এবং L0a2
শেয়ার পিতা বা মাতা: L0a
।
গাছের দৃশ্যে উপরের থেকে নীচে অবধি ক্রমটি হল, প্রথম শাখাগুলি প্যারেনেসিসের মধ্যে মোট মিউটেশনের সর্বাধিক #: L0a3
(53), L0a1'4
(55), L0a2
(60)।
যদি দুটি বা ততোধিক সাব-শাখা শিশু শাখায় একই সর্বোচ্চ # পরিব্যক্তি ভাগ করে, তবে তারা উল্লম্বভাবে একই স্থান থেকে তাদের পিতামাতার কাছ থেকে প্রান্তিকরেখা এবং ব্রাঞ্চ করা হয়, sub সাব-শাখাগুলির মধ্যে লাইন ক্রম বর্ণমালা হয়।
আউটপুট: বিশদ - গাছ (অংশ বি)
গাছ নিম্নলিখিত ASCII অক্ষর দিয়ে অঙ্কনের করা উচিত: └
, ─
, ┬
, ┐
, ├
, │
,♦
গাছটির যুক্তি হ'ল সমস্ত মিউটেশন উপস্থাপন করা উচিত। পিতামাতাদের শাখা থেকে একটি শাখা: ┬
বা ┐
1 রূপান্তর উপস্থাপন করে। একই শাখায় অতিরিক্ত অনন্য মিউটেশনগুলি প্রতিনিধিত্ব করে: ♦
এবং সেগুলি অবশ্যই বাম-সারিবদ্ধ এবং প্রথম উপ-শাখার সামনে স্থাপন করা উচিত।
উপ-শাখাগুলি তাদের পিতামাতার কাছ থেকে এক্স-অক্ষের সাথে শাখা করা হয় এবং পরবর্তী সমস্ত শিশু শাখাগুলির মধ্যে সর্বাধিক # রূপান্তর দ্বারা অবস্থান নির্ধারণ করা হয়।
ইনপুটটিতে 2 টি বিভিন্ন ধরণের ইনপুট লাইন থাকার আগে ইঙ্গিত দেওয়া হয়েছে। কোনও 'অক্ষর বা শাখার নামটিতে এনএল প্রত্যয় সহ 1 টি টাইপ করুন, তাদের লাইনটির ডানদিকে ডানদিকে অনুভূমিক রেখাটি পূরণ করা উচিত নয় তবে শেষ ┐
উপ-শাখায় একটি দিয়ে শেষ করা উচিত। উদাহরণস্বরূপ এটি নিম্নলিখিত শাখাগুলিতে প্রয়োগ করা হয়:
L0a'b'f'k;L0;14
L0a'b'f;L0a'b'f'k;23
L0a'b;L0a'b'f;30
L0a1'4;L0a;39
L0a1a NL;L0a1a;43
L0a1 NL;L0a1;41
L0a1b NL;L0a1b;45
L0d1'2;L0d;25
L0d1 NL;L0d1;31
L0d2a'b;L0d2;32
আশা করি উদাহরণটি ইনপুট এবং আউটপুট গাছটিকে কীভাবে আঁকতে হবে সে সম্পর্কে কোনও অতিরিক্ত প্রশ্নের উত্তর দেয়, এটিকে যুক্তিটি বের করার চ্যালেঞ্জের অংশ হিসাবে বিবেচনা করুন।
প্রেরণা
আপনি অনুপ্রেরণা জন্য আমার (অ-golfed) জাভাস্ক্রিপ্ট সংস্করণ চেষ্টা করে দেখতে স্বাগত জানাই: http://artificial.se/DNA/mtDNAmutationTree3.html (এটা ত্রুটি পরীক্ষা অভাব আছে, এবং কিছু পরিসংখ্যান যোগ করা হয় যে এই বিশেষ চ্যালেঞ্জ অংশ নয়) ।
[ Http://www.phylotree.org/ mtDNA ট্রি বিল্ড 16 (19 ফেব্রুয়ারী 2014) এর উপর ভিত্তি করে) একটি সম্পূর্ণ এমটিডিএনএ-ট্রি সংস্করণ এখানে পাওয়া যাবে:
http://artificial.se/DNA/mtDNAfull.html
পূর্ণ গাছের জন্য ব্যবহৃত ডেটা-ফাইল:
http://artificial.se/DNA/mtDNA_full.txt
এটি একটি কোড-গল্ফ চ্যালেঞ্জ।
L0a1'4
(55) নয় (39) L0a2
নয়, (60) নয় (47) ... আপনি কি এটি পরিষ্কার করতে পারেন?
L0d1
L0d2
বাছাইয়ের নিয়ম অনুযায়ী, আগে স্থাপন করা উচিত নয় : "... অবতরণ ক্রম ..."