Görev
İyi bilindiği gibi, Dünya üzerinde bilinen tüm canlıların genetik materyali DNA'da kodlanmıştır; dört nükleotit adenin, timin, sitozin ve guanin kullanılarak. (Genellikle ATGC tarafından temsil edilir).
Tüm genomu depolamak isteyen bir biyoinformatik, elbette bunu ASCII olarak saklamak istemez, çünkü her seçim sadece iki bitle temsil edilebilir!
Şartname
Göreviniz kabul etmeyi seçerseniz, ASCII temsilini ikili temsile ve geri dönüştürmek için bir çift program, işlev veya yöntem yazmaktır; temsil A
olarak b00
, T
yanı b01
, G
sıra b10
ve C
şekilde b11
(bundan sonra "birim").
Ayrıca, her baytın yüksek bitleri bayttaki birim sayısını içermelidir, bu da her baytın bir üçlüyü temsil etmesini sağlar.
Örneğin: "GATTACCA"
olur b11 100001 b11 010011 b10 1100xx
.
ASCII'den ikili girişe boşluklar, sekmeler ve yeni satırlar göz ardı edilmelidir. Setinde olmayan herhangi bir karakter [ \r\n\tATGC]
bir hatadır ve yok sayılabilir veya işlemeyi sonlandırabilir.
İkili - ASCII girişinde, iki yüksek biti olan baytlar b00
yok sayılabilir.
ASCII çıkışı boşluk içerebilir; ancak hiçbir zaman ikili girişin boyutunun artı bir bayt uzunluğunun 4 katından fazla olmamalı ve bir satırsonu ile bitmemelidir.
İkili çıktı isteğe bağlı sayıda b00xxxxxx
"kontrol" baytı içerebilir ; ancak ASCII girişinden asla daha uzun olmamalıdır.
Her dönüşüm programı keyfi uzunluk girişini desteklemelidir; ve kodlamayı veya kod çözmeyi yaklaşık doğrusal zamanda tamamlamalıdır.
Bükülme
Ne yazık ki, bu görevi yerine getirdiğiniz biyoinformatik için, bir şekilde sizi kişisel ama belki de küçük bir düzeyde haksızlığa uğrattı.
Belki kız kardeşinle bir kez dışarı çıktı ve onu bir daha asla aramadı. Belki de köpeğinin kuyruğuna bastı. Ayrıntılar gerçekten önemli değil.
Önemli olan geri ödeme şansınız olması!
Ayrıntılar
Her dönüşüm küçük bir hata oranı getirmelidir; işlenen on bin ila bir milyon birimde bir hata emrinde.
Bir hata aşağıdakilerden biri olabilir:
- Çoğaltma hataları:
"GAT TAC CA"
olur"GAT TAA CCA"
- Silme hataları:
"GAT TAC CA"
olur"GAT TAC A"
- Çeviri hataları:
"GAT TAC CA"
olur"GTA TAC CA"
- Üçlü kopyalar:
"GAT TAC CA"
olur"GAT TAC TAC CA"
- Üçlü kaymalar:
"GAT TAC CA"
olur"TAC GAT CA"
- Üçlü dönüşler:
"GAT TAC CA"
olur"GAT CAT CA"
Bu hatalar elbette koddan hemen belli olmamalıdır; ve girdinin uzunluğuna bakılmaksızın; dönüşüm en az bir hata içermelidir.
Aynı girişlere sahip iki çalışma mutlaka aynı çıkışları üretmemelidir.
Numara
Aşağılık biyoinformatik, orta derecede yetkin bir kodlayıcıdır; ve bazı yapılar otomatik olarak keşfedilecek ve şu şekilde yasaklanacak:
- Rand (), random () veya / dev / urandom veya / dev / random (veya dil eşdeğeri ne olursa olsun) gibi rasgele sayı üreteçlerine yapılan çağrıları otomatik olarak keşfedecektir.
- Ayrıca gereksiz değişkenleri, sayaçları veya döngüleri de fark edecektir.
Puanlama
Kodlayıcı ve kod çözücü ayrı ayrı puanlanacaktır.
Her biri rastgele oluşturulmuş 100 giriş dosyası kümesine karşı 3 kez çalıştırılır, her biri 3 milyon birim büyüklüğünde bir dosyadır.
Kodlayıcı test senaryoları için veriler yaklaşık olarak şu şekilde oluşturulacaktır:
for (l = 1 => bigNum)
for (t = 1 => 20)
random_pick(3,ATGC)
t == 20 ? newline : space
Kod çözücü test senaryoları için veriler yaklaşık olarak aşağıdaki şekilde oluşturulacaktır:
for (u = 1 => bigNum)
for (t = 1 => 20)
random_byte() | 0b11000000
0x00
Kodlayıcı
- Gerçek uzunluktaki beklenen minimum uzunluktan eksik olan her bayt, maksimum -1000'e kadar -1 puan kazanacaktır. (Beklenen minimum uzunluk
ceil(count(ATGC) / 3)
.)
Kod çözücü
- Gerçek uzunluktaki beklenen maksimum uzunluk üzerindeki her bayt, maksimum -1000'e kadar -1 puan kazanacaktır. (Beklenen maksimum uzunluk
size(input) * 4 + 1
.)
Her ikisi de
- Üretilebilecek her türlü hata 100 puan alacaktır; her biri için toplam 600 puan, toplam 1200 puan için.
- Kodlayıcının kendi ortalamasından% 30 daha fazla veya daha az hata ürettiği her test durumu -5 puan cezalandırılacaktır.
- Kodlayıcının kendi ortalamasından% 15 daha fazla veya daha az hata ürettiği her test senaryosuna 5 puan verilecektir.
- Üç çalışmanın da aynı çıktıları ürettiği her test senaryosu -10 puan cezalandırılacaktır.
Zor gereksinimler
Bir giriş şu durumlarda diskalifiye edilecektir:
- Bir üçlüden uzun geçerli herhangi bir giriş için bir hata bile üretemez.
- Performansı, test eldivenini yaklaşık bir saat içinde tamamlayamayacağı şekildedir.
- Ortalama olarak her on bin birimde birden fazla hata üretir.
- Ortalama olarak her milyon birimde birden az hata üretir.
Arayüz
Katılımcılar standart girdi üzerindeki girdiyi kabul etmeli ve standart çıktıya çıktı almalıdır.
Giriş çift fonksiyonlu bir program ise; geçer -e
ve -d
sırasıyla kodlama ve kod çözme için bir program belirlemelidir.
Örnek çağrılar:
$ encoder <infile.txt >outfile.bin
$ decoder <infile.bin >outfile.txt
$ recoder -e <infile.txt >outfile.bin
Kazanan
Kazanan en yüksek puana sahip olan katılımdır; teorik maksimum hata türleri için 1200, hata oluşturma oranlarında kararlılık için 3000 puandır.
Beklenmedik bir beraberlik durumunda; kazanan oy sayısına göre belirlenir.
Ek notlar
Test eldiveni çalıştırmak için her giriş çalışma veya derleme talimatlarını içermelidir.
Tüm girişler tercihen X olmayan bir Linux makinesinde çalıştırılabilir olmalıdır.