บทเรียนพันธุศาสตร์เล็กน้อย
เมื่อคุณเข้าถึงลักษณะหรือฟีโนไทป์ที่มองเห็นได้ของใครบางคนเชื้อสายของประวัติครอบครัวมักถูกนำมาใช้เพื่อหาข้อมูลทางพันธุกรรมที่แท้จริงหรือจีโนไทป์ของสมาชิกในครอบครัวแต่ละคน
เมื่อจัดการกับการปกครองแบบง่าย ๆที่เราจะเป็นแผนภูมิสายเลือดที่เรียบง่ายจะเพียงพอที่จะคิดออกอัลลีลหรือรุ่นของยีนที่พวกเขามีของแต่ละคน ในการปกครองง่าย ๆ คนที่มีอัลลีลที่โดดเด่น (แสดงด้วยตัวพิมพ์ใหญ่) มักจะมีลักษณะที่รุ่นนั้นหมายถึงไม่ว่าอัลลีลอื่น ๆ ต้องใช้อัลลีลแบบถอยกลับสองอัน (แทนด้วยตัวพิมพ์เล็ก) เพื่อแสดงเวอร์ชันนั้น กล่าวอีกนัยหนึ่งอัลลีลที่โดดเด่นมักจะปกปิดรุ่นที่ด้อยของยีนนั้น นี่คือตัวอย่างของแผนภูมิสายเลือด:
แต่ละแถวที่นี่เป็นยุค แวดวงเป็นเพศหญิงสี่เหลี่ยมเพศชายเส้นแนวนอนคือการแต่งงานเด็กเส้นแนวตั้ง ค่อนข้างง่าย สีดำหมายถึงฟีโนไทป์ถอยสีขาวที่โดดเด่น เริ่มต้นจากด้านบน (ถือว่าอัลลีลเป็นA
และa
) เรารู้ว่าคนที่ 2 มีaa
recessive homozygous เพราะนั่นเป็นตัวเลือกเดียวที่เป็นไปได้สำหรับฟีโนไทป์ถอย ตอนนี้แม้ว่าคนคนหนึ่งอาจเป็นได้ทั้งฟีโนไทป์Aa
หรือAA
ที่โดดเด่นเพราะเขามีเด็กถอยเขาต้องAa
หรือ heterozygous คุณสามารถทำสิ่งนี้กับคนอื่นทั้งหมด ในกรณีที่คุณไม่ได้มีข้อมูลใด ๆ A_
ที่ช่วยให้คุณสามารถที่จะคิดออกอัลลีลที่สองก็สามารถทำได้เช่นดังนั้น:
งานของคุณ
- คุณจะได้รับแผนภูมิสายเลือดในรูปแบบของรายการของรุ่นเช่น
[GenI, GenII, etc.]
ในรูปแบบสติใด ๆ - แต่ละรุ่นจะเป็นรายการของสตริงแต่ละสตริงแสดงถึงบุคคล
- ผู้คนประกอบด้วยสามส่วน - รหัสประจำตัวฟีโนไทป์และ "การเชื่อมต่อ" ของพวกเขา
- ID ของพวกเขาเป็นตัวละครเดียว ASCII พิมพ์ที่เป็นเอกลักษณ์ในทั้งต้นอื่นที่ไม่ใช่หรือ
A
a
(ไม่ไม่เกิน 95 คนในแผนภูมิ) - ฟีโนไทป์ของพวกเขาคือหนึ่ง
A
หรือa
,A
การเป็นอัลลีลที่โดดเด่นและa
เป็นถอย - การเชื่อมต่อของพวกเขาเป็นลำดับของ ID ของคนอื่น ๆ ที่พวกเขามีการเชื่อมต่อด้วย
- การเชื่อมต่อในรุ่นเดียวกันคือการแต่งงานในรุ่นที่แตกต่างกันคือเด็กและผู้ปกครอง
- การเชื่อมต่อจะถูกทำซ้ำทั้งสองด้าน (เช่นสามีบอกว่าเขาเป็นสามีของภรรยาและภรรยาบอกว่าเธอเป็นสามีของภรรยา)
- คุณต้องเข้าใจจีโนไทป์ของทุกคนให้มากที่สุด
- ส่งคืนรายการเดียวกันยกเว้นแทนที่ด้วยคนใส่จีโนมของพวกเขาในตำแหน่งเดียวกัน
- ลักษณะทางพันธุกรรมจะต้องมีการออกมาในการสั่งซื้อเพื่อให้แทน
Aa
aA
- รูปแบบการป้อนข้อมูลเล็ก ๆ น้อย ๆ นั้นใช้ได้
- นี่คือ code-golf ดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
ตัวอย่าง
[["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"]]
) หรือไม่