Compare commits

...

2 Commits

Author SHA1 Message Date
53e82c7673 Correction Cesar 2019-06-01 18:27:38 +02:00
81316c066c Template exercice Cesar 2019-06-01 18:25:32 +02:00
4 changed files with 123 additions and 3 deletions

28
CesarChiffre.java Normal file
View File

@ -0,0 +1,28 @@
import static utils.Utils.*;
public class CesarChiffre {
public static final void main(String[] args) {
afficher("Chiffre de César - chiffrement");
testCesar(CesarChiffre::cesar, true);
}
public static char[] cesar(char[] in, int cle) {
// Pour le caractère espace, pas de transformation
// ALPHABET est un tableau des caractères de l'alphabet dans l'ordre
// int position(char c): retourne la position de la lettre dans l'alphabet
// (à partir de 0)
char[] out = new char[in.length];
for (int i = 0; i<in.length; i++) {
char c = in[i];
if (c == ' ') {
out[i] = c;
} else {
out[i] = ALPHABET[(position(c)+cle) % ALPHABET.length];
}
}
return out;
}
}

28
CesarDechiffre.java Normal file
View File

@ -0,0 +1,28 @@
import static utils.Utils.*;
public class CesarDechiffre {
public static final void main(String[] args) {
afficher("Chiffre de César - déchiffrement");
testCesar(CesarDechiffre::deCesar, false);
}
public static char[] deCesar(char[] in, int cle) {
// Pour le caractère espace, pas de transformation
// ALPHABET est un tableau des caractères de l'alphabet dans l'ordre
// int position(char c): retourne la position de la lettre dans l'alphabet
// (à partir de 0)
char[] out = new char[in.length];
for (int i = 0; i<in.length; i++) {
char c = in[i];
if (c == ' ') {
out[i] = c;
} else {
out[i] = ALPHABET[(ALPHABET.length+position(c)-cle) % ALPHABET.length];
}
}
return out;
}
}

View File

@ -95,4 +95,18 @@ Exemple:
=> InvTab.java
## Exercice 7
Chiffre de César:
Le texte chiffré s'obtient en remplaçant chaque lettre du texte clair original par une lettre à distance fixe, toujours du même côté, dans l'ordre de l'alphabet. Pour les dernières lettres (dans le cas d'un décalage à droite), on reprend au début. Par exemple avec un décalage de 3 vers la droite, A est remplacé par D, B devient E, et ainsi jusqu'à W qui devient Z, puis X devient A etc.
# Idées
* Chiffrement de César
* Chiffrement de Vigenere
* Factoriel
* Nombre d'occurrences d'un mot dans un texte
* Somme des entiers entre 2 entiers donnés
* FizzBuzz

View File

@ -3,10 +3,29 @@ package utils;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.Scanner;
import java.util.function.BiFunction;
public class Utils {
public static final char[] ALPHABET = new char[] {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
public static String[] CESAR_DATA_CLEAR = new String[] {
"quitte moi quittons nous juste un peu trop longtemps",
"pour que nous ressentions le bonheur d etre triste"
};
public static int[] CESAR_DATA_KEYS = new int[] {
7, 9
};
public static String[] CESAR_DATA_CRYPT = new String[] {
"xbpaal tvp xbpaavuz uvbz qbzal bu wlb ayvw svunaltwz",
"yxda zdn wxdb anbbnwcrxwb un kxwqnda m ncan carbcn"
};
public static final void afficher(Object... args) {
if (args == null) {
System.out.println("null");
@ -16,7 +35,7 @@ public class Utils {
.collect(Collectors.joining(" "));
System.out.println(str);
}
System.out.println();
System.out.print(' ');
}
public static final void afficherTabInt(int... args) {
if (args == null) {
@ -28,7 +47,7 @@ public class Utils {
.collect(Collectors.joining(" "));
System.out.println(str);
}
System.out.println();
System.out.print(' ');
}
public static int lireEntier() {
@ -45,4 +64,35 @@ public class Utils {
}
}
public static int position(char c) {
for (int i = 0; i<ALPHABET.length; i++) {
if (ALPHABET[i] == c) {
return i;
}
}
afficher("erreur", c);
return -1;
}
public static void testCesar(BiFunction<char[], Integer, char[]> func,
boolean chiffre) {
for (int i = 0; i<CESAR_DATA_KEYS.length; i++) {
int cle = CESAR_DATA_KEYS[i];
if (chiffre) {
String result = String.valueOf(func.apply(CESAR_DATA_CLEAR[i]
.toCharArray(), cle));
afficher("Clair: " + CESAR_DATA_CLEAR[i]);
afficher("Chiffré: " + result);
afficher("Succès: " + String.valueOf(CESAR_DATA_CRYPT[i]).equals(result));
} else {
String result = String.valueOf(func.apply(CESAR_DATA_CRYPT[i]
.toCharArray(), cle));
afficher("Chiffré: " + CESAR_DATA_CRYPT[i]);
afficher("Clair: " + result);
afficher("Succès: " + String.valueOf(CESAR_DATA_CLEAR[i]).equals(result));
}
afficher();
}
}
}