미션
잘 알려진 바와 같이, 지구상의 모든 알려진 생물체의 유전 물질은 DNA로 인코딩됩니다. 4 개의 뉴클레오타이드 아데닌, 티민, 사이토 신 및 구아닌을 사용함. (일반적으로 ATGC로 표시).
전체 게놈을 저장하고자하는 생물 정보 학자는 물론 각 선택이 단지 2 비트로 표현 될 수 있기 때문에 이것을 ASCII로 저장하고 싶지 않을 것입니다!
사양
당신이 그것을 받아들이기로 선택한다면, 당신의 임무는 ASCII 표현을 이진 표현으로 변환하는 프로그램, 함수 또는 메소드 쌍을 작성하는 것입니다. 대표 A
로 b00
, T
등 b01
, G
등 b10
, 그리고 C
같은 b11
(이제부터는 "단위").
또한 각 바이트의 상위 비트는 바이트 단위 수를 포함해야하므로 각 바이트는 삼중 항을 나타냅니다.
예를 들면 다음과 같습니다 "GATTACCA"
된다 b11 100001 b11 010011 b10 1100xx
.
ASCII에서 이진 입력으로, 공백, 탭 및 줄 바꿈은 무시해야합니다. 세트에없는 문자 [ \r\n\tATGC]
는 오류이며 무시되거나 처리가 종료 될 수 있습니다.
2 진 대 ASCII 입력에서 2 개의 상위 비트가 b00
무시 되는 바이트는 무시 될 수 있습니다.
ASCII 출력에는 공백이 포함될 수 있습니다. 그러나 이진 입력 크기의 4 배 이상 1 바이트 길이를 초과해서는 안되며 개행 문자로 끝나야합니다.
이진 출력에는 임의의 수의 b00xxxxxx
"제어"바이트 가 포함될 수 있습니다 . 그러나 ASCII 입력보다 길어서는 안됩니다.
각 변환 프로그램은 임의 길이의 입력을 지원해야합니다. 대략 선형 시간으로 인코딩 또는 디코딩을 완료해야합니다.
트위스트
불행히도, 당신이이 일을 수행하고있는 생물 정보 학자에게, 그는 개인적이지만 아직 사소한 수준에서 당신을 어떤 식 으로든 잘못 판단했습니다.
아마 그는 언니와 한 번 나갔고 다시는 전화하지 않았습니다. 아마도 그는 당신의 개 꼬리를 밟았을 것입니다. 세부 사항은 실제로 중요하지 않습니다.
중요한 것은 회수 할 기회가 있다는 것입니다!
상세
각 변환은 작은 오류율을 가져야합니다. 처리 된 10,000 ~ 백만 단위 당 하나의 오류의 순서로.
오류는 다음 중 하나 일 수 있습니다.
- 중복 오류 :
"GAT TAC CA"
이된다"GAT TAA CCA"
- 삭제 오류 :
"GAT TAC CA"
이된다"GAT TAC A"
- 번역 오류 :
"GAT TAC CA"
된다"GTA TAC CA"
- 삼중 중복 :
"GAT TAC CA"
이된다"GAT TAC TAC CA"
- 삼중 slippages :
"GAT TAC CA"
이된다"TAC GAT CA"
- 삼중 반전 :
"GAT TAC CA"
이된다"GAT CAT CA"
물론 오류는 코드에서 즉시 명백하지 않아야합니다. 입력의 길이에 관계없이; 변환시 하나 이상의 오류가 발생해야합니다.
동일한 입력을 가진 두 개의 런이 반드시 동일한 출력을 생성 할 필요 는 없습니다 .
트릭
사악한 생물 정보 학자는 적당히 유능한 코더입니다. 따라서 일부 구조는 자동으로 발견되며 금지됩니다.
- rand (), random () 또는 / dev / urandom 또는 / dev / random (또는 동등한 언어)에서 읽는 것과 같은 시스템 난수 생성기에 대한 호출을 자동으로 감지합니다.
- 또한 불필요한 변수, 카운터 또는 루프를 알 수 있습니다.
득점
인코더와 디코더는 개별적으로 점수가 매겨집니다.
각 파일은 무작위로 생성 된 100 개의 입력 파일 세트에 대해 3 번 실행되며 각 파일의 크기는 3 백만 단위입니다.
인코더 테스트 사례에 대한 데이터는 대략 다음과 같이 생성됩니다.
for (l = 1 => bigNum)
for (t = 1 => 20)
random_pick(3,ATGC)
t == 20 ? newline : space
디코더 테스트 사례에 대한 데이터는 대략 다음과 같이 생성됩니다.
for (u = 1 => bigNum)
for (t = 1 => 20)
random_byte() | 0b11000000
0x00
인코더
- 실제 길이에서 예상되는 최소 길이에서 누락 된 각 바이트는 -1 점 (최대 -1000)입니다. (예상되는 최소 길이는
ceil(count(ATGC) / 3)
입니다.)
디코더
- 실제 길이에서 예상되는 최대 길이를 초과하는 각 바이트는 -1 점 (최대 -1000)입니다. (예상 최대 길이는
size(input) * 4 + 1
입니다.)
양자 모두
- 생성 될 수있는 각 종류의 오류는 100 점을받습니다. 각각에 대해 총 600 점, 총 1200 점.
- 엔코더가 자체 평균보다 30 % 이상 많은 오차를 생성하는 각 테스트 케이스에는 -5 포인트가 부과됩니다.
- 엔코더가 자체 평균보다 15 % 미만의 오차를 생성하는 각 테스트 케이스에는 5 포인트가 부여됩니다.
- 세 번의 런이 모두 동일한 출력을 생성하는 각 테스트 케이스에는 -10 포인트가 부과됩니다.
어려운 요구 사항
다음과 같은 경우 참가 자격이 박탈됩니다.
- 하나의 삼중 항보다 긴 유효한 입력의 경우 하나의 오류도 생성하지 않습니다.
- 성능은 약 1 시간 내에 테스트 건틀릿을 완료 할 수 없습니다.
- 평균적으로 만 단위마다 하나 이상의 오류가 발생합니다.
- 평균적으로 백만 단위마다 하나 미만의 오류가 발생합니다.
인터페이스
참가자는 표준 입력의 입력을 수락하고 표준 출력으로 출력해야합니다.
항목이 이중 기능을 가진 하나의 프로그램 인 경우; 스위치 -e
와 -d
각각 인코딩 및 디코딩을위한 프로그램을 설정해야합니다.
예제 호출 :
$ encoder <infile.txt >outfile.bin
$ decoder <infile.bin >outfile.txt
$ recoder -e <infile.txt >outfile.bin
승자
승자가 가장 높은 점수를받은 항목입니다. 이론상 최대 값은 오류 종류의 경우 1200이고 오류 발생률의 안정성은 3000 포인트입니다.
드물게 추첨의 경우; 우승자는 투표 수에 따라 결정됩니다.
추가 메모
테스트 건틀릿을 실행하기 위해 각 항목에는 실행 또는 컴파일 지침이 포함되어야합니다.
모든 항목은 X가없는 Linux 시스템에서 실행 가능해야합니다.