Пример возвращаемого значения:
Rosalind_Sequence_0808
60.92%
Задание: необходимо реализовать программу, которая будет считать показатель GC и выводить в требуемом формате на консоль.
№2. Играем в жизнь
Входе разработки автором была написала программа, которая играет сама с собой в жизнь Конвея (http://ru.wikipedia.org/wiki/Жизнь_(игра)). К
сожалению, часть файлов затерлась, а именно, часть программы, где реализованы четыре функции правил игры в жизнь.
Задание: восстановить утерянные куски кода.
Пример работы программы:
|
Эпоха 1 |
|
Эпоха 2 |
|
|
Эпоха 3 |
| |
| |
| |
* |
| |
| |
* *| |
| |
| |
| |
|
| |
| |
| |
| |
* | => | |
|
| => | |
| |
||
| |
*| |
| |
* |
*| |
| |
*| |
| |
* * *| |
| |
* *| |
| |
* *| |
|
| | | * | | * *|
Исходный код: обратите внимание, что в некоторых случаях код может отличаться в зависимости от вашей платформы и используемого компилятора. Так, например, вместо time.h необходимо использовать unistd.h, если вы работаете под OS X Maverics с компилятором clang.
main.cpp
#include "game.h" #include "console.h" #include <time.h>
// Start program int main()
{
//Set rows and cols of the future field size_t rows = 20, cols = 40;
//Get a blank field
matrix *field = Game::getBlankField(rows, cols);
21
//Some magic things for getting random numbers srand(time(NULL));
//Set randomly alive or dead cell
for (uint i = 0; i < rows; i++) { for (uint j = 0; j < cols; j++) {
field->at(i).at(j) = rand() % 2;
}
}
// 1000 times will be shown for (uint i = 0; i < 1000; i++) {
//Clear console Console::clearUnix();
//Draw the field into console Console::drawField(*field);
//Save the current field...
matrix *oldField = Game::getBlankField(rows, cols); Game::copy(*oldField, *field);
//...and update field Game::step(*field);
//Check if life is frozen. If so break the loop if (Game::isEqual(*oldField, *field))
break;
//Sleep time
usleep(250 * 1000);
}
return 0;
}
console.h
#include <iostream> #include <cstdlib> #include <vector>
typedef std::vector<std::vector<bool> > matrix; typedef unsigned int uint;
/* Utils for working with console */ namespace Console {
// Clear console in *nix void clearUnix() {
system("clear");
}
22
//Clear console in Windows™ void clearWin() {
system("cls");
}
//Let's draw the field into console space! void drawField(matrix &field) {
//For each row...
for (uint i = 0; i < field.size(); i++) {
//...draw first '|'...
std::cout << '|';
//...then for each value in row...
for (uint j = 0; j < field[0].size(); j++) {
// ...draw '*' if the cell is alive, ' ' otherwise...
std::cout << (field[i][j] ? '*' : ' ') << ' ';
}
// ...close row with '|' std::cout << "|\n";
}
}
}
game.h
#include <vector>
typedef std::vector<std::vector<bool> > matrix; typedef unsigned int uint;
/* Functions implement game logic */ namespace Game {
// Returns blaaaank field where nobody is alive matrix *getBlankField(size_t rows, size_t cols) {
matrix *field = new matrix(); // Add rows...
for (uint i = 0; i < rows; i++) { field->push_back(std::vector<bool>()); // ... and values into the row
for (uint j = 0; j < cols; j++) { (field->at(i)).push_back(false);
}
}
return field;
}
23
// Returns rows number
size_t getRows(const matrix &field) { return field.size();
}
// Returns cols number
size_t getCols(const matrix &field) { if (getRows(field) != 0) {
return field[0].size();
}
return -1;
}
//======================= YOUR CODE HERE =======================
//=========================================================
}
Makefile
all:
g++ main.cpp -o ./life
№ 3. Шифрование
Требуется создать программу для шифрования текста шифром Цезаря. Текст может быть любым символом из стандартной таблицы ASCIII. Запуск программы осуществляется следующим образом:
$ crypt [options] <key> <source> [<dest>]
options: |
|
-a, --alphabet=<alphabet> |
alphabet – алфавит для работы алгоритма (по умол- |
чанию содержит буквы из латинского алфавита и цифры: AaBbCc..Zz0..9) |
|
-t, --type=<type> |
type может быть 'encode' или 'decode', по умолчанию – |
encode |
|
-h, --help |
выводит эту справку |
key:
ключ для шифрования/дешифрования source:
исходный файл для шифрования/дешифрования dest:
файл, куда будет записан новый зашифрованный текст. Если не указан, то переписывает source
24
Таким образом, команда crypt -a "ABC0" -t encode 1 file_to_encode.txt
зашифрует и перезапишет методом Цезаря файл file_to_encode.txt, сдвинув символы ABC0 на 1, где 1 – это ключ. Параметры могут следовать в любой очередности. Также должны работать следующие вызовы:
$ crypt 5 my.txt
$ crypt -t decode 3 my.txt another.txt
$ crypt -type=encode 3 another.txt my.txt
$ crypt -a "AaBbCcDd0135" 8 "C:/Program Files/yes.txt" "C:/Program Files/no.txt" $ crypt --help
Следующие вызовы должны сообщать о неправильных введенных данных (например, отрицательный ключ или несуществующий файл):
$ crypt my.txt $ crypt -9
$ crype all.txt 1
Следующий вызов приводит к ошибке «Неверно заданы параметры»:
$ crypt -a -t decode 7 my.txt $ crypt -r encode 9 all.txt
№ 4. Стеганография в изображениях
Безопасная передача информации является важной задачей в современном цифровом мире. Одним из методов защиты информации является скрытие факта передачи сообщения. Так, произвольный текст может быть спрятан внутри публично опубликованного изображения, используя избыточность самого изображения.
Стеганогра́фия (от греч. στεγανός – скрытый + γράφω – пишу; буквально «тайнопись») – способ передачи или хранения информации с учетом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввел в
1499 г. Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.
Задание: необходимо реализовать программу, которая размещает исходный текст в цифровом изображении либо получает текст из изображения, хранящего текст. Изображения рекомендуется использовать в формате хранения без потерь (например, bmp). Один байт текста будет кодироваться в одном пикселе изображения. Так, один байт текста 10 101 010 будет расположен в пикселе изображения следующим образом:
25