Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- /**
- * Objectif Le binaire avec des 0 et des 1 c'est bien. Mais le binaire avec que des 0, ou presque, c'est encore mieux.
- * Ecrivez un programme qui, à partir d'un message en entrée, affiche le message codé avec cette technique en sortie.
- *
- * Règles Voici le principe d'encodage :
- *
- * Le message en entrée est constitué de caractères ASCII (7 bits)
- * Le message encodé en sortie est constitué de blocs de 0
- * Un bloc est séparé d'un autre bloc par un espace
- * Deux blocs consécutifs servent à produire une série de bits de même valeur (que des 1 ou que des 0) :
- * - Premier bloc : il vaut toujours 0 ou 00. S'il vaut 0 la série contient des 1, sinon elle contient des 0
- * - Deuxième bloc : le nombre de 0 dans ce bloc correspond au nombre de bits dans la série
- *
- * Exemple Prenons un exemple simple avec un message constitué d'un seul caractère : C majuscule. C en binaire vaut
- * 1000011 ce qui donne avec cette technique :
- *
- * 0 0 (la première série composée d'un seul 1)
- * 00 0000 (la deuxième série composée de quatre 0)
- * 0 00 (la troisième série composée de deux 1)
- * C vaut donc : 0 0 00 0000 0 00
- *
- * Deuxième exemple, nous voulons encoder le message CC (soit les 14 bits 10000111000011) :
- *
- * 0 0 (un seul 1)
- * 00 0000 (quatre 0)
- * 0 000 (trois 1)
- * 00 0000 (quatre 0)
- * 0 00 (deux 1)
- * CC vaut donc : 0 0 00 0000 0 000 00 0000 0 00
- *
- * Entrées du jeu Entrée Ligne 1 : le message composé de N caractères ASCII (sans retour chariot) Sortie Le message encodé
- * Contraintes 0 < N < 100
- *
- * Exemple Entrée C Sortie 0 0 00 0000 0 00
- */
- class Solution {
- public static void main(String args[]) {
- final Scanner in = new Scanner(System.in);
- final String message = in.nextLine();
- final int CHAR_BYTE = Character.SIZE / 2;
- final StringBuilder sBin = new StringBuilder();
- final StringBuilder result = new StringBuilder();
- String prefixTmpBin;
- String tmpBin;
- for (int i = 0; i < message.length(); i++) {
- tmpBin = Solution.toBinaryString(message.charAt(i));
- // Zéro qui manque(nt) à l'avant si le nombre est < à 8bits
- prefixTmpBin = "";
- for (int j = tmpBin.length(); j < CHAR_BYTE - 1; j++) {
- prefixTmpBin += "0";
- }
- tmpBin = prefixTmpBin + tmpBin;
- sBin.append(tmpBin);
- }
- int j = 0;
- for (int i = 0; i < sBin.length(); i = j, j = i) {
- while (j < sBin.length() && sBin.charAt(i) == sBin.charAt(j)) {
- j++;
- }
- if (sBin.charAt(i) == '1') {
- result.append("0 ");
- } else if (sBin.charAt(i) == '0') {
- result.append("00 ");
- }
- for (int k = 0; k < j - i; k++) {
- result.append("0");
- }
- result.append(" ");
- }
- System.out.println(result.toString().trim());
- in.close();
- return EXIT_SUCCESS;
- }
- /**
- * Convertit un caractère en binaire
- *
- * @param c le caractère à convertir
- * @return la représentation binaire du caractère
- */
- public static String toBinaryString(char c) {
- int cValue = (int) c;
- final StringBuilder sb = new StringBuilder();
- while (cValue > 0) {
- if (cValue % 2 == 0) {
- sb.append("0");
- } else {
- sb.append("1");
- }
- cValue /= 2;
- }
- return sb.reverse().toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement