Chuck Norris (partie 1) | CodinGame

in #fr6 years ago

Capture.PNG

Bonjour, dans mon dernier article, je faisais la présentation de la plateforme CodinGame. Le principe vous a plu alors je pense que je vais continuer cette série. Cependant, elle prend pas mal de temps à rédiger car j'essaie d'être le plus claire possible mais ce n'est pas évident d'expliquer un raisonnement logique.

Dans cet article, je vais donc faire comme la dernière fois. A savoir lire le sujet de l'exercice et coder tout en expliquant mon raisonnement.

Chuck Norris

Dans ce nouveau challenge, je vais apprendre à utiliser les boucles, les conditions, les chaînes de caractères et l'encodage (l'encodage est un système de règles pour convertir une information comme une lettre, un mot, son, image, ou un geste en une autre forme ou représentation, parfois abrégé ou secrète).

Capture.PNG

Comme vous pouvez le voir, le but va être de code des messages donnés en unaire. C'est à dire de transformer une chaînes de caractère en 0. Bien évidemment, les 0 vont devoir suivre un ordre logique.

Cette fois-ci, l'IDE (Environnement de Développement Intégré) nous donne que très peu de code (je suis en langage C#) :

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 **/
class Solution
{
    static void Main(string[] args)
    {
        string MESSAGE = Console.ReadLine();

        // Write an action using Console.WriteLine()
        // To debug: Console.Error.WriteLine("Debug messages...");

        Console.WriteLine("answer");
    }
}

Mais nous avons cependant beaucoup de renseignements dont les règles suivantes :

2.PNG

Nous avons ici quelques renseignements sur comment coder nos messages. Nous allons tout d'abord les convertir en binaire puis en unaire (le binaire ressemble à ça : 1000011 -> pour coder C).

Si nous suivons les règles, le code unaire de C donnera finalement :

  • le 1 que nous allons coder en 0 0
  • les quatre 0 que nous allons coder en 00 0000
  • les deux 1 que nous allons coder en 0 00

Nous allons donc avoir un message codé qui ressemble à ça : 0 0 00 0000 0 00

De la chaîne au binaire

Avant de passer à l'unaire, nous devons transformer notre chaîne de caractère en séquence binaire. Pour cela rien de plus simple (ou pas :D)

    // Fonction qui prend une chaîne et retourne son codage binaire
    public static string StringToBinary(string data)
    {
        StringBuilder sb = new StringBuilder();
 
        foreach (char c in data.ToCharArray())
        {
            sb.Append(Convert.ToString(c, 2).PadLeft(8, '0'));
        }
        return sb.ToString();
    }

Bon, j'ai trouvé ce code sur Internet je dois vous l'avouer. Pour utiliser cette fonction dans notre code, nous avons juste à l'appeler : StringToBinary() et lui envoyer en paramètre (entre les parenthèses) la chaîne à convertir en binaire.

Pour le moment, ce code nous retourne donc du binaire :

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 **/
class Solution
{
    static void Main(string[] args)
    {
        string MESSAGE = Console.ReadLine();

        
        // Write an action using Console.WriteLine()
        // To debug: Console.Error.WriteLine("Debug messages...");

        Console.WriteLine(StringToBinary(MESSAGE));
    }
    
    public static string StringToBinary(string data)
    {
        StringBuilder sb = new StringBuilder();
 
        foreach (char c in data.ToCharArray())
        {
            sb.Append(Convert.ToString(c, 2).PadLeft(7, '0'));
        }
        return sb.ToString();
    }
}

Capture.PNG

Il ne nous reste maintenant juste qu'à convertir ce binaire en unaire mais ça je le garde pour un prochain épisode car comme j'ai déjà eu l'occasion de le dire, j'écris mon article en même temps que je fais l'exercice et il se fait donc un peu tard !

Un développeur ne se couche jamais tard :D blague

Sort:  

Merci pour ce partage, toujours intéressant de suivre ton raisonnement Et cette fois, je ne suis pas en retard !

Ce post a été supporté par notre initiative de curation francophone @fr-stars.
Rendez-vous sur notre serveur Discord pour plus d'informations

Coin Marketplace

STEEM 0.20
TRX 0.20
JST 0.034
BTC 89557.69
ETH 3064.76
USDT 1.00
SBD 2.96