C# :: Aufgabe #395 :: Lösung #1

2 Lösungen Lösungen öffentlich
#395

Buchstabenkiste (Wörter bilden)

Anfänger - C# von JKooP - 09.05.2021 um 17:29 Uhr
In einer fiktiven Kiste befinden sich eine vorgegebene Menge an Steinen mit aufgedruckten Kleinbuchstaben (a-z).
Nun soll geprüft werden, ob sich ein vorgegebenes (auch fiktives) Wort mit den in der Kiste vorhandenen Steinen bilden lässt.
Sowohl das Wort als auch der Inhalt der Kiste werden als String (Text) übergeben.

Beispiele:
Wort = "mama"; Kiste = "mneamna"
Lösung: true

Wort = "papa"; Kiste = "aapq"
Lösung: false

Wort = "aabaacbaacbb"; Kiste = "bbaabaaccaaa"
Lösung: false

Achtung: die Wörter sollen aus bis zu 10.000 Zeichen (Kleinbuchstaben) bestehen können.

Erstelle eine Methode/Funktion, die für obige Aufgabenstellung true/false als Ergebnis liefert.

Viel Spaß
#1
vote_ok
von Kay (60 Punkte) - 12.06.2021 um 17:07 Uhr
Quellcode ausblenden C#-Code
 static void Main(string[] args)
        {
            Console.WriteLine($"Lösung: {Check(Wort: "mama", Kiste: "mneamna")}");
            Console.WriteLine($"Lösung: {Check(Wort: "papa", Kiste: "aapq")}");
            Console.WriteLine($"Lösung: {Check(Wort: "aabaacbaacbb", Kiste: "bbaabaaccaaa")}");

            Console.ReadLine();
        }

        static bool Check(string Wort, string Kiste)
        {
            CharValueCollection wortCollection = new CharValueCollection();
            CharValueCollection kisteCollection = new CharValueCollection();
            int counter = 0;

            for (int i = 0; i < Wort.Length; i++)
            {
                counter = 0;
                if (!wortCollection.containsChar(Wort[i].ToString()))
                {
                    for (int j = 0; j < Wort.Length; j++)
                    {
                        if (Wort[i] == Wort[j])
                            counter++;
                    }
                    wortCollection.addCharValue(new CharValue(Wort[i].ToString(), counter));
                }
            }

            for (int i = 0; i < Kiste.Length; i++)
            {
                counter = 0;
                if (!kisteCollection.containsChar(Kiste[i].ToString()))
                {
                    for (int j = 0; j < Kiste.Length; j++)
                    {
                        if (Kiste[i] == Kiste[j])
                            counter++;
                    }
                    kisteCollection.addCharValue(new CharValue(Kiste[i].ToString(), counter));
                }
            }

            foreach (CharValue charValueWort in wortCollection.charValues)
            {
                foreach (CharValue charValueKiste in kisteCollection.charValues)
                {
                    if ((charValueKiste.Value == charValueWort.Value) &&
                        !(charValueKiste.Count >= charValueWort.Count))
                        return false;
                }
            }
            return true;
        }

        class CharValueCollection
        {
            public List<CharValue> charValues { get; set; }

            public CharValueCollection()
            {
                charValues = new List<CharValue>();
            }

            public void addCharValue(CharValue value)
            {
                this.charValues.Add(value);
            }

            public bool containsChar(string value)
            {
                return charValues.Count <= 0 ? false : charValues.Where(x => x.Value == value).Count() > 0;
            }
        }

        class CharValue
        {
            public string Value { get; set; }
            public int Count { get; set; }

            public CharValue(string Value, int Count)
            {
                this.Value = Value;
                this.Count = Count;
            }
        }

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1824282

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.