コード例 #1
0
ファイル: skin.c プロジェクト: d-torrance/dockapps
void char_to_window(Display *display, Window win, GC gc, char c, int *x, int y)
{
    int idx, sourcex;

    if(isalpha(c)) {
	idx = letter_index(c);
	sourcex  = letter_source_x(idx);
	XCopyArea(display,RadioSkin.pixmap,win, gc,
		  letters.srcx + sourcex,
		  letters.srcy,
		  letters.w[idx],
		  letters.h,
		  *x,
		  y);
	*x += letters.w[idx];
    } else {
	idx = digit_index(c);
	sourcex  = digit_source_x(idx);
	XCopyArea(display,RadioSkin.pixmap,win, gc,
		  digits.srcx + sourcex,
		  digits.srcy,
		  digits.w[idx],
		  digits.h,
		  *x,
		  y);
	*x += digits.w[idx];
    }
}
コード例 #2
0
LAlphabet
CipherText::frequencies(unsigned int key_length, unsigned int substring_index)
{
  assert(key_length == 0 || substring_index < key_length);

  LAlphabet alphabet;

  if (key_length == 0) key_length = 1;

  // Count letter frequencies
  alphabet.fill(0);
  for (size_t x=substring_index; x < ciphertext_.length(); x += key_length) {
    int letter = letter_index(ciphertext_[x]);
    if (letter != -1)
      alphabet[letter] += 1;
  }

  return alphabet;
}
コード例 #3
0
CipherText *
CipherTextFactory::CipherTextFromStdin()
{
  char c;
  unsigned long readed = 0;
  std::string text;
  VigenereStreamAnalysis *stat = new VigenereStreamAnalysis;

  while (std::cin.get(c)) {
    int index = letter_index(c);
    if (index == -1)
      continue;
    readed++;
    if (readed > MAX_ANALYZED_INPUT_LEN)
      break;
    text.push_back(c);
    stat->put(c);
  }
  stat->put_eof(text);

  // Construct a CipherText object and return it
  return new CipherText(text, stat);
}
コード例 #4
0
ファイル: lcs-omp.c プロジェクト: nunofmaia/lcs
int main(int argc, char const *argv[]) {
    FILE *file;

	int seq1_size = 0;
	char *seq1, *seq2;
	int seq2_size = 0;

    file = fopen(argv[1], "r");
	if (file != NULL) {
        fscanf(file, "%d %d", &seq1_size, &seq2_size);

		seq1 = (char *) calloc(seq1_size + 1, sizeof(char));
		seq2 = (char *) calloc(seq2_size + 1, sizeof(char));

        fscanf(file, "%s %s", seq1, seq2);

	} else {
		printf("%s\n", "Unable to open file");
		exit(-1);
	}

    fclose(file);

    int *P = (int *) calloc(ALPHA_SIZE * (seq2_size + 1), sizeof(int));

	int *matrix = (int*) calloc((seq1_size + 1) * (seq2_size + 1), sizeof(int));
    if (matrix == NULL) {
    	printf("Not enough memory. Learning how to program in C might help...\n");
    	exit(-1);
    }

    int i, j;
    int gap = seq2_size + 1;

    /* Compute P table */
    #pragma omp parallel for private(j)
    for (i = 0; i < ALPHA_SIZE; i++) {
        int index = i * gap;
        char c = C(i);
        for (j = 1; j < seq2_size + 1; j++) {
            char b = seq2[j - 1];
            if (b == c) {
                P[index + j] = j;
            } else {
                P[index + j] = P[index + j - 1];
            }
        }
    }

	for (i = 1; i < seq1_size + 1; i++) {
		int index = i * gap;
        #pragma omp parallel for
		for (j = 1; j < seq2_size + 1; j++) {
			char xi = seq1[i - 1];
            char yj = seq2[j - 1];
            int l_value = letter_index(xi);
            int p_value = P[l_value * gap + j];

            int t = (0 - p_value) < 0? 1 : 0;
            int s = (0 - (matrix[index - gap + j] - t * matrix[index - gap + p_value - 1])) < 0? 1 : 0;

            if (xi == yj) cost(i);
            matrix[index + j] = matrix[index - gap + j] + t * (s ^ 1);
		}
	}

    i = seq1_size;
    j = seq2_size;
    char xi, yj;
    int last_cell = matrix[i * gap + j];
    int len = last_cell;
    char lcs[len + 1];
    lcs[len] = '\0';

    while(last_cell > 0) {
        int index = i * gap + j;
        xi = seq1[i - 1];
        yj = seq2[j - 1];
        if (xi == yj) {
            lcs[last_cell - 1] = xi;
            last_cell--;
            i--;
            j--;
        } else if (matrix[index - gap] > matrix[index - 1]) {
            i--;
        } else {
            j--;
        }
    }

    printf("%d\n%s\n", len, lcs);

    free(matrix);
    free(P);
    free(seq1);
    free(seq2);

	return 0;
}