미션
잘 알려진 바와 같이, 지구상의 모든 알려진 생물체의 유전 물질은 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 시스템에서 실행 가능해야합니다.