Last active
February 25, 2021 10:22
-
-
Save lefuturiste/30862f753b11e2eaa546271f2a301fa2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
https://www.isograd.com/FR/solutionconcours.php | |
Dev Champion 2019, enoncé: Touches boguées | |
Énoncé | |
Votre colocataire, futur doctorant en droit, a préféré passer les six derniers mois en vacances plutôt qu'à la bibliothèque. A son retour, il prétend avoir bien avancé sur son mémoire et vous vous demandez comment ? Il a laissé son ordinateur dans le salon. Il est sensé rendre le mémoire la semaine prochaine et vous demande de relire les 150 pages du document. Vous n'êtes pas très motivé mais vous vous lancez quand même dans la lecture. A peine avez vous commencé que vous ne comprenez rien. Pas parce que vous n'êtes pas compétent, mais tout simplement parce que ce n'est pas français. Evidemment ! Votre coloc a dû récupérer un ordinateur avec des touches boguées. | |
Plus le temps de lire, il faut absolument rendre compréhensible le mémoire. Après avoir identifié la correspondance des lettres, vous allez écrire un programme qui permettra au document de retrouver du sens. | |
Par exemple, supposons que les touches a l s t u soient boguées et correspondent à p r y d e. Alors le mot ypred, analysé dans votre programme redeviendrait salut. | |
Format des données | |
Entrée | |
Ligne 1 : un entier N compris entre 2 et 15 correspondant au nombre de touches boguées. | |
Ligne 2 : N lettres minuscules séparées par des espaces correspondant aux touches boguées. | |
Ligne 3 : N lettres minuscules séparées par des espaces correspondant aux touches de correspondance (la ième touche boguée correspond à la ième touche de correspondance). | |
Ligne 4 : C chaînes de caractères comprenant entre 3 et 10 caractères en minuscules ou majuscules correspondant au mémoire à traduire. C est compris entre 1 et 100. | |
Sortie | |
Le mémoire traduit. C'est à dire la chaîne de caractères correspondant au mémoire en remplaçant toutes les lettres boguées par les lettres correspondantes tout en respectant les minuscules / majuscules. | |
*/ | |
/******* | |
* Read input from STDIN | |
* Use: printf(...) or fprintf( stdout, ...) to output your result to stdout. | |
* Use: fprintf(stderr, ...); to output debugging information to stderr. | |
* ***/ | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include "libisograd.h" | |
#include <ctype.h> | |
int main() { | |
char s[1024]; | |
int i = 0; | |
int n = 0; | |
int l = 0; | |
char input[8192]; | |
char output[8192]; | |
char computed[8192]; | |
while (scanf("%s", &s) != EOF) { | |
fprintf(stderr, "%s \n", s); | |
if (i == 0) { | |
n = atoi(s); | |
goto lol; | |
} else if (i > 0 && i <= n) { | |
input[i-1] = s[0]; | |
//fprintf(stderr, "input: %s \n", s); | |
} else if (i > n && i <= n*2) { | |
output[i-n-1] = s[0]; | |
} else { | |
// we received a complete word | |
// we will browse this word to get each letter | |
int k = 0; | |
while (s[k] != '\0') { | |
// on recherche la valeur de s dans input | |
int isUpper = 0; | |
int isMissing = 0; | |
int j = 0; | |
while (s[k] != input[j] && j < n+1) { | |
j++; | |
} | |
if (j == n+1) { | |
// the first search failed | |
// now we are looking if he is upper | |
j = 0; | |
while (tolower(s[k]) != input[j] && j < n+1) { | |
j++; | |
} | |
if (j == n+1) { | |
isMissing = 1; | |
} else { | |
isUpper = 1; | |
} | |
} | |
fprintf(stderr, "l: %d, letter: %c, index: %d, isUpper: %d, isMissing:%d \n", l, s[k], j, isUpper, isMissing); | |
if (isUpper && !isMissing) { | |
computed[l] = toupper(output[j]); | |
} else if (isMissing) { | |
computed[l] = s[k]; | |
} else { | |
computed[l] = output[j]; | |
} | |
k++; | |
l++; | |
} | |
computed[l] = ' '; | |
l++; | |
} | |
lol: | |
i++; | |
} | |
printf("%s", computed); | |
// Vous pouvez aussi effectuer votre traitement ici après avoir lu toutes les données | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment