Pelajaran genetika kecil
Ketika Anda hanya memiliki akses ke sifat-sifat atau fenotip seseorang yang terlihat , silsilah sejarah keluarga mereka sering digunakan untuk mencari tahu informasi genetik aktual atau, genotipe dari setiap anggota keluarga.
Ketika berhadapan dengan dominasi sederhana seperti kita, bagan silsilah sederhana akan cukup untuk mengetahui alel, atau versi gen yang mereka miliki, dari setiap orang. Dalam dominasi sederhana seseorang dengan alel dominan (dilambangkan dengan huruf kapital) akan selalu memiliki sifat yang diwakili oleh versi itu, tidak peduli alel lainnya. Dibutuhkan dua alel resesif (dilambangkan dengan huruf kecil) untuk mengekspresikan versi itu. Dengan kata lain alel dominan selalu menutupi versi resesif gen itu. Berikut adalah contoh bagan silsilah:
Setiap baris di sini adalah satu generasi. Lingkaran adalah perempuan, kotak laki-laki, garis horizontal adalah pernikahan, garis vertikal anak-anak. Cukup mudah. Hitam berarti fenotip resesif, putih, dominan. Mulai dari atas, (anggap alel adalah A
dan a
), kita tahu orang 2 memiliki aa
, resesif homozigot karena itu adalah satu-satunya pilihan yang mungkin untuk fenotipe resesif. Sekarang walaupun seseorang dapat menjadi fenotip dominan Aa
atau AA
dominan, karena ia memiliki anak resesif, ia harus Aa
, atau heterozigot. Anda dapat melakukan ini untuk semua orang lain. Dalam hal Anda tidak memiliki informasi apapun yang memungkinkan Anda untuk mencari tahu alel kedua, hal itu dapat dilakukan seperti: A_
.
Tugas Anda
- Anda akan menerima bagan silsilah dalam bentuk daftar generasi seperti
[GenI, GenII, etc.]
dalam format waras apa pun. - Setiap generasi akan menjadi daftar string, masing-masing string mewakili seseorang.
- Orang-orang terdiri dari tiga bagian - ID, fenotip mereka, dan "koneksi" mereka.
- ID mereka adalah karakter ascii tunggal yang dapat dicetak yang unik di seluruh pohon selain
A
ataua
. (Tidak, tidak akan ada lebih dari 95 orang di grafik). - Fenotip mereka adalah salah satu dari
A
ataua
,A
menjadi alel dominan, dana
resesif. - Koneksi mereka adalah urutan ID dari orang lain yang memiliki koneksi dengan mereka.
- Koneksi dalam generasi yang sama adalah pernikahan, dalam generasi yang berbeda adalah anak dan orang tua.
- Koneksi diulangi di kedua sisi (yaitu suami mengatakan dia adalah suami istri, dan istri mengatakan dia adalah suami istri).
- Anda harus mengetahui genotipe setiap orang sebanyak mungkin.
- Kembalikan daftar yang sama, kecuali orang, menempatkan genotipe mereka di posisi yang sama.
- Genotipe harus di-output agar
Aa
tidakaA
. - Sedikit kelonggaran pada format input baik-baik saja.
- Ini adalah kode-golf sehingga jawaban terpendek dalam byte menang.
Contohnya
[["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"]]
Bonus
- -30 byte jika Anda berurusan dengan tidak lengkap dan co-dominance juga. Pada deteksi tiga fenotipe alih-alih dua di seluruh bagan, terapkan dominasi tidak lengkap / ko untuk algoritma Anda.
sumber
A
dana
dan membiarkan id dan koneksi seperti apa adanya (yaitu[["0A12","1A02"],["2A301","3a2"]]
menjadi[["0A_12","1A_02"],["2A_301","3aa2"]]
bukan[["A_","A_"],["A_","aa"]]
)?Jawaban:
05AB1E , 39 byte
Port jawaban Java saya .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Java 10,
356349340 byteCobalah online.
Penjelasan umum:
1) Apa pun
a
akan selalu menjadiaa
2a) Jika seorang anak
A
memiliki orang tuaaa
danA
, itu akan menjadiAa
2b) Jika seorang anak
A
memiliki orang tuaA
danA
, itu akan menjadiA_
2c) (Tidak mungkin bagi seorang anak
A
untuk memiliki orang tuaaa
danaa
)3a) Jika orang tua
A
memiliki setidaknya satu anaka
, itu akan menjadiAa
3b) Jika orangtua
A
hanya memiliki anakA
, itu akan menjadiA_
Penjelasan kode:
sumber