Montag, 27. September 2010

Rätsel: Was macht dieses Programm?

Anlässlich des 100. Posts habe ich ein kleines Rätsel vorbereitet.
Die vorgestellte Klasse beschreibt die Funktion eines "Geräts" aus der technischen Informatik, wer dieses zuerst errät, hat gewonnen ;-)
Die Klasse ist absichtlich etwas unübersichtlich programmiert, bei Benutzung dieser wird die Methode ABC() mit 3 Parametern aufgerufen.
Und hier nun der Code:

    public class CrazyTool
    {
        public string ABC(string a, string b, string c)
        {
            if (!DEF(a, b, c))
                return "d";

            if (a == "x")
            {
                int d = 0;
                if (b == "x")
                    d = 0;
                else
                    d = 1;
                int e = d + int.Parse(c.Replace('x', '0').Replace('y', '1'));
                switch (e * 3)
                {  
                    case 0: return ("aa");
                    case 3: return ("ba");
                    case 6: return ("ab");
                }
            }
            else
            {
                int f = 0;
                if (b == "x")
                    f = 0;
                else
                    f = 1;
                int g = f + int.Parse(c.Replace('x', '0').Replace('y', '1'));
                switch (g * 3)
                {  
                    case 0: return ("ba");
                    case 3: return ("ab");
                    case 6: return ("bb");
                }
            }

            return "d";
        }

        private bool DEF(string a, string b, string c)
        {
            if (a != "x" && a != "y")
                return false;
            if (((byte)(b.ToCharArray()[0]) != 120 && ((byte)(b.ToCharArray()[0]) != 121)))
                return false;
            Regex r = new Regex("[xy]");
            if (!r.IsMatch(c))
                return false;
            return true;
        }
    }

Kommentare:

  1. es berechnet binärzahlen ;)

    AntwortenLöschen
  2. Richtung stimmt schonmal, aber der genaue Begriff ist gesucht. Die Klasse stellt, wie erwähnt ein "Gerät" dar, welches in der technischen Informatik genutzt wird, der Name bzw. eine etwas genauere Funktionsangabe ist gesucht.

    AntwortenLöschen
  3. grob geraten: flip flop?

    AntwortenLöschen
  4. Nein auch nicht. Ein Flipflop hätte 2 Eingänge und 2 Ausgänge. Das gesuchte Gerät hat 3 Eingänge und 2 Ausgänge und führt Additionen durch ...

    AntwortenLöschen
  5. volladdierer?

    ist 1 variable als input gesetzt ist nur x als ausgang gesetzt. sind 2 variablen als eingang gesetzt ist y als ausgang gesetzt. sind alle input variablen gesetzt sind x und y gesetzt. addition von 3 binärzahlen.

    AntwortenLöschen
  6. Meiner Meinung nach folgendes Ergebnis:
    3x => aa
    2x 1y => ba
    1x 2y => ab
    3y => bb

    Keine Ahnung was das ist :(

    AntwortenLöschen
  7. Genau richtig Sven Walter, das gesuchte Gerät ist ein Volladdierer.
    Ein Volladdierer addiert 3 Binärzahlen, sie werden der Methode ABC() übergeben.
    Hierbei steht ein "x" für 0, ein "y" für 1.
    Die Methode gibt einen 2-stelligen String zurück, das linke Zeichen steht
    für das niederwertige Bit, das rechte für das höherwertige.
    Hierbei steht nun "a" für 0 und "b" für 1.
    Insofern hat der vorige Poster auch vollkommen recht mit seiner Wertetablle, schön herausgearbeitet:
    3x => aa - 0+0+0=00 (dezimal 0)
    2x 1y => ba - 0+0+1=01 (dezimal 1)
    1x 2y => ab - 0+1+1=10 (dezimal 2)
    3y => bb - 1+1+1=11 (dezimal 3)
    Habt ihr beide als "Gewinn" einen speziellen Wunsch für die nächsten Posts?

    Den Volladdierer werde ich aber auch bald in einem eigenen Post nochmal genau beschreiben.
    Danke an alle fürs Mitmachen!

    AntwortenLöschen
  8. Einen besonderen Wunsch habe ich nicht ;) Bin selbst Entwickler und befasse mich in meinem Blog auch hin und wieder damit. Verfolge allerdings regelmäßig auch deine fleißigen Bemühungen hier. Mach einfach weiter so :)

    AntwortenLöschen
  9. Danke :)
    So eine etwas genauere Auflösung ist jetzt online unter http://csharp-tricks.blogspot.com/2010/09/auflosung-des-ratsels.html .

    AntwortenLöschen