コード例 #1
0
ファイル: challenge_1_4.c プロジェクト: Ybrad/Portfolio
int main(int argc, char **argv)
{
	if(argc > 1)
	{
		int i;
		char line[60], *bests, *opts = 0, bestc, optc = 0, c, *s;
		uint8_t *val;
		size_t n;
		double optv = 0, bestv, v;
		for(i = 1; i < argc; i++)
		{
			FILE *fp = fopen(argv[i], "r");
			while(fscanf(fp, "%s", line) != EOF)
			{
				n = decode_16(line, &val);
				c = 0;
				bestv = 0.0;
				bestc = 0;
				bests = 0;
				while(++c)
				{
					s = encode_char(xor_1char(val, n, c),n);
					v = score_text(s, n);
					//if(line[0] == '3' && line[1] == 'f' &&
					   //line[2] == '1' && line[3] == 'b')
						//printf("%c :: %s :: %f\n", c, s, v);
					if(v > bestv)
					{
						bestv = v;
						bestc = c;
						//free(bests);
						bests = s;
					}
					//else
					//	free(s);
				}
				//printf("%s : %s\n", line, bests);
				if(bestv > optv)
				{
					optv = bestv;
					optc = bestc;
				//	free(opts);
					opts = bests;
				}
				//else
				//	free(bests);
			}
			fclose(fp);
			printf("File '%s' best guess:\n\tPlain-Text:"
				   "%s\n\tKey:%c\n\tScore:%f\n", 
				   argv[i], opts, optc, optv);
		}
	}
}
コード例 #2
0
ファイル: score.cpp プロジェクト: jyting/superstickmanpt3
void Score::render(QPainter &painter)
{
	std::string score_text("The current score is: ");
    std::stringstream ss;
    ss << m_score * m_lives->getLives();
    score_text.append(ss.str());

    QStaticText q_score(score_text.c_str());
    painter.setFont(QFont("Helvetica", 16));
    painter.drawStaticText(0, 0, q_score);
}
コード例 #3
0
int main() {	
	// само окно
	sf::RenderWindow window(sf::VideoMode(width, height), "_dtts");

	// для картинки птицы
	sf::Image bird_image;
	bird_image.loadFromFile("images/bird_0.png");
	bird_image.createMaskFromColor(sf::Color::White);
	sf::Texture bird_texture;
	bird_texture.loadFromImage(bird_image);
	sf::Sprite bird_sprite(bird_texture);

	// для картинки мертвой птицы
	sf::Image dead_bird_image;
	dead_bird_image.loadFromFile("images/dead_bird.png");
	dead_bird_image.createMaskFromColor(sf::Color::White);
	sf::Texture dead_bird_texture;
	dead_bird_texture.loadFromImage(dead_bird_image);
	sf::Sprite dead_bird_sprite(dead_bird_texture);

	// для картинки горизонтального шипа
	sf::Image hor_spike_image;
	hor_spike_image.loadFromFile("images/hor_spike.png");
	hor_spike_image.createMaskFromColor(sf::Color::White);
	sf::Texture hor_spike_texture;
	hor_spike_texture.loadFromImage(hor_spike_image);
	sf::Sprite hor_spike_sprite(hor_spike_texture);

	// для картинки вертикального шипа
	sf::Image ver_spike_image;
	ver_spike_image.loadFromFile("images/ver_spike.png");
	ver_spike_image.createMaskFromColor(sf::Color::White);
	sf::Texture ver_spike_texture;
	ver_spike_texture.loadFromImage(ver_spike_image);
	sf::Sprite ver_spike_sprite(ver_spike_texture);

	// для отображения текущего счета
	sf::Font score_font;
	score_font.loadFromFile("fonts/a_Alterna.ttf");
	sf::Text score_text(sf::String("0"), score_font, 36);
	score_text.setPosition(100, 100);
	score_text.setColor(sf::Color::Black);

	// само поле
	dtts::Field field(width, height, hor_spike_base, hor_spike_height,ver_spike_base,ver_spike_height, complexity, time_step);
	// создадим птицу, кружочки и шипы и получим начальное состояние птицы
	dtts::BirdState bird_state = make_bird_n_other(field);

	bool bird_to_right = true;	// ? птица летит вправо
	bool is_game = false;		// ? игра идет

	// время, прошедшее после смерти птицы
	double after_death_counter = 0.0;

	while (window.isOpen()) {
		// обработка закрытия окна
		sf::Event Event;
		while (window.pollEvent(Event)) {
			if (Event.type == sf::Event::Closed) {
				window.close();
			}
			if (Event.type == sf::Event::MouseButtonPressed) {
				if (Event.mouseButton.button == sf::Mouse::Left) {
					// если игра не идет
					if (!is_game) {
						// игра начинается при нажатии на клавишу
						is_game = true;
					}
					// постольку поскольку нажата мышка, взмах имеет место быть
					field.bird_swing(0);
				}
			}
		}

		// если игра идет
		if (is_game) {

			// птица летит, и получаем ее новое состояние
			bird_state = field.bird_fly(0);

			// если птица мертва, считаем время, прошедшее после сметри
			if (!bird_state.alive) {
				after_death_counter += time_step;
			}

			// если птица мертва достаточно долго, игра прекращается,
			// старая птица удаляется, и создается новая птица, аналогичная старой,
			// также создаются новые шипы
			if (after_death_counter > 1.0) {
				// удаляем старые кружочки
				field.clear_circles(0);
				is_game = false;
				after_death_counter = 0;
				field.erase_bird(0);
				bird_state = make_bird_n_other(field);
			}
			// если живая птица ударилась о стену и поменяла направление
			if (bird_state.alive && bird_state.right_direction != bird_to_right) {
				// запоминаем новое направление
				bird_to_right = bird_state.right_direction;
				// удаляем все шипы
				field.clear_hor_spikes();
				// добавляем шипы на противоположную стену
				field.add_random_hor_spikes(bird_to_right);
			}
		}

		// получаем все шипы на поле
		auto spikes = field.get_hor_spikes();

		// получаем все кружочки на поле
		auto circles = field.get_circles();

		// счет меняется только во время игры
		if (is_game) {
			score_text.setString(sf::String(std::to_string(bird_state.score)));
		}

		// очистка старого изображения
		window.clear(sf::Color::White);


		// для отображение кружочка
		sf::CircleShape circle;
		circle.setFillColor(sf::Color::White);
		circle.setOutlineThickness(1.5);
		circle.setOutlineColor(sf::Color::Green);
		// отображение кружочков
		for (const auto &one_bird_circles : circles) {
			for (const auto &one_circle : one_bird_circles) {
				circle.setPosition(one_circle.x - one_circle.r, height - (one_circle.y + one_circle.r));
				circle.setRadius(one_circle.r);
				window.draw(circle);
			}
		}

		// прорисовка горизонтальных шипов
		for (const auto &one_spike : spikes) {
			hor_spike_sprite.setPosition(one_spike.x - (one_spike.x == 0 ? 0 : hor_spike_height), height - (one_spike.y + hor_spike_base / 2));
			hor_spike_sprite.setTextureRect(sf::IntRect(one_spike.x == 0 ? 0 : hor_spike_height, 0, hor_spike_height, hor_spike_base));
			window.draw(hor_spike_sprite);
		}

		// прорисовка вертикальных шипов
		for (unsigned n = 0; n != std::round(width / ver_spike_base); ++n) {
			ver_spike_sprite.setPosition(n * ver_spike_base, 0);
			ver_spike_sprite.setTextureRect(sf::IntRect(ver_spike_base * 0, 0, ver_spike_base, ver_spike_height));
			window.draw(ver_spike_sprite);
			ver_spike_sprite.setPosition(n * ver_spike_base, height - ver_spike_height);
			ver_spike_sprite.setTextureRect(sf::IntRect(ver_spike_base * 1, 0, ver_spike_base, ver_spike_height));
			window.draw(ver_spike_sprite);
		}

		// прорисовка птицы
		draw_bird(bird_state, (bird_state.alive ? bird_sprite : dead_bird_sprite), window);

		// отображение счета
		window.draw(score_text);

		// отображение нового кадра
		window.display();

		// задержка времени
		Sleep(time_step*1000.0);
	}

	return 0;
}
コード例 #4
0
ファイル: q6.c プロジェクト: hundt/crypto-challenges
int main() {
    char* doc = calloc(1, 1);
    size_t doc_len = 0;
    char* line = NULL;
    size_t n = 0;
    while (getline(&line, &n, stdin) != -1) {
    	size_t line_len = strlen(line);
    	doc = realloc(doc, doc_len + line_len);
    	strncpy(doc + doc_len, line, line_len - 1);
    	doc_len += line_len - 1;
    	doc[doc_len] = '\0';
    }
    
    size_t num_bytes = num_bytes_from_base64(doc_len);
    char* as_bytes = calloc(num_bytes + 1, 1);
    num_bytes = base64_to_bytes(doc, as_bytes, num_bytes);
    as_bytes[num_bytes] = '\0';

    double best_hamming = 1e10;
    int best_keysize = -1;
    // Start at 10 because my score gets false positives at 5 and 9.
    for (int k = 10; k <= 40; ++k) {
    	double hamming = 1.0 * (
    		hamming_distance_n(as_bytes, as_bytes + k, k)
    		+ hamming_distance_n(as_bytes, as_bytes + 2 * k, k)
    		+ hamming_distance_n(as_bytes + 3 * k, as_bytes + 4 * k, k)
    		+ hamming_distance_n(as_bytes + 3 * k, as_bytes + 5 * k, k)) / k;
    	if (hamming < best_hamming) {
    		best_hamming = hamming;
    		best_keysize = k;
    	}
    }

    printf("Best keysize: %d: (score %.4f)\n", best_keysize, best_hamming);

    size_t col_size = num_bytes / best_keysize;
    char* col = calloc(col_size, 1);
    char* key = calloc(best_keysize, 1);
    for (int i = 0; i < best_keysize; ++i) {
    	for (size_t j = 0; j < col_size; ++j) {
    		col[j] = as_bytes[j * best_keysize + i];
    	}
		double best_score = -1.0;
		char best_key = 0;
	    for (int h = 0; h < 256; h++) {
	    	char k = h;
	    	repeated_xor(col, col_size, &k, 1, col);
	    	double score = score_text(col, col_size);
	    	if (score > best_score) {
	    		best_key = k;
	    		best_score = score;
	    	}
	    	// Undo the "decryption"
	    	repeated_xor(col, col_size, &k, 1, col);
	    }
	    key[i] = best_key;
    }

    printf("Key: %s\n", key);

    repeated_xor(as_bytes, num_bytes, key, best_keysize, as_bytes);
    printf("Decoded: %s\n", as_bytes);

    free(as_bytes);
    free(col);
    free(key);
}