a)

  1. Der Automat nimmt eine unendlich lange Folge an Eingabezeichen an, welche mit der Ausnahme von a (Absteigen) und h (Hochsteigen) in Beliebiger Reihenfolge kommen können. Wenn h oder a eingegeben werden, muss ein Stopp-Signal folgen. Das Wort kann nicht auf a oder h enden. Wenn a oder h das letzte eingegebene Zeichen war, führt die Eingabe von h bei a oder a bei h.

DrohnenAutomat.cs

namespace ForschungsdrohenAufgabe;  
  
public static class DrohnenAutomat  
{  
    internal delegate Transition Transition(char input);  
      
    static Transition s0 = input => input switch  
    {  
        'l' => s0,  
        'r' => s0,  
        'x' => s0,  
        'v' => s0,  
        'z' => s0,  
        'h' => s1,  
        'a' => s2,  
        _ => throw new Exception()  
    };  
    static Transition s1 = input => input switch  
    {  
        'h' => s1,  
        'l' => s1,  
        'r' => s1,  
        'v' => s1,  
        'z' => s1,  
        'x' => s0,  
        _ => throw new Exception()  
    };  
      
    static Transition s2 = input => input switch  
    {  
        'a' => s2,  
        'l' => s2,  
        'r' => s2,  
        'v' => s2,  
        'z' => s2,  
        'x' => s0,  
        _ => throw new Exception()  
    };  
      
    public static bool Akzeptiert(string eingabe)  
    {  
        var eingabeArray = eingabe.ToCharArray();  
        var queue = new Queue<char>(eingabeArray);  
      
        var state = s0;  
      
        while (queue.Count != 0)  
        {  
            var input = queue.Dequeue();  
            try
			{  
                state = state(input);  
            }  
            catch (Exception)  
            {  
                return false;  
            }  
        }  
      
        return state == s0;;  
    }  
}

Program.cs

using ForschungsdrohenAufgabe;
 
while (true)
{
    Console.WriteLine("Bitte gieb ein Wort ein, oder nutze 'exit' zum beenden:");
    var eingabe = Console.ReadLine();
    if (string.IsNullOrEmpty(eingabe) || string.IsNullOrWhiteSpace(eingabe))
        continue;
    if (eingabe == "exit")
    {
        Console.WriteLine("Programm wird beendet");
        break;
    }
    
    var valid = DrohnenAutomat.Akzeptiert(eingabe);
 
    if (valid)
    {
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("Die Eingabe ist gültig");
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Die Eingabe ist ungültig");
    }
    Console.ResetColor();
}