Laden...

Coderätsel: Was macht dieses Programm?

Erstellt von Floste vor 16 Jahren Letzter Beitrag vor 14 Jahren 4.318 Views
Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 16 Jahren
Coderätsel: Was macht dieses Programm?

Wer kann mir sagen, was mein programm macht, ohne es auszuführen? (wenn ich es nicht geschrieben hätte, könnte ich es vermutlich nicht. 😄) Der Stil ist zwar diesmal absicht, aber ...

using System;
using System.Collections.Generic;
using System.Text;

namespace Unknown
{
    class Program
    {
        const bool beg = true;//oder auch false
        static void Main(string[] args)
        {
            ns a,b,r=new ns();
            a=r;
            Stack<ns> back = new Stack<ns>(9);
            r.w = true;
            goto fc;
            r:if (a.dn < 9)
            {
                b=a.d[a.dn++];
                if (b == null) goto r;
                back.Push(a);
                a = b; 
                if (a.dn > 0) goto r;
                if (_s(a.s))
                { a.r = 1; a.dn = 9; a.wn = true; goto r; }
                if((a.s & 87381) == 87381)
                {a.r = 0; a.dn = 9; goto r;}
                goto fc;
            }
            if (back.Count > 0)
            {
                b = a;
                a = back.Pop();
                if (a.r > -b.r) a.r = -b.r;
                goto r;
            }

            end:a = r;
            if (beg)
            {
                b = null;
                foreach (ns c in a.d)
                {
                    if (c != null)
                    { if (b == null || b.r < c.r || ((c.s & 256) != (a.s & 256))) b = c; }
                }
                a = b;
            }
            while (true)
            {
                string ausgabe = System.Environment.NewLine;
                for (uint i = 0, z = 1; z != 262144; z *= 4)
                {
                    if (((a.s & z) ^ z) == z) ausgabe += " ";
                    else
                    {
                        if ((a.s & (2 * z)) == 0) ausgabe += ((char)0x58).ToString();
                        else ausgabe += ((char)0x4f).ToString();
                    }
                    if (++i % 3 == 0) ausgabe += "   " + (i - 2).ToString() + (i - 1).ToString() + (i).ToString() + System.Environment.NewLine;
                }
                Console.Write(ausgabe + System.Environment.NewLine);
                if (a.wn) { Console.WriteLine(a.w!=beg?"haha":"unmöglich"); goto end; }
                if ((a.s & 87381) == 87381) { Console.WriteLine("neu:"); goto end; }
                string eingabe="lol";byte next=0;
                while (!byte.TryParse(eingabe, out next) || next < 1 || next > 9 || a.d[next - 1] == null)
                { eingabe = Console.ReadLine(); }
                a = a.d[next - 1];
                if ((a.s & 87381) != 87381 && !a.wn)
                {
                    b = null;
                    foreach (ns c in a.d)
                    {
                        if (c != null)
                        { if (b == null || b.r < c.r || ((c.s & 256) != (a.s & 256))) b = c; }
                    }
                    a = b;
                }
            }
        fc: for (uint i = 0, z = 1; z != 262144; z *= 4)
            {
                if (((a.s & z) ^ z) == z)
                {
                    uint s = a.s | (a.w ? z | (z * 2) : z);
                    b = new ns();
                    b.s = s;
                    b.w = !a.w;
                    a.d[i] = b;
                }
                i++;
            }
            goto r;
        }

        public static bool _s(uint s)
        {
            return ((s & 1) != 0 && (s & 4) != 0 && (s & 16) != 0 && (((s & 2) != 0) == ((s & 8) != 0)) && (((s & 2) != 0) == ((s & 32) != 0))) ||
((s & 1) != 0 && (s & 256) != 0 && (s & 65536) != 0 && (((s & 2) != 0) == ((s & 512) != 0)) && (((s & 2) != 0) == ((s & 131072) != 0))) ||
((s & 1) != 0 && (s & 64) != 0 && (s & 4096) != 0 && (((s & 2) != 0) == ((s & 128) != 0)) && (((s & 2) != 0) == ((s & 8192) != 0))) ||

((s & 65536) != 0 && (s & 16384) != 0 && (s & 4096) != 0 && (((s & 131072) != 0) == ((s & 32768) != 0)) && (((s & 131072) != 0) == ((s & 8192) != 0))) ||
((s & 65536) != 0 && (s & 1024) != 0 && (s & 16) != 0 && (((s & 131072) != 0) == ((s & 2048) != 0)) && (((s & 131072) != 0) == ((s & 32) != 0))) ||

((s & 256) != 0 && (s & 4) != 0 && (s & 16384) != 0 && (((s & 512) != 0) == ((s & 8) != 0)) && (((s & 512) != 0) == ((s & 32768) != 0))) ||
((s & 256) != 0 && (s & 64) != 0 && (s & 1024) != 0 && (((s & 512) != 0) == ((s & 128) != 0)) && (((s & 512) != 0) == ((s & 2048) != 0))) ||
((s & 256) != 0 && (s & 4096) != 0 && (s & 16) != 0 && (((s & 512) != 0) == ((s & 8192) != 0)) && (((s & 512) != 0) == ((s & 32) != 0)));
        }

        class ns
        {
            public ns[] d=new ns[9];
            public byte dn = 0;
            public uint s;
            public bool w,wn=false;
            public float r=1;
        }
    }
}

PS: wer es schafft soll bitte die Zahlen posten oder nen Screenshot machen.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

3.430 Beiträge seit 2007
vor 16 Jahren

Hallo floste,

ich kann dir zwar nicht sagen, was dein programm macht, da dies für mich zu viel kopfrechnen bedeuten würde 😁

ich möchte dich aber darauf hinweisen, dass es hier vor ein paar tagen einen sehr sehr ähnlichen Thread gab: Kleine Code-Rätsel für Zwischendurch

mal schauen, ob es jemand schafft, das ohne auszuführen herauszufinden 8)

mfg
MichlG

R
494 Beiträge seit 2006
vor 16 Jahren

Da hat der Obfuscator ja fast ganze arbeit geleistet 😁

Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 16 Jahren

Welcher Obfuscator? Habe kein solches Programm benutzt. 😁

für mich zu viel kopfrechnen bedeuten

Zu den Zahlen im Programm: bei den meisten bringt es wohl eher was, die in binär umzurechnen.
Ansonsten: alle Hilfsmittel, die den Code nicht ausführen sind natürlich erlaubt.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

Gelöschter Account
vor 16 Jahren

nur als kommentar:

  1. du verwendest goto
  2. alle variablennamen sind kryptisch
  3. die formatierung ist ein grauß
  4. ellenlanger kryptischer code in dem static.
  5. schaut aus wie ein komplizierter algo aus c 1:1 importiert

wer soll sich denn sowas antun?
wenn ich nur ansatzweise so einen code in unserem projekt sehen würde gäbe es saures für den verantworlichen und anschließend ein großes strg+a -> entf

K
133 Beiträge seit 2009
vor 14 Jahren

mich ganz konfus -.-

Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 14 Jahren

Lösung (Text Markieren):

Tic-Tac-Toe-KI, die niemals verliert.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!