C# :: Aufgabe #378

2 Lösungen Lösungen öffentlich

Figur zurück zum Ausgangspunkt

Anfänger - C# von JKooP - 02.04.2021 um 08:45 Uhr
Eine Figur bewegt sich auf einer 2D- Spielfläche (Koordinatensysteme). Dabei startet sie an der Position (0, 0).
Die Figur kann folgende Bewegungen im Einzelschritt durchführen: Right (R), Left (L), Up (U) und Down (D).
Anhand einer bestimmten Sequenz soll geprüft werden, ob sich die Figur am Ende wieder an der Ausgangsposition befindet.

Beispielsequenzen:
s = „UD“: Wahr
s = „LURD“: Wahr
s = „LLDD“: Falsch
s = „LLUUURDDRD“: Wahr
s = „LDRRLRUULR“: Falsch

Schreibe eine Methode/Funktion, die obige Aufgabenstellung realisieren kann.

Viel Spaß

Lösungen:

vote_ok
von hollst (13980 Punkte) - 06.04.2021 um 19:33 Uhr
Quellcode ausblenden C#-Code
using static System.Console;

string[] test = new string[] { "UD", "LURD", "LLDD", "LLUUURDDRD", "LDRRLRUULR" };
for (var i = 0; i < test.Length; i++)
    WriteLine($"{test[i]}: {test[i].Solution()}");
ReadKey();

static class Extension  {
    public static bool Solution(this string s)  {
        int left = 0, down = 0;
        for (var i = 0; i < s.Length; i++)  {
            if (s[i] == 'L') left++;  else
            if (s[i] == 'R') left--;  else
            if (s[i] == 'D') down++;  else
            if (s[i] == 'U') down--;
        }
        return (left == 0) && (down  == 0);
    }
}
vote_ok
von JKooP (18090 Punkte) - 19.04.2021 um 18:45 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

var lst = new List<string> { "UD", "LURD", "LLDD", "LLUUURDDRD", "LDRRLRUULR" };

lst.ForEach(x => Console.WriteLine($"{x} => {IsSequence(x)}"));

static bool IsSequence(string s)
{
    int ct(char c) => s.Count(x => x == c); // lokale Funktion (seit C# 7.0 möglich)
    return ct('D') == ct('U') && ct('L') == ct('R');
}