mercredi 11 décembre 2024

Parser CSV or FixedWidthFormat

 en C#, write code that can import the content of the input text files to the common data format used by the analysis. The solution should be extensible to handle others formats and display good object oriented principles. Content that does strictly adhere to either of the two formats should be reject with the message The input is not in a valid format. Read input content using Console.ReadLine().Write output to Console.A number of externally sourced text files are required to provide a complete set of data for some business analysis. The content of each file is considered to be the input to the program as a string array with each line being an element of the array. The content maybe in CSV or FixedWidth format. The target format of the output is serialised JSON with all white space removed. The source and target data schemas are mapped as follows: (Target Output Field, Datatype, CSV input field, fixed width input field) have: (OriginalSourceId, String, Ref, characters 1-4), (TransactionDate, DateTime, Date, characters 5-14), (Value, Decimal, Amount, characters 15-22), (Rate, Decimal, Rate, characters 23-27)


using System;

using System.Collections.Generic;

using System.Globalization;

using System.Linq;

using System.Text.Json;

using System.Text.Json.Serialization;


class Program

{

    public static void Main(string[] args)

    {

        Console.WriteLine("Enter the input content line by line, and type 'END' to finish:");


        List<string> inputLines = new();

        string line;

        while ((line = Console.ReadLine()) != "END")

        {

            inputLines.Add(line);

        }


        try

        {

            // Parse the input using a factory method to determine the format

            var parser = ParserFactory.GetParser(inputLines);

            var records = parser.Parse(inputLines);


            // Serialize the list of records with a custom JSON converter

            var jsonOptions = new JsonSerializerOptions

            {

                WriteIndented = false,

                Converters = { new DateTimeConverter() }

            };

            string jsonArray = JsonSerializer.Serialize(records, jsonOptions);


            // Add curly braces around the array to match the exact format

            string jsonOutput = "{[" + jsonArray.TrimStart('[').TrimEnd(']') + "]}";


            Console.WriteLine(jsonOutput);

        }

        catch (Exception ex)

        {

            Console.WriteLine(ex.Message);

        }

    }

}


// Define a custom DateTime converter

public class DateTimeConverter : JsonConverter<DateTime>

{

    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)

    {

        return DateTime.ParseExact(reader.GetString(), "yyyy-MM-dd", CultureInfo.InvariantCulture);

    }


    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)

    {

        writer.WriteStringValue(value.ToString("yyyy-MM-dd"));

    }

}


// Define a common record format for output

public class Record

{

    public string OriginalSourceId { get; set; }

    public DateTime TransactionDate { get; set; }

    public decimal Value { get; set; }

    public decimal Rate { get; set; }

}


// Define the base parser interface

public interface IParser

{

    List<Record> Parse(List<string> inputLines);

}


// CSV Parser Implementation

public class CsvParser : IParser

{

    public List<Record> Parse(List<string> inputLines)

    {

        var records = new List<Record>();


        foreach (var line in inputLines)

        {

            var fields = line.Split(',');

            if (fields.Length != 4)

                throw new FormatException("The input is not in a valid format.");


            records.Add(new Record

            {

                OriginalSourceId = fields[0].Trim(),

                TransactionDate = DateTime.ParseExact(fields[1].Trim(), "yyyy-MM-dd", CultureInfo.InvariantCulture),

                Value = decimal.Parse(fields[2].Trim(), CultureInfo.InvariantCulture),

                Rate = decimal.Parse(fields[3].Trim(), CultureInfo.InvariantCulture)

            });

        }


        return records;

    }

}


// Fixed Width Parser Implementation

public class FixedWidthParser : IParser

{

    public List<Record> Parse(List<string> inputLines)

    {

        var records = new List<Record>();


        foreach (var line in inputLines)

        {

            if (line.Length < 27)

                throw new FormatException("The input is not in a valid format.");


            records.Add(new Record

            {

                OriginalSourceId = line.Substring(0, 4).Trim(),

                TransactionDate = DateTime.ParseExact(line.Substring(4, 10).Trim(), "yyyy-MM-dd", CultureInfo.InvariantCulture),

                Value = decimal.Parse(line.Substring(14, 8).Trim(), CultureInfo.InvariantCulture),

                Rate = decimal.Parse(line.Substring(22, 5).Trim(), CultureInfo.InvariantCulture)

            });

        }


        return records;

    }

}


// Factory to determine the correct parser

public static class ParserFactory

{

    public static IParser GetParser(List<string> inputLines)

    {

        if (inputLines == null || !inputLines.Any())

            throw new ArgumentException("The input is not in a valid format.");


        // Check the format of the first line

        var firstLine = inputLines.First();


        if (firstLine.Contains(","))

        {

            return new CsvParser();

        }

        else if (firstLine.Length >= 27)

        {

            return new FixedWidthParser();

        }

        else

        {

            throw new FormatException("The input is not in a valid format.");

        }

    }

}


public static int firstOccurrence(string text, string searchPattern)

 en C#, On 'a deux paramètres de type string "s" et "x", Nous devrons retourner la l'indice de la première occurrence de x sur s. the "x" may include a signle wildcard character '*' which matches any one character. Implementation function public static int firstOccurrence(string text, string searchPattern)


using System;


class Program

{

    public static void Main(string[] args)

    {

        string text = "Bonjour tout le monde";

        string searchPattern = "t*ut";


        int index = firstOccurrence(text, searchPattern);

        Console.WriteLine($"L'indice de la première occurrence de \"{searchPattern}\" dans \"{text}\" est : {index}");

    }


    public static int firstOccurrence(string text, string searchPattern)

    {

        if (string.IsNullOrEmpty(text) || string.IsNullOrEmpty(searchPattern))

            return -1; // Entrée invalide.


        int textLength = text.Length;

        int patternLength = searchPattern.Length;


        if (patternLength > textLength)

            return -1; // Le motif ne peut pas être trouvé si sa longueur dépasse celle du texte.


        // Parcourir le texte avec une fenêtre de la taille du motif

        for (int i = 0; i <= textLength - patternLength; i++)

        {

            bool match = true;


            for (int j = 0; j < patternLength; j++)

            {

                // Vérifier la correspondance ou le caractère générique '*'

                if (searchPattern[j] != '*' && text[i + j] != searchPattern[j])

                {

                    match = false;

                    break;

                }

            }


            if (match)

                return i; // Retourner l'indice de la première correspondance.

        }


        return -1; // Aucune correspondance trouvée.

    }

}


static int FindParent(int processNumber)

 en C#, Un arbre où chaque numéro parent est le nombre d'enfants, en respectant l'ordre. Par exemple, le nœud 1 a un seul enfant, nommé 2. Le nœud 2 a deux enfants, nommés 3 et 4. Le nœud 3 a trois enfants, nommés 5, 6 et 7. Le nœud 4 a quatre enfants, nommés 8, 9, 10 et 11. Le nœud 5 a cinq enfants, nommés 12, 13, 14, 15 et 16. Et ainsi de suite. Le besoin ici c'est de retourner le ProcessNumber du parent à partir d'un ProcessNumber donné.



using System;


class Program

{

    static void Main(string[] args)

    {

        int processNumber = 13; // Exemple d'entrée

        int parent = FindParent(processNumber);

        Console.WriteLine($"Le parent du nœud {processNumber} est : {parent}");

    }


    static int FindParent(int processNumber)

    {

        if (processNumber == 1)

            return -1; // Le nœud racine n'a pas de parent.


        int current = 1; // Numéro actuel du nœud.

        int start = 2; // Premier numéro d'enfant.


        while (start <= processNumber)

        {

            int end = start + current - 1; // Dernier numéro d'enfant pour le nœud actuel.

            if (processNumber >= start && processNumber <= end)

                return current;


            current++; // Passer au nœud suivant.

            start = end + 1; // Mettre à jour la plage des enfants pour le prochain nœud.

        }


        return -1; // Si aucun parent n'est trouvé (ne devrait pas arriver si les données sont valides).

    }

}





===========================



static int FindParent(int processNumber)
{
    if (processNumber == 1)
        return -1; // Le nœud racine n'a pas de parent.

    int start = 2; // Premier numéro d'enfant.

    for (int current = 1; start <= processNumber; current++)
    {
        int end = start + current - 1; // Dernier numéro d'enfant pour le nœud actuel.

        if (processNumber >= start && processNumber <= end)
            return current;

        start = end + 1; // Mettre à jour la plage des enfants pour le prochain nœud.
    }

    return -1; // Si aucun parent n'est trouvé (ne devrait pas arriver si les données sont valides).
}

mercredi 27 novembre 2024

implement public static int ComputeDayGains(int nbSeats, List payingGuests, List guestMovements)

 

enC#, given what each guest is ready to pay, you have to compute the restaurant's gains for the day: at the beginning of the day the restaurant is emplty; a guest arrives, finds a seat, eats, pays and then leaves; there are only nbSeats seats avaiable, guests can only eat and pay when they can be seated; a quest which enters the restaurant and cannot find a seat waits in line until a seat is made available or until he/she gets bored and leaves; a guest may come several times during the day, in that case, he/she will pay at most once. implement public static int ComputeDayGains(int nbSeats, List<int> payingGuests, List<int> guestMovements) which returns the gains for the day: list payingGuests gives what guests are ready to pay, the list guestMovements gives in order the arrivals and departures of guests. the first time you see an id, it indicates an arrival, the secondes time you see the same id, it indic a departure. an arrival is always followed later in the day by a departure. the giest indexes are 0-based, all the integers in guestMovements are between 0 and number of guests - 1





public static int ComputeDayGains(int nbSeats, List<int> payingGuests, List<int> guestMovements) {
        // Write your code here
        // To debug: Console.Error.WriteLine("Debug messages...");
         HashSet<int> paidGuests = new HashSet<int>();
         Queue<int> waitingGuests = new Queue<int>();
         int currentSeatsOccupied = 0;
         int totalGains = 0;

         foreach(int id in guestMovements){
            if(waitingGuests.Contains(id) ){
                waitingGuests = new Queue<int>(waitingGuests.Where(x => x != id));
                currentSeatsOccupied--;
            }
            else{
                if(currentSeatsOccupied < nbSeats){
                    currentSeatsOccupied++;
                    if(!paidGuests.Contains(id)){
                        totalGains += payingGuests[id];
                        paidGuests.Add(id);
                    }
                }
                else{
                    waitingGuests.Enqueue(id);
                }
            }
         
         }
       
        return totalGains;

    }

commande de macarons: public static int ComputeTotalPrice(float unitPrice, string[] macarons)

 ecrire un programe calcul le prix d'une commande de macarons. Chque macaron a le meme prix unitaire(donne en input) chaque macaron a une saveur spécifique. Il existe au max 5 saveur différents parmi tous les macarons. Une commande comprend un ou plusieurs lots. Un lot peut contenir jusqua 5 macarons mais ne peut pas contenir des macarons de meme saveur. cherche toujours a remplir les lots de 5 au maximum. L'ordre des macaron dans un lot est sans incidence, et l'ordre des lots entre eux est également sans incidence. reduction en fonction du nombre de saveur diff par lot: 2 saveurs diff dans lot = -10% sur le prix du lot; 3 saveurs diff = -20%; 4 saveur diff = -30%; 5 saveurs diff = -40% sur le prix du lot. Implementer function public static int ComputeTotalPrice(float unitPrice, string[] macarons) , prend en parametres unitPrice, le prix d'un macaron, et macarons est un table de chaines de carateres representant les differentes saveurs. Retourne le prix total de la commande sous forme d'un entier arrondi à l'entier inférieur



using System;

using System.Collections.Generic;

using System.Linq;


public class Program

{

    public static int ComputeTotalPrice(float unitPrice, string[] macarons)

    {

        // Comptage des saveurs de macarons

        Dictionary<string, int> flavorCount = new Dictionary<string, int>();

        foreach (string macaron in macarons)

        {

            if (flavorCount.ContainsKey(macaron))

                flavorCount[macaron]++;

            else

                flavorCount[macaron] = 1;

        }


        // Créer des lots en maximisant le nombre de saveurs distinctes

        List<List<string>> lots = new List<List<string>>();

        

        // Continuer à remplir les lots tant qu'il reste des macarons

        while (flavorCount.Values.Any(count => count > 0))

        {

            List<string> currentLot = new List<string>();


            // Essayer de remplir le lot avec des saveurs différentes

            foreach (var flavor in flavorCount.Keys.ToList())

            {

                if (currentLot.Count < 5 && flavorCount[flavor] > 0)

                {

                    currentLot.Add(flavor);

                    flavorCount[flavor]--;

                }

                if (currentLot.Count == 5) break;  // Un lot ne peut contenir plus de 5 macarons

            }


            lots.Add(currentLot); // Ajouter le lot rempli à la liste des lots

        }


        // Calculer le prix total

        float totalPrice = 0;

        foreach (var lot in lots)

        {

            int uniqueFlavorsCount = lot.Distinct().Count(); // Nombre de saveurs uniques dans le lot

            float lotPrice = unitPrice * lot.Count; // Prix sans réduction pour le lot


            // Appliquer la réduction en fonction du nombre de saveurs différentes dans le lot

            if (uniqueFlavorsCount == 2)

                lotPrice *= 0.9f; // 10% de réduction

            else if (uniqueFlavorsCount == 3)

                lotPrice *= 0.8f; // 20% de réduction

            else if (uniqueFlavorsCount == 4)

                lotPrice *= 0.7f; // 30% de réduction

            else if (uniqueFlavorsCount == 5)

                lotPrice *= 0.6f; // 40% de réduction


            totalPrice += lotPrice;

        }


        // Retourner le prix total arrondi à l'entier inférieur

        return (int)Math.Floor(totalPrice);

    }


    public static void Main()

    {

        // Exemple d'utilisation

        float unitPrice = 2.5f; // Prix unitaire d'un macaron

        string[] macarons = { "vanilla", "chocolate", "strawberry", "vanilla", "chocolate", "raspberry", "lemon", "vanilla" };


        int totalPrice = ComputeTotalPrice(unitPrice, macarons);

        Console.WriteLine($"Le prix total de la commande est : {totalPrice} €");

    }

}


public static string Decode(List words, string message)

 en c#, implementer function public static string Decode(List<string> words, string message) tous les mots qu'ils connaissent sont contenus dans list predefinie. words est une liste de chaine de carateres contenant des mots connus (max: 20) toutes les lettre sont en miniscules, sans accents. message est une chaine de caratere contenant le message codé. Toutes les lettre sont aussi en minucules, sans accents. La methode doit return une chaine de caratere contenant le message décodé




using System;

using System.Collections.Generic;


public class Program

{

    // Fonction pour vérifier si deux mots sont similaires (ex: mélangés)

    public static bool AreWordsSimilar(string word1, string word2)

    {

        // Si la longueur des deux mots est différente, ils ne sont pas similaires

        if (word1.Length != word2.Length)

            return false;


        // Vérification que les lettres des deux mots sont les mêmes (indépendamment de l'ordre)

        var word1Array = word1.ToCharArray();

        var word2Array = word2.ToCharArray();

        Array.Sort(word1Array);

        Array.Sort(word2Array);


        return new string(word1Array) == new string(word2Array);

    }


    public static string Decode(List<string> words, string message)

    {

        string decodedMessage = "";

        int i = 0;


        // Parcourir le message codé caractère par caractère

        while (i < message.Length)

        {

            bool foundMatch = false;


            // Vérifier les mots connus dans la liste

            foreach (var word in words)

            {

                // Si le mot correspond à une sous-chaîne du message à partir de la position i

                if (i + word.Length <= message.Length && AreWordsSimilar(message.Substring(i, word.Length), word))

                {

                    decodedMessage += word; // Ajouter le mot trouvé au message décodé

                    i += word.Length; // Avancer l'index de i après le mot décodé

                    foundMatch = true;

                    break; // Sortir de la boucle dès qu'un mot est trouvé

                }

            }


            // Si aucun mot n'est trouvé, ajouter le caractère actuel du message

            if (!foundMatch)

            {

                decodedMessage += message[i];

                i++; // Passer au caractère suivant

            }

        }


        return decodedMessage;

    }


    public static void Main()

    {

        // Liste des mots connus

        List<string> knownWords = new List<string> { "ball", "funny", "hello", "is", "message", "strawberry", "this" };


        // Message codé à décoder

        string message = "hlelo tihs masegse is fnnuy";


        // Décodage du message

        string decodedMessage = Decode(knownWords, message);

        Console.WriteLine($"Message décodé : {decodedMessage}");

    }

}


public static bool IsOnEvenPosition(List numbers, int value)

 en C# ecrire function public static bool IsOnEvenPosition(List<int> numbers, int value) revoyer true si value est contenu dans la liste numbers à un index paire, value peut etre present à plusieur index paire, auquel cas la fonction doit egelement revoyer true. Si value n'est present à aucun index pair, return false



using System;

using System.Collections.Generic;


public class Program

{

    public static bool IsOnEvenPosition(List<int> numbers, int value)

    {

        // Parcours de la liste avec un index

        for (int i = 0; i < numbers.Count; i++)

        {

            // Vérifier si l'index est pair et si la valeur correspond

            if (i % 2 == 0 && numbers[i] == value)

            {

                return true; // Si la valeur est trouvée à un index pair, retourner true

            }

        }


        return false; // Retourner false si la valeur n'est pas trouvée à un index pair

    }


    public static void Main()

    {

        List<int> numbers = new List<int> { 1, 3, 2, 4, 5, 6 };

        int value = 2;

        

        bool result = IsOnEvenPosition(numbers, value);

        Console.WriteLine($"La valeur {value} est-elle présente à un index pair ? {result}");


        value = 3;

        result = IsOnEvenPosition(numbers, value);

        Console.WriteLine($"La valeur {value} est-elle présente à un index pair ? {result}");

    }

}


mardi 26 novembre 2024

Implementer public static char ScanChar(string s) pour AsciiArt.PrintChar

 AsciiArt.PrintChar permet d'afficher un et un seul caractere ASCII de A a Z (inclusif) sur plusieres lignes et colonnes. Maintenant on souhaite faire l'operation dans l'autre sens: obtenir un caractere à partir de sa representation grapique. Implementer la methode ScanChar(string s) afin qu'elle retourne le caractere associé à la representation graphique fournie par AsciiArt.PrintChar(char c) . Si s ne correspond pas à un caratere entre A et Z, alors ScanChar devra retourner le caratere '?'


 public static char ScanChar(string s)
    {
        for (char c = 'A'; c <= 'Z'; c++)
        {            
            string asciiArt = AsciiArt.PrintChar(c);
            if (asciiArt == s)
            {
                return c;
            }
        }
       
        return '?';
       
    }

Implementer public static List MergeData(List dataStrings)

 en c# vos donnees sont organisees en une liste de chaine de caratere. Chaune d'entre elles correspond a une seule personne et est organisee en paires clé/valeur. un exemple: Name = John, Age=15;Likes=Apples; et Name=Marry; Age=16;Likes=Baked potatoes;Team=Basketball; Vous avez certaines garanties sur les donnees d'entree: Chaque chaine contiendra toujours le champ Name; chque personne peut etre identifiee de maniere unique par le champ Name, s'il y a plusieurs lignes avec le meme valeur de Name, celles ci concernent toutes la meme personne; il peut y avoir des informations redondantes entre les chaine ou meme a l'interieur d'une seule chaine, mais elles ne se contrediront jamais; Les cles et les valeurs peuvent contenir n'importe quel caratere ASCII imprimable, à l'exception de = et de ; , qui sont utilises comme separateurs; Les chaines ne contiennent pas de saut de ligne \r ou\n. Fusionner les donnees et produire une liste regroupant toutes les informations relatives à chaque personne . Ces donnee etre formatee de la maniere suisvante: Toutes les personnes sont triees lexicographiquement par leur champ Name; Le premier champ pour chaque personne est Name, puis tous les autre champs sont tries par leur cle. Contraintes: il y aura au plus 100 chaines de carateres dans la liste; chaque chaine a une longeur max de 10000 caracteres; chaque chaine en sortie aura egalement une longeur max de 10000 carateres; il n'y a pas de champ vide, ni de cle vide, ni de valeur vide. Implementer : /** * @param dataStrings [[anArray]] de chaînes de caractères, où chaque chaîne représente une personne. * @return [[anArray]] de chaînes de caractères, les données d'entrée fusionnées. */ public static List<string> MergeData(List<string> dataStrings)

Étapes de la solution

  1. Analyse des chaînes d'entrée :

    • Parse chaque chaîne pour extraire les paires clé/valeur.
    • Grouper les informations par le champ Name.
  2. Fusionner les informations :

    • Pour chaque personne (identifiée par Name), fusionner toutes ses informations dans un dictionnaire.
  3. Trier et formater les résultats :

    • Trier les personnes par leur Name dans l'ordre lexicographique.
    • Pour chaque personne, trier ses champs (sauf Name, qui est toujours en premier).
    • Formater chaque entrée dans le format requis.
  4. Renvoyer les résultats :

    • Retourner la liste des chaînes regroupées et formatées.

Points importants

  1. Complexité :

    • Parsing des chaînes : O(nm)O(n \cdot m), où nn est le nombre de chaînes et mm est leur longueur moyenne.
    • Tri et fusion : O(nlogn+klogk)O(n \log n + k \log k), où kk est le nombre moyen de champs par personne.
  2. Manipulation des chaînes :

    • Assurez-vous que les clés et les valeurs ne contiennent pas de caractères réservés (= ou ;).
  3. Gestion des données volumineuses :

    • Bien que chaque chaîne puisse être longue, les structures comme Dictionary et SortedDictionary sont adaptées pour gérer efficacement les données fusionnées.

C#: 

public static List<string> MergeData(List<string> dataStrings) {
        // Write your code here
        // To debug: Console.Error.WriteLine("Debug messages...");
        var peopleData = new Dictionary<string, SortedDictionary<string, string>>();
        foreach(string dataS in dataStrings){
            var fields = dataS.Split(';');
            string name = null;
            var currentData = new Dictionary<string, string>();

            foreach(string field in fields){
                var keyValue = field.Split('=');
                string key = keyValue[0].Trim();
                string value = keyValue[1].Trim();

                if(key == "Name"){
                    name = value;
                }

                currentData[key] = value;
            }

            if(name != null){
                if (!peopleData.ContainsKey(name))
                {
                    peopleData[name] = new SortedDictionary<string, string>();
                }

                foreach(var kvp in currentData){
                    peopleData[name][kvp.Key] = kvp.Value;
                }
            }
        }

        var result = new List<string>();
        foreach(var person in peopleData.OrderBy(p=>p.Key)){
            var formattedData = new List<string>();
            formattedData.Add($"Name={person.Key}");

            foreach (var kvp in person.Value.OrderBy(k => k.Key))
            {
                if (kvp.Key != "Name")
                {
                    formattedData.Add($"{kvp.Key}={kvp.Value}");
                }
            }

            result.Add(string.Join(";", formattedData));
        }


        return result;
    }

Test technique c0ding g4me C#

Given a Binary Search Tree, Find the distance between 2 nodes

Binary tree is balanced

Count zeros in a row wise and column wise sorted matrix

so hoan hao (perfect number)

in so va chuoi theo chieu nguoc lai














































=================================================
=================================================

A Palindrome is a word, phrase or sequence which reads the same in both directions.
 /// <summary>
        /// Find string is Palindrome.
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
public static bool IsPalindrome(string value)
        {
            int min = 0;
            int max = value.Length - 1;
            while (true)
            {
                if (min > max)
                {
                    return true;
                }
                char a = value[min];
                char b = value[max];

                // Scan forward for a while invalid.
                while (!char.IsLetterOrDigit(a))
                {
                    min++;
                    if (min > max)
                    {
                        return true;
                    }
                    a = value[min];
                }

                // Scan backward for b while invalid.
                while (!char.IsLetterOrDigit(b))
                {
                    max--;
                    if (min > max)
                    {
                        return true;
                    }
                    b = value[max];
                }

                if (char.ToLower(a) != char.ToLower(b))
                {
                    return false;
                }
                min++;
                max--;
            }
        }

class Program
    {
        /// <summary>
        /// Find Fibonacci number.
        /// </summary>
        /// <param name="n">(int) number</param>
        /// <returns>(int) Fibonacci number<</returns>
        public static int Fibonacci(int n)
        {
            int a = 0;
            int b = 1;
            // In N steps compute Fibonacci sequence iteratively.
            for (int i = 0; i < n; i++)
            {
                int temp = a;
                a = b;
                b = temp + b;
            }
            return a;
        }
        static void Main(string[] args)
        {
            for (int i = 0; i < 15; i++)
            {
                Console.WriteLine(Fibonacci(i));
            }
            Console.Read();
        }
}
************************************************************
Fibonacci recursive

public class Program
    {
        public static void Main(string[] args)
        {
           
              int number = 11;
        for(int counter=0;counter<number;counter++)      
        Console.WriteLine(" \n" + Fibonacci(counter) );
        }
        
        public static int Fibonacci(int number)
    {

        if (number == 0)
            return 0;
        else if(number ==1)
          return 1;
        else
        {
         return Fibonacci(number - 2) + Fibonacci(number - 1);
        }

    }
/// <summary>
      /// Find number is even or odd.
      /// </summary>
      /// <param name="x">(int) number</param>
      /// <returns>(int) return 0 if number is even else 1.</returns>
        public static int EvenOddNumber(int x)
        {
            //bitwise operation
            if ((x & 1) == 0)
                return 0;//even number
            else
                return 1;//odd number

        }

/// <summary>
        /// Find the Nth common element form an array.
        /// </summary>
        /// <param name="items">items array</param>
        /// <param name="p">Nth element</param>
        /// <returns>element</returns>
        public static int GetNthCommonItem(int[] items, int p)
        {
            Dictionary<int, int> ranks = new Dictionary<int, int>();
            foreach (int no in items)
            {
                if (ranks.ContainsKey(no))
                {
                    ranks[no] += 1;
                }
                else
                {
                    ranks[no] = 1;
                }
            }
            //store keys in decending order
            int[] sorted = ranks.Keys.OrderByDescending(x => ranks[x]).ToArray();
            if (p <= sorted.Length)
            {
                return sorted[p - 1];
            }
            else
            {
                return -1;
            }

        }


Nhập số 12345
In ra số 54321

using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            int num, r, sum = 0, t;

            Console.Write("\n");
            Console.Write("In so theo chieu dao nguoc trong C#:\n");
            Console.Write("-----------------------------------");
            Console.Write("\n\n");


            Console.Write("Nhap mot so bat ky: ");
            num = Convert.ToInt32(Console.ReadLine());

            for (t = num; t != 0; t = t / 10)
            {
                r = t % 10;
                sum = sum * 10 + r;
            }
            Console.Write("So theo chieu dao nguoc cua so da cho la: {0} \n", sum); 

            Console.ReadKey();
        } 
    }
}
******************************************
in chuoi dao nguoc
Nhập chuỗi:                    VietJack
In chuỗi theo chiều đảo ngược: kcaJteiV

using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            string str, str1 = "";
            int i, l;

            Console.Write("\n");
            Console.Write("In chuoi theo chieu dao nguoc trong C#:\n");
            Console.Write("-------------------------------------");
            Console.Write("\n\n");

            Console.Write("Nhap mot chuoi: ");
            str = Console.ReadLine();

            l = str.Length - 1;
            for (i = l; i >= 0; i--)
            {
                str1 = str1 + str[i];
            }

            Console.WriteLine("Chuoi dao nguoc cua chuoi ban dau la: {0}", str1);
            Console.Write("\n"); 

            Console.ReadKey();
        } 
    }
}

6 có các ước số ngoại trừ chính nó là 1, 2, 3 và có tổng các ước là 1 + 2 + 3 = 6
--> 6 là số hoàn hảo

using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            int n, i, sum;

            Console.Write("\n");
            Console.Write("Kiem tra so hoan hoa trong C#:\n");
            Console.Write("------------------------------");
            Console.Write("\n\n");

            Console.Write("Nhap mot so bat ky: ");
            n = Convert.ToInt32(Console.ReadLine());
            sum = 0;
            Console.Write("Cac uoc so duong cua so da cho: ");
            for (i = 1; i < n; i++)
            {
                if (n % i == 0)
                {
                    sum = sum + i;
                    Console.Write("{0}  ", i);
                }
            }
            Console.Write("\nTong cua cac uoc so: {0}", sum);
            if (sum == n)
                Console.Write("\nSo da cho la so hoan hao.");
            else
                Console.Write("\nSo da cho khong phai la so hoan hao.");
            Console.Write("\n");              

            Console.ReadKey();
        } 
    }
}

ve tam giac so nguoc

using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            Console.Write("Nhap mot so bat ky: ");
            int num = Convert.ToInt32(Console.ReadLine());

            Console.Write("Nhap do rong cua tam giac: ");
            int width = Convert.ToInt32(Console.ReadLine());

            int height = width;
            for (int row = 0; row < height; row++)
            {
                for (int column = 0; column < width; column++)
                {
                    Console.Write(num);
                }

                Console.WriteLine();
                width--;
            }  

            Console.ReadKey();
        } 
    }
}
***************************************************
ve tam giac so
using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            int i, j, so_hang;
            Console.Write("\n");
            Console.Write("Ve tam giac sao trong C#:\n");
            Console.Write("-------------------------");
            Console.Write("\n\n");

            Console.Write("Nhap so hang: ");
            so_hang = Convert.ToInt32(Console.ReadLine());
            for (i = 1; i <= so_hang; i++)
            {
                for (j = 1; j <= i; j++)
                    Console.Write("*");
                Console.Write("\n");
            }            

            Console.ReadKey();
        } 
    }
}
*****************************************************
tam giac so dang
1
12
123
1234
12345

using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            int i, j, so_hang;

            Console.Write("\n");
            Console.Write("Ve tam giac so trong C#:\n");
            Console.Write("--------------------------");
            Console.Write("\n\n");

            Console.Write("Nhap so hang: ");
            so_hang = Convert.ToInt32(Console.ReadLine());
            for (i = 1; i <= so_hang; i++)
            {
                for (j = 1; j <= i; j++)
                    Console.Write("{0}", j);
                Console.Write("\n");
            }            

            Console.ReadKey();
        } 
    }
}
***************************************************************
tam giac so dang 
  1
     2 3
    4 5 6
   7 8 9 10
   
using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            int i, j, bien_dem, so_hang, k, t = 1;

            Console.Write("\n");
            Console.Write("Ve tam giac so can trong C# - cac so trong tam giac co thu tu tang dan:\n");
            Console.Write("-----------------------------------------------------------------------");
            Console.Write("\n\n");

            Console.Write("Nhap so hang: ");
            so_hang = Convert.ToInt32(Console.ReadLine());
            bien_dem = so_hang + 4 - 1;
            for (i = 1; i <= so_hang; i++)
            {
                for (k = bien_dem; k >= 1; k--)
                {
                    Console.Write(" ");
                }
                for (j = 1; j <= i; j++)
                    Console.Write("{0} ", t++);
                Console.Write("\n");
                bien_dem--;
            }               

            Console.ReadKey();
        } 
    }
}
**********************************************
tam giac so dang 
1
   121
  12321
 1234321
1234543221

using System;

namespace VietJackCsharp
{
    class TestCsharp
    {
        public static void Main()
        {

            int i, j, n;

            Console.Write("\n");
            Console.Write("Ve tam giac so trong C#:\n");
            Console.Write("-----------------------");
            Console.Write("\n\n");

            Console.Write("Nhap so hang: ");
            n = Convert.ToInt32(Console.ReadLine());
            for (i = 0; i <= n; i++)
            {
                /* vong lap nay de in khoang trang */
                for (j = 1; j <= n - i; j++)
                    Console.Write(" ");
                /* Hien thi cac so theo thu tu tang dan tu dau hang cho den giua hang*/
                for (j = 1; j <= i; j++)
                    Console.Write("{0}", j);

                /* Hien thi so theo thu tu giam dan tu giua hang cho den cuoi hang */
                for (j = i - 1; j >= 1; j--)
                    Console.Write("{0}", j);

                Console.Write("\n");
            }   

            Console.ReadKey();
        } 
    }
}

/// <summary>
        /// Reverse string words.
        /// </summary>
        /// <param name="input">(string)(i.e. Hello hai)</param>
        /// <returns>(string)(i.e. hai Hello)</returns>
        public static string ReverseStringWords(string input)
        {
            if (input.Length <= 0) return "";//return empty string.
            //first complement of  string length.
            int len = input.Length >> 1;
            //Reverse string output characters array
            char[] output = new char[input.Length];
            for (int i = 0; i < len; i++)
            {
                output[i] = input[input.Length - i - 1];
                output[input.Length - i - 1] = input[i];
            }
            ReverseStringWords(output);

            return new string(output);
        }
        private static void ReverseStringWords(char[] c)
        {

            int wordStart = 0;
            for (int i = 0; i < c.Length; i++)
            {
                //check space between words.
                if (c[i] == ' ' ||c[i]=='\0')
                {
                    //swap words
                    ReverseCharacters(c, wordStart, i - 1);
                    wordStart = i + 1;
                }
                else if (i == c.Length - 1)
                {
                    ReverseCharacters(c, wordStart, i);
                }
            }
            
        }

        private static void ReverseCharacters(char[] c, int i, int j)
        {
            if (i >= j)
                return;
            for (int k = i; k <= (i + j) / 2; k++)
            {
                char temp = c[k];
                c[k] = c[i + j - k];
                c[i + j - k] = temp;
            }

        }
/// <summary>
        /// Reverse string
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string ReverseString(string input)
        {
            if (input.Length <= 0) return "";//return empty string.
            //first complement of  string length.
            int len = input.Length >> 1;
            //output characters array
            char[] output = new char[input.Length];
            for (int i = 0; i < len; i++)
            {
                output[i] = input[input.Length - i - 1];
                output[input.Length - i - 1] = input[i];
            }
            return new string(output);

        }

/// <summary>
        /// Reverse an Array elements
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        public static int[] ReverseArray(int[] arr)
        {
            if (arr.Length <= 0) return new int[] { };//return empty array.
            //first complement of  array length.
            int len = arr.Length >> 1;
            //temporary variable.
            int temp;
            for (int i = 0; i < len; i++)
            {

                temp = arr[i];
                arr[i] = arr[arr.Length - i - 1];
                arr[arr.Length - i - 1] = temp;
            }
            return arr;

        }

/// <summary>
        /// Find minimum an array element value.
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        public static int MIN(int[] arr)
        {
            if (arr.Length <= 0) return 0;
            int len = arr.Length >> 1;
            //temporary variables.
            int min = arr[0];
            for (int i = 0; i <= len; i++)
            {
                if (arr[i] < min)
                    min = arr[i];
                if (arr[arr.Length - i - 1] < min)
                    min = arr[arr.Length - i - 1];
            }
            return min;

        }
*********************************************************************
/// <summary>
        /// Find maximum an array element value.
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        public static int MAX(int[] arr)
        {
            if (arr.Length <= 0) return 0;
            int len = arr.Length >> 1;
            //temporary variables.
            int max = 0;
            for (int i = 0; i <= len; i++)
            {
                if (arr[i] > max)
                    max = arr[i];
                if (arr[arr.Length - i - 1] > max)
                    max = arr[arr.Length - i - 1];
            }
            return max;

        }
************************************************************************
/// <summary>
        /// Find average an array elements
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        
        public static int AVG(int[] arr)
        {
            if (arr.Length <= 0) return 0;
            int len = arr.Length >> 1;
            //temporary variables.
            int sum = 0;
            int rem = 0;
            for (int i = 0; i <= len; i++)
            {

                sum += arr[i] / arr.Length;
                rem += arr[i] % arr.Length;
                if (i == len)
                    break;
                sum += arr[arr.Length - i - 1] / arr.Length;
                rem += arr[arr.Length - i - 1] % arr.Length;


            }
            return sum + rem / arr.Length;

        }
User interface contains two types of user input controls: TextInput, which accepts all characters and NumericInput, 
which accepts only digits.

Implement the class TextInput that contains:

Public method void Add(char c) - adds the given character to the current value
Public method string GetValue() - returns the current value
Implement the class NumericInput that:

Inherits TextInput
Overrides the Add method so that each non-numeric character is ignored

public class TextInput
{
    public IList<char> list = new List<char>();

    public virtual void Add(char c)
    {
        list.Add(c);
    }

    public string GetValue()
    {
        string r = "";
        foreach (char l in list)
        {
            r = r + l;
        }
        return r;
    }
}

public class NumericInput : TextInput
{
    public override void Add(char c)
    {
        if (c < '0' || c > '9') { }
        else
            list.Add(c);
    }    
}

public class UserInput
{
    public static void Main(string[] args)
    {
        TextInput input = new NumericInput();
        input.Add('1');
        input.Add('a');
        input.Add('0');
        Console.WriteLine(input.GetValue());
    }
}

public class ComputePi1
   {
      public static void main(String[] args)
      {
     int i;                                                               
     int nThrows = 0;                                             
     int nSuccess = 0;                                            
   
     double x, y;                                                 
   
     for (i = 0; i < 1000000 ; i++)                         
     {                                                            
        x = Math.random();      // Throw a dart                   
        y = Math.random();                                                
   
        nThrows++;                                                        
   
        if ( x*x + y*y <= 1 )             
           nSuccess++;                                               
     }                                                            
   
     System.WriteLine("Pi/4 = " + (double)nSuccess/(double)nThrows );
     System.WriteLine("Pi = " + 4*(double)nSuccess/(double)nThrows );
      }
   }
   
  
using System;
 
class Program {
    static double MonteCarloPi(int n) {
        int inside = 0;
        Random r = new Random();
 
        for (int i = 0; i < n; i++) {
            if (Math.Pow(r.NextDouble(), 2)+ Math.Pow(r.NextDouble(), 2) <= 1) {
                inside++;
            }
        }
 
        return 4.0 * inside / n;
    }
 
    static void Main(string[] args) {
        int value = 1000;
        for (int n = 0; n < 5; n++) {
            value *= 10;
            Console.WriteLine("{0}:{1}", value.ToString("#,###").PadLeft(11, ' '), MonteCarloPi(value));
        }
    }
}


int minint = array[0];
int maxint = array[0];
foreach (int value in array) {
  if (value < minint) minint = value;
  if (value > maxint) maxint = value;
}

bool IsDigitsOnly(string str)
{
    foreach (char c in str)
    {
        if (c < '0' || c > '9')
            return false;
    }
    return true;
}


public static double Factorial(int number)    
        {    
            if (number == 0)    
                return 1;    
    
            double factorial = 1;    
            for (int i = number; i >= 1;i-- )    
            {    
                factorial = factorial * i;    
            }    
            return factorial;    
        }  

public static int Tinh(string input)
        {
            return input.Length == 0 ? 0 : input.GroupBy(c => c).Max(group => group.Count());
        }

hoac


var maxCount = 0;
foreach (var c in input)
{
    var count = 0;
    foreach (var d in input)
    {
        if (c == d)
        {
            count++;
        }
    }

    maxCount = Math.Max(count, maxCount);
}

return maxCount;

public static List<int> Tinh(int input)
        {
            var res = new List<List<int>>();
                        
                int x,y,z;
                                   
                    z = (int)input/10;                    
                    var input1 = input % 10;                    
                    y = (int)input1/5;                
                var input2 = input1 % 5;                
                x = (int) input2/2;                
                var i = new List<int>();i.Add(x) ;i.Add(y);i.Add(z);res.Add(i); 
            var minc = res.FirstOrDefault().Sum();
            foreach (var k in res)
            {
                if(k.Sum() < minc) minc = k.Sum();
            }
            
            var cccc = res.FirstOrDefault(x=>x.Sum() == minc);            
            return cccc;
        }

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

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            float[] input = new float[7]{1,2,3,4,5,6,7};
            var c = Average(input,3);
            
            
            //Your code goes here
            foreach (var t in c){
                if(t>0)
            Console.WriteLine(t);
            }
            Console.ReadLine();
        }
        
        public static float[] Average(float[] input, int w)
        {
            float[] result = new float[7];
            if(input.Length == 0) return result;
            
            for(int i = 0; i <=input.Length - w; i++ )
            {
                float sum = 0;
                float ave = 0;
                for(int j= 0; j < w; j++)
                {
                    sum += input[i+j];
                    ave = sum / w;
                    
                    result[i]= ave;
                }
            }
            
            return result;
        }
    }
}

Cho biết ‘()’ , ‘[ ]' là chuỗi chuẩn. A, B là chuỗi chuẩn thì (A) và [A] và AB  là chuỗi chuẩn. 
Vd : ‘(()[ ]([ ]))’ là chuẩn , ‘( ( ] )’ là ko chuẩn. 

using System; 
using System.Collections.Generic;
 using System.Linq; 
using System.Text.RegularExpressions; 
 
class Answer 
 /// Checks that the given string is​​​​​​‌​‌​​‌‌​​​‌‌‌‌​‌​​‌​​‌‌​​ correct 
 static public bool Check(string str) 
 { 
 if(str == null || str =="")
{ return true; } 
 var res = IsCorrect(str);  
 return res; 
 } 

 public static bool IsCorrect (string input) 
 { 
 input = input.Replace("[]","");
 input = input.Replace("()",""); 
 var count = input.Where(x=>x == '(').Count(); 
 var count2 = input.Where(x=>x == '[').Count(); 

 while(count > 0 || count2 > 0)
{ input = input.Replace("[]",""); 
 input = input.Replace("()",""); 
 input = input.Replace("[]",""); 
 input = input.Replace("()",""); 
 count = count -1; 
 count2 = count2 -1;
 }
 if(string.IsNullOrEmpty(input)) return true; 
 return false; 
 } 
}

1 người đứng trên trục số nguyên … -4 -3 -2 -1 0 1 2 3 4…. Ban đầu ở vị trí 0
step 1:  bước  s1 = 1 bước => vị trí 1.
step 2 : bước s2 = -2 bước => vị trí -1
step 3 : bước s3 = (-2) - (1) = -3 => vị trí -4
step n : số bước s = số bước ở step n-1 trừ số bước ở step (n-2) , sn = s(n-1) -s(n-2)


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

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {           
        int number = 5;            
        Console.WriteLine("step:" + Step(number)  );
        Console.WriteLine("pos:" + Pos(number) );            
        }
        
        public static int Step(int number)
    {
        if (number == 0)
            return 0;
        else if(number ==1)
          return 1;  
        else if (number == 2)
            return -2;
        else
        {
         return Step(number - 1) - Step(number - 2);
        }
    }
        
        public static int Pos(int number)
    {
        if (number == 0)
            return 0;
        else if(number ==1)
          return 1;  
        else if (number == 2)
            return -1;
        else
        {
         return Step(number) + Pos(number - 1);
        }
    }        
    }
}

//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5

1   
1   1   
1   2   1   
1   3   3   1   
1   4   6   4   1   
1   5   10   10   5   1   
1   6   15   20   15   6   1   
1   7   21   35   35   21   7   1   
1   8   28   56   70   56   28   8   1   
1   9   36   84   126   126   84   36   9   1   

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

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int n, i, j;
            
            n = 9;
            
            int[,] a = new int[n + 1, n+1 ];
            a[0, 0] = 1;
            for (i = 1; i < n + 1; i++)
            {
                for (j = 0; j < i ; j++)
                {
                    if (j == 0 || j==i+1)
                    {
                        a[i, j] = 1;
                    }
                    if (j != 0)
                    {
                        a[i, j] = a[i - 1, j] + a[i - 1, j - 1];
                    }
                }
                a[i, j] = 1;
               
            }
            Console.WriteLine();
            for (i = 0; i < n + 1; i++)
            {
                for (j = 0; j < n + 1; j++)
                {
                    if (a[i, j] != 0)
                    {
                        Console.Write(a[i, j] + "   ");
                    }
                }
                Console.WriteLine();
            }
        }
    }
}


using System;
 
class GFG
{
    public static int N = 5;
     
    // Function to count number of
    // 0s in the given row-wise and
    // column-wise sorted binary matrix.
    static int countZeroes(int [,] mat)
    {
        // start from bottom-left
        // corner of the matrix
        int row = N - 1, col = 0;
 
        // stores number of zeroes
        // in the matrix
        int count = 0;
 
        while (col < N)
        {
            // move up until you find a 0
            while (mat[row,col] > 0)
 
                // if zero is not found in
                // current column,
                // we are done
                if (--row < 0)
                    return count;
 
            // add 0s present in current
            // column to result
            count += (row + 1);
 
            // move right to next column
            col++;
        }
 
        return count;
    }
     
    // Driver Code
    public static void Main ()
    {
        int [,] mat = { { 0, 0, 0, 0, 1 },
                        { 0, 0, 0, 1, 1 },
                        { 0, 1, 1, 1, 1 },
                        { 1, 1, 1, 1, 1 },
                        { 1, 1, 1, 1, 1 } };
        Console.WriteLine(countZeroes(mat));
    }
}

Binary tree is balanced

public static bool IsBalanced(Node node)
{
    var mm = new DepthMinMax();
    mm.Min = int.MaxValue;
    mm.Max = int.MinValue;

    FindMinMax(mm, node, 0);

    return (mm.Max - mm.Min <= 1) ? true : false;
}

private static void FindMinMax(DepthMinMax mm, Node node, int depth)
{
    if (node == null) return;

    FindMinMax(mm, node.L, depth + 1);
    FindMinMax(mm, node.R, depth + 1);

    // At a terminating node
    if (node.L == null || node.R == null)
    {
        if (mm.Min > depth) mm.Min = depth;
        if (mm.Max < depth) mm.Max = depth;
    }
}

public class Node
{
    public Node L { get; set; }
    public Node R { get; set; }
}

public class DepthMinMax
{
    public int Min { get; set; }
    public int Max { get; set; }
}

  Given a Binary Search Tree, Find the distance between 2 nodes

class MyTreeNode
    {
        public int Data { get; set; }
        public MyTreeNode Left { get; set; }
        public MyTreeNode Right { get; set; }
        public MyTreeNode(int data)
        {
            this.Data = data;
        }
    }

    class QTwoNodeDis
    {
        public static int Distance(MyTreeNode root, MyTreeNode node1, MyTreeNode node2)
        {
            var node = FindLCA(root, node1, node2);
            int distLCA = FindLevel(root, node);
            int dist1 = FindLevel(root, node1);
            int dist2 = FindLevel(root, node2);

            return dist1 + dist2 - 2 * distLCA;
        }

        private static MyTreeNode FindLCA(MyTreeNode root, MyTreeNode node1, MyTreeNode node2)
        {
            if (root == null) return null;
            
            if (root.Data == node1.Data || root.Data== node2.Data)
                return root;
           

            MyTreeNode left_lca = FindLCA(root.Left, node1, node2);
            MyTreeNode right_lca = FindLCA(root.Right, node1, node2);

            if (left_lca != null && right_lca != null)
               
                return root;
            return left_lca != null ? left_lca : right_lca;
        }

        private static int FindLevel(MyTreeNode root, MyTreeNode node)
        {
            if (root == null)
                return -1;
            if(root.Data == node.Data)
                return 0;

            int level = FindLevel(root.Left, node);

            if (level == -1)
                level = FindLevel(root.Right, node);

            if(level != -1)
                return level + 1;

            return -1;
        }
    }










FV Lot de 100 Carte Francaise constitué de 50 VMAX + 50 Carte V. Nos Cartes sont Rare, idéal pour Les Jeu et Les Cadeaux.
630 Pochettes pour Cartes Pokemon Double Face, 35 Pages, en Polychlorure de vinyle (PVC), Vierges Trading Card Sleeves
Pokèmon - 50 Cartes Assorties [Jouet]

Lot de 50 Cartes Pokemon Ne Se Répéteront Pas + 3 Cartes Brillantes Cadeau - French Version