IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Echanger les lettres dans une chaîne


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut Echanger les lettres dans une chaîne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function ProcessSentence(letters)
    {
    	const charCount = letters.lenght;
    	for (let i = 0; i < charCount / 2; ++i)
    	{
    		letters[i] = letters[charCount - i - 1];
    		letters[charCount - i - 1] = letters[i];
    	}
     
    	for (let i = 0; i < charCount - 3; i += 2)
    	{
    		const tmp = letters[i + 1];
    		letters[i + 1] = letters[i];
    		letters[i] = tmp;
    	}
     
    	letters.join("").toUpperCase();
    	return letters;
    }
     
    const q6_result1 = ProcessSentence("abcd".split(""));
    console.log(q6_result1); // Expected output: CDAB
     
    const q6_result2 = ProcessSentence("hello world!".split(""));
    console.log(q6_result2); // Expected output: D!RLWOO LLHE
     
    const q6_result3 = ProcessSentence(" Test".split(""));
    console.log(q6_result3); // Expected output: stte
    Salut j'arrive pas a faire l'a sortie que je veux exactement . Il me sort les strings normalement mais je voudrais qui les sort comme j'ai mis dans les commentaire. Quelqu'un aurait la solution?
    Merci

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const charCount = letters.lenght;
    La propriété lenght n'existe pas.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    La propriété lenght n'existe pas.
    A d'accord mais du coup je fais comment pour récupérer la longueur des mots ?

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 703
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 703

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    d'accord merci donc si j'ai bien compris a la place de lenght il faudrait que je mettre string ?

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (let i = 0; i < charCount / 2; ++i)
    {
        letters[i] = letters[charCount - i - 1];
        letters[charCount - i - 1] = letters[i];
    }
    Si tu n'utilises pas de variable temporaire (comme dans ton autre boucle), comment veux-tu échanger les lettres de ton tableau sans écraser les valeurs qui étaient dans letters[i]?

  7. #7
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Citation Envoyé par kingja Voir le message
    A d'accord mais du coup je fais comment pour récupérer la longueur des mots ?
    Avec la propriété length.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    ah je pense comprendre donc la variable const charCount = letters.length; doit être dans la boucle ?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Si tu n'utilises pas de variable temporaire (comme dans ton autre boucle), comment veux-tu échanger les lettres de ton tableau sans écraser les valeurs qui étaient dans letters[i]?
    donc ca donnerait cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	for (let i = 0; i < charCount / 2; ++i)
    	{
        const charCount = letters.length;
    		letters[i] = letters[charCount - i - 1];
    		letters[charCount - i - 1] = letters[i];
    	}

  10. #10
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    non, pas du tout.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    je pensais avoir compris donc du coup const charCount = letters.length; reste la ou il étais
    Et du coup je crée une variable temporaire const lgt = letters[i + 1]; comme ca ?

    et a la fin je me retrouve avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
     const charCount = letters.length;
    	for (let i = 0; i < charCount / 2; ++i)
    	{
        const lgt = letters[i + 1];
    		letters[i] = letters[charCount - i - 1];
    		letters[charCount - i - 1] = letters[i];
    	}

  12. #12
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Le but du jeu est d'échanger la valeur des deux variables letters[i] et letters[charCount - i - 1]. Reprends ça demain à tête reposée, car c'est pas en essayant des trucs au hasard que tu vas t'en sortir.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    D'accord je vais écouter ton conseil

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Le but du jeu est d'échanger la valeur des deux variables letters[i] et letters[charCount - i - 1]. Reprends ça demain à tête reposée, car c'est pas en essayant des trucs au hasard que tu vas t'en sortir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function ProcessSentence(letters) {
    	const charCount = letters.length;
    	for (let i = 0; i < charCount / 2; ++i) {
    		const tmp = letters[i];
    		letters[i] = letters[charCount - i - 1];
    		letters[charCount - i - 1] = tmp;
    	}
     
    	for (let i = 0; i < charCount; i += 2) {
    		const tmp = letters[i + 1];
    		letters[i + 1] = letters[i];
    		letters[i] = tmp;
    	}
     
    	letters = letters.join("").toUpperCase();
    	return letters;
    }
     
    const q6_result1 = ProcessSentence("abcd".split(""));
    console.log(q6_result1); // Expected output: CDAB
     
    const q6_result2 = ProcessSentence("hello world!".split(""));
    console.log(q6_result2); // Expected output: D!RLWOO LLHE
     
    const q6_result3 = ProcessSentence("Eden Games - Technical Test".split(""));
    console.log(q6_result3); // Expected output: STTEL CANICHTE- S MEGAN DEE
    voila , après une bonne nuit de repos

  15. #15
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Impeccable. Ça y est tu as le bon algorithme.

    Pour aller plus loin:
    • Une fonction que l'on nomme ProcessSentence devrait plutôt prendre en paramètre une chaîne plutôt qu'un tableau de caractères. (ce qui implique de placer le split dans la fonction.)
    • Bien qu'il s'agisse sûrement d'un exercice didactique destiné à manipuler notamment les boucles, il est bon de savoir qu'on peut renverser un tableau directement grâce à la méthode Array.prototype.reverse().
    • Pour ce qui est de l'inversion des lettres 2 à 2, on peut utiliser String.prototype.replace() avec la pattern /(.)(.)/g et le remplacement '$2$1' (ce qui revient à capturer 2 caractères pour les inverser, $n représentant ce qui est capturé par les parenthèses dans la pattern.)


    On peut donc parvenir au même résultat avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function ProcessSentence(str) {
        return str.split('')
                  .reverse()
                  .join('')
                  .replace(/(.)(.)/g, '$2$1')
                  .toUpperCase();
    }
     
    console.log(ProcessSentence("Eden Games - Technical Test"));

    Il est aussi possible d'intervertir deux variables sans passer par une variable temporaire en utilisant l'affectation par décomposition (destructuring assignment en anglais):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let a=1, b=2;
    [a, b] = [b, a];

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 27
    Par défaut
    ok d'accord c'est bon a savoir je connaissais pas ses méthodes

  17. #17
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    On peut aussi ne pas spliter la chaîne du tout et la parcourir en sens inverse par pas de 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function ProcessSentence(str) {
        let result = '';
     
        for (let i = str.length; i > 1; i -= 2) {
            result += str.slice(i - 2, i);
        }
     
        if (str.length & 1) result += str[0];
     
        return result.toUpperCase();
    }
    Le if teste si la longueur de la chaîne est impair et dans ce cas ajoute le caractère restant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DELPHI] Problème de String <-> MemoryStream
    Par Squall78 dans le forum Delphi
    Réponses: 19
    Dernier message: 17/09/2006, 10h56
  2. Problème d'activation JavaScript
    Par Souls Destroyer dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/08/2006, 20h42
  3. Problème de reconnaissance javascript vbscript
    Par mouste79 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2006, 20h12
  4. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 23h50
  5. [D7][Débutant] Problème conversion String <- TEdit
    Par _alex_ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/02/2006, 23h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo