Skip to content

Commit

Permalink
Premier jet de la fonction sub_str, elle nous permettra de remonter d…
Browse files Browse the repository at this point in the history
…ans l'espace

de positions pour renvoyer le bon morceau de string. Elle sera appelée par gen_str
(pas encore écrite, en cours de refléxion)
Elle marche avec un alphabet de 2 char, faut juste gérer le cas d'une pass_len de 1.
A essayer avec un alphabet plus grand.
  • Loading branch information
steven.liatti committed Nov 1, 2016
1 parent 140bfa8 commit 6ce1162
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 32 deletions.
32 changes: 0 additions & 32 deletions src/test_steven/test_steven.c

This file was deleted.

47 changes: 47 additions & 0 deletions src/test_steven/test_sub_str.c
Original file line number Diff line number Diff line change
@@ -0,0 1,47 @@
#define _GNU_SOURCE
#include <crypt.h>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
#include <assert.h>

const int alphabet_size = 2;

int pass_len(long position) {
int i = 1;
long min = 0;
long max = (long) (pow(alphabet_size, i));

while (!(min <= position && position < max)) {
min = max;
i ;
max = (long) (pow(alphabet_size, i));
}

return i;
}

long sub_str(int pass_len_actual, int pass_len_choose, long position) {
if (pass_len_actual == pass_len_choose) {
return position;
}
else {
long past_position = (long) pow(alphabet_size, pass_len_actual - 1);
long new_position = position - past_position;
while (pass_len(new_position) == pass_len_actual) {
new_position = new_position - past_position;
}
return sub_str(pass_len_actual - 1, pass_len_choose, new_position);
}
}

int main() {
for (int i = 30; i >= 0; i--) {
int pass_len_actual = pass_len(i);
int pass_len_choose = pass_len_actual - 1;
long position = i;
printf("De %d on va à %ld\n", i, sub_str(pass_len_actual, pass_len_choose, position));
}
}

0 comments on commit 6ce1162

Please sign in to comment.