একটি পেডিগ্রি গণনা করুন


22

একটু জেনেটিক্সের পাঠ

যখন আপনার কেবল কারও দৃশ্যমান বৈশিষ্ট্য বা ফেনোটাইপ অ্যাক্সেস রয়েছে , তাদের পারিবারিক ইতিহাসের একটি বংশবৃদ্ধি প্রায়শই আসল জেনেটিক তথ্য বা পরিবারের প্রতিটি সদস্যের জিনোটাইপ বের করার জন্য ব্যবহৃত হয় ।

যখন সঙ্গে তার আচরণ সহজ আধিপত্য হিসাবে আমরা হতে হবে, একটি সহজ বংশতালিকা চার্ট আউট এলেল ব্যক্তিত্ব, অথবা জিনের সংস্করণে যথেষ্ট হবে প্রতিটি ব্যক্তির আছে তারা। সাধারণ আধিপত্যে একজন প্রভাবশালী অ্যালিলযুক্ত ব্যক্তির (মূলধন বর্ণের সাহায্যে চিহ্নিত) সর্বদা সেই বৈশিষ্ট্য থাকবে যা সেই সংস্করণটি উপস্থাপন করে, অন্য লেইলের কোনও ব্যাপার না। সংস্করণটি প্রকাশ করতে দুটি রিসসিভ অ্যালিল লাগে (ছোট হাতের অক্ষর দিয়ে চিহ্নিত) version অন্য কথায় প্রভাবশালী অ্যালিল সর্বদা সেই জিনের বিরল সংস্করণটি মাস্ক করে। এখানে একটি বংশবৃদ্ধি চার্টের উদাহরণ:

পেডিজ্রি চার্ট

এখানে প্রতিটি সারি একটি প্রজন্মের। চেনাশোনাগুলি মহিলা, পুরুষদের স্কোয়ার, অনুভূমিক রেখাগুলি বিবাহ, উল্লম্ব রেখা শিশু। বেশ সহজ. কালো মানে রিসেসিভ ফেনোটাইপ, সাদা, প্রভাবশালী। শীর্ষ থেকে শুরু করে (অনুমান করুন অ্যালিলগুলি হ'ল Aএবং a), আমরা জানি ব্যক্তি 2 আছে aa, সমজাতীয় মন্দা কারণ এটি বিরল ফিনোটাইপের একমাত্র সম্ভাব্য বিকল্প। এখন যদিও ব্যক্তি একজন হয় Aaবা AAপ্রভাবশালী ফিনোটাইপ হতে পারে, কারণ তার একটি ক্রমবর্ধমান সন্তান রয়েছে, তবে তাকে অবশ্যই Aaবা ভিন্ন ভিন্ন হতে হবে । আপনি অন্যান্য সমস্ত লোকের জন্য এটি করতে পারেন। ঘটনা যদি আপনি কোন তথ্য যে আপনি দ্বিতীয় আলীল জিনিসটা সম্ভব হবে না, এটা তাই মত করা সম্ভব: A_

তোমার কাজ

  • আপনি [GenI, GenII, etc.]কোনও বুদ্ধিমান বিন্যাসের মতো প্রজন্মের তালিকার আকারে একটি পেডিগ্রি চার্ট পাবেন ।
  • প্রতিটি প্রজন্ম স্ট্রিংগুলির তালিকা হবে, প্রতিটি স্ট্রিং একজন ব্যক্তির প্রতিনিধিত্ব করে।
  • লোকেরা তিনটি অংশ নিয়ে গঠিত - একটি আইডি, তাদের ফেনোটাইপ এবং তাদের "সংযোগগুলি"।
  • তাদের আইডি হ'ল একক মুদ্রণযোগ্য আসকি চরিত্র যা পুরো গাছটিতে Aবা ব্যতীত অন্যরকম a। (না, চার্টে 95 জনের বেশি লোক থাকবে না)
  • তাদের ফেনোটাইপ এক Aবা a, Aপ্রভাবশালী আলীল হচ্ছে, এবং aপ্রচ্ছন্ন হচ্ছে।
  • তাদের সংযোগগুলি অন্য ব্যক্তির আইডি এর ক্রম যা তাদের সাথে সংযোগ রয়েছে।
  • একই প্রজন্মের একটি সংযোগ হ'ল বিবাহ, বিভিন্ন প্রজন্মের মধ্যে শিশু এবং পিতামাতার।
  • সংযোগগুলি উভয় পক্ষেই পুনরাবৃত্তি হয় (যেমন স্বামী বলেছেন যে তিনি স্ত্রীর স্বামী, এবং স্ত্রী বলেছেন যে তিনি স্ত্রীর স্বামী)।
  • আপনাকে যথাসম্ভব প্রত্যেকের জিনোটাইপগুলি বের করতে হবে।
  • লোকদের পরিবর্তে একই তালিকাটি ফিরে আসুন, তাদের জিনোটাইপগুলি একই অবস্থানে রাখুন।
  • জিনোটাইপটি তার Aaপরিবর্তে ক্রম অনুযায়ী আউটপুট করতে হবে aA
  • ইনপুট ফর্ম্যাটে সামান্য কিছুটা ভাল আছে।
  • এটি কোড-গল্ফ তাই বাইট জিতে সংক্ষিপ্ত উত্তর ।

উদাহরণ

[["0A1234", "1a0234"], ["2A01", "3a01", "4A015678",
"5a4678"], ["6a45", "7A45","8A45"]] (The one above)   ->

[["Aa", "aa"], ["Aa", "aa", "Aa", "aa"], ["aa", "Aa", "Aa"]]

[["0A12", "1A02"], ["2A301", "3a2"]]    ->

[["A_", "A_"], ["A_", "aa"]]

বোনাস

  • -30 বাইট যদি আপনি অসম্পূর্ণ এবং সহ-আধিপত্যের সাথেও ডিল করেন । পুরো চার্টের পরিবর্তে দুটি পরিবর্তে তিনটি ফেনোটাইপ শনাক্ত করার সময়, আপনার অ্যালগোরিদমটিতে অসম্পূর্ণ / সহ আধিপত্য প্রয়োগ করুন।

আমাদের কি কেবলমাত্র সংশোধন করার Aএবং aএইডস এবং সংযোগগুলি যেমন (যেমন পরিবর্তে [["0A12","1A02"],["2A301","3a2"]]হয়ে যায় ) ছেড়ে দেওয়ার অনুমতি দেওয়া হচ্ছে ? [["0A_12","1A_02"],["2A_301","3aa2"]][["A_","A_"],["A_","aa"]]
কেভিন ক্রুইজসেন

উত্তর:


2

05 এ বি 1 ই , 39 বাইট

εNUε'aåi„aaë¯.øX<X>‚è˜y2£lSδåPài„Aaë„A_

আমার জাভা উত্তর পোর্ট ।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

ε                     # Map over the rows of the (implicit) input-list:
 NU                   #  Store the outer-map index in variable `X`
   ε                  #  Map over the strings `y` of the current row:
    'aåi             '#   If the current string contains an "a":
        aa           #    Push string "aa"
       ë              #   Else (it contains an "A" instead):
        ¯.ø           #    Surround the (implicit) input-list with two empty lists
                      #    (05AB1E has automatic wrap-around when indexing lists,
                      #     so this is to prevent that)
           X<X>‚      #    Push `X-1` and `X+1` and pair them together
                è     #    Index both into the list to get (potential) parent and child rows
                 ˜    #    Flatten it to a single list
        y             #    Push the current string we're mapping again
         2£           #    Only leave the first 2 characters (its id and the letter "A")
           l          #    Lowercase the "A" to "a"
            S         #    And convert it to a list of characters: [id, "A"]
             δå       #    Check in each string whether it contains the id and "A"
               P      #    Check for each whether it contained BOTH the id AND "A"
                ài    #    If a child/parent is found for which this is truthy:
                  Aa #     Push string "Aa"
                 ë    #    Else:
                  A_ #     Push string "A_"
                      # (after which the mapped result is output implicitly)

1

জাভা 10, 356 349 340 বাইট

a->{int i=0,j,k,f,z=a.length;var r=new String[z][];for(;i<z;i++)for(r[i]=new String[j=a[i].length];j-->0;)if(a[i][j].contains("a"))r[i][j]="aa";else{var t=".a.*"+a[i][j].charAt(0)+".*";for(f=k=0;i>0&&k<a[i-1].length;)f=a[i-1][k++].matches(t)?1:f;for(k=0;i+1<z&&k<a[i+1].length;)f=a[i+1][k++].matches(t)?1:f;r[i][j]=f>0?"Aa":"A_";}return r;}

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

সাধারণ ব্যাখ্যা:

1) যে কোনও aসর্বদা হয়ে উঠবেaa

২ ক) সন্তানের Aপিতা-মাতা থাকলে aaএবং Aতা Aa
2 বি হয়ে যায় ) যদি সন্তানের Aবাবা-মা থাকে Aএবং Aতা 2 A_
সি হয়ে যায় ) (সন্তানের Aবাবা-মা হওয়া সম্ভব নয় aaএবং aa)

৩ ক) পিতামাতার Aকমপক্ষে একটি সন্তান থাকলে aতা Aa
3 বি হয়ে যাবে ) পিতামাতার যদি Aকেবল সন্তান থাকে Aতবে তা হয়ে যায়A_

কোড ব্যাখ্যা:

a->{                     // Method with 2D String array as both parameter and return-type
  int i=0,j,k,           //  Index-integers
      f,                 //  Flag-integer
      z=a.length;        //  Length-integer
  var r=new String[z][]; //  Result 2D String array
  for(;i<z;i++)          //  Loop over the rows:
    for(r[i]=new String[j=a[i].length];
                         //   Create the inner String-array of the result
        j-->0;)          //   Loop over the columns:
      if(a[i][j].contains("a"))
                         //    If the current node contains "a":
        r[i][j]="aa";    //     Set the result at this node to "aa"
      else{              //    Else(-if the current node contains "A" instead):
        var t=".a.*"+a[i][j].charAt(0)+".*";
                         //     Set a temp String to a regex to check relations and "a"
        for(f=k=0;       //     Set the flag to 0
            i>0&&        //     If the current node has parents:
            k<a[i-1].length;)
                         //      Loop over the row above:
          f=a[i-1][k++].matches(t)?
                         //       If a parent with "a" is found:
            1:f;         //        Set the flag to 1 (else: leave it unchanged)
        for(k=0;i+1<z&&  //     If the current node has children:
            k<a[i+1].length;) 
                         //      Loop over the row below:
          f=a[i+1][k++].matches(t)?
                         //       If child with "a" is found:
            1:f;         //        Set the flag to 1 (else: leave it unchanged)
        r[i][j]=f>0?     //     If the flag is 1:
                 "Aa"    //      Current node changes from "A" to "Aa"
                :        //     Else (flag is still 0):
                 "A_";}  //      Current node changes from "A" to "A_"
  return r;}             //  Return the result
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.