map fuer ein magisches quadrat und dessen aufloesung

  • hallo zusammen,

    bevor die familie gleich mein ganzes wochenende belagert, habe ich noch schnell fragen zu map coding und moeglichkeiten hierin.

    ich poste ein voll funktionsfaehiges script. es laeuft und tut genau das was es soll, aber es ist viel zu lang und bislang sind alle versuche es irgendwie zu kuerzen gescheitert. ich habe viel zeit mit versuchen das irgendwie in einer 'map' zu verschachteln verbracht und dann damit regeln zu verfassen womit die map arbeiten soll. das ganze scheiterte daran, dass ich die map von Kanashius aus einem meiner letzten thema weiter getestet habe, aber irgendwie gar nicht verstehe wo ich was genau aendern muss damit ich es erweitern oder veraendern kann. damit ich aber nicht ungluecklich werde habe ich es dann manuell geschrieben, so das es genau das tut was es tun soll gemaess den regeln die ich dem ganzen mitgegeben habe.

    es handelt sich um die verwendung eines sog. magischen quadrates (das einfachste was es gibt) ... zu finden in youtube unter dem suchbegriff:

    "12 x 12 Magic Square! Easiest Method ! Don't miss !" ( youtube.com/watch?v=HBd8ZM6aEOw )

    also das ist meine ini datei die ich mittels einer map verwenden moechte. ich habe also einen text geschrieben mit 144 woertern und habe ihn dann gemaess diesem magischen quadrat von den worten her angeordnet, damit ich dann durch das script den richtigen text wieder anzeigen lassen kann. (ja, es sind alles nur spielereien)

    auf jeden fall habe ich versucht die felder abzurufen und an der entsprechenden stelle wieder einzufuegen. klappt alles prima, aber sind halt 144 zeilen in einer For-To-Next-Schleife und jegliche versuche irgendwo einen zaehler einzubauen sind gescheitert, weil es auch unregelmaessig ist, aber seht selbst:

    ini datei:

    AutoIT-script:

    also, ich hatte ein wert $k versucht als zaehler, aber es aenderte nicht wirklich etwas an der laenge, denn der auszugebene text springt ja wirklich durch die zeilen wie ein osterhase auf drogen. also ist zunaechst die erste frage:

    1. kann der code durch clevere zaehler verkuerzt werden? wenn ja, wie und wo?

    die zweite frage ist dann die nutzung einer map. also das ist fuer mich so undurchsichtig, dass ich nocht nicht mal weiss wie wo was ich genau brauche um eine verbindung der zeilennummern zur ini herzustellen um dann eine korrekte ausgabe zu erhalten. also zweite frage:

    2. map? - ja gerne, aber wie? mit lerneffekt gerne gewuenscht.

    leider muss ich nun das restliche wochenende aufs internet verzichten, denn wir bekommen gleich familien besuch und die bleiben das ganze osterfest. aber was macht man nicht alles fuer die familie.

    das thema hier hat also keine eile, ich kann eh nicht vor montag/dienstag checken ob jemand geantwortet hat.

    geniesst alle das osterfest.

    bis bald.

    bankesbusters


    PS: eines meiner sachen habe ich selbst geregelt bekommen von meiner to-do-liste: zahlen mit ini einlesen, werte veraendern je spalte und dann weiterverwenden. hat erstaunlich einfach mehr oder weniger auf anhieb geklappt. also stueck fuer stueck lerne ich fleissig weiter.

    ConsoleWrite("=====================>>> "&"About Me:"&" <<<=====================" & @CRLF)
    ConsoleWrite("Someday I will know how to do it but that day is not today!" & @CRLF)
    ConsoleWrite("===================>>> "&"bankesbusters"&" <<<===================" & @CRLF)

  • my short one.

    Mal bewusst ohne jegliche Erklärung.

    Alles was im Moment "hard-gecoded" ist (z.B. die 12) kann natürlich für dynamisches Verhalten auch durch eine Variable ersetzt werden.

    Sollte ich an deiner Aufgabenstellung etwas falsch verstanden haben, dann sry ^^

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • Ich fand Magic Squares ganz interessant, wollte die aber nicht in einer Ini abspeichern, sondern selbst generieren.
    Bis ich das fertig hatte, hat in der Zwischenzeit Schnuffel schon gepostet, deshalb geh ich auf dein Script mal nicht weiter ein.
    Stattdessen hab ich noch eine Gui dazugebastelt, in der man einen Text eingeben kann und sowohl mit Magic Square verschlüsseln als auch entschlüsseln kann.
    Das ganze arbeitet dabei mit einem Füll-Zeichen, wenn die Anzahl an Text nicht ein ganzes Magic Square füllt.
    Das Trenn-Zeichen kann dabei auch geändert werden. (Wenn es leer gelassen wird, wird jeder Buchstabe einzeln vertauscht, was für ein richtiges durcheinander sorgt :D)

    Vielleicht hat ja noch jemand Spaß daran :)

    Referenz:
    Paper mit dem Algorithmus für die Berechnung der Magic Squares: https://www.iupindia.in/910/IJCM_Magic…lgorithms34.pdf

  • hi,

    als der rest der familie ein wenig spazieren war und ich mit den vorbereitungen vom essen durch war, habe ich noch eine kurze weile hinsetzen koennen und experimentieren koennen und habe es dann hiermit versucht (nur die eingentliche For-To-Next-Schleife):

    Code
    For $i = 0 To UBound($iniOutput) - 1
    For $j = 0 To UBound($iniOutput, 2) - 1
    Local $index = Int($iniOutput[$i][$j]) ; Um den Wert als Ganzzahl zu verwenden
    If $index >= 1 And $index <= UBound($arr_text) Then
    $result[$index] = $arr_text[$index]
    EndIf
    Next
    Next

    das hat aber nicht geklappt gehabt, weil ich keinen weg gefunden hatte dort den $arr_text von der nummer her anders zu gestalten. sprich das script griff immer nur die exakt gleichen nummern ab, aber der code war auf das absolute minimum verkuerzt worden. nur eben die funktion nicht wirklich.

    ich werde heute mir mal die anderen obigen ideen anschauen und mal sehen ob ich mich dadurch kaempfen kann. ... aber wie immer: auf jeden fall bereits ein dickes danke an dieser stelle an Schnuffel und Kanashius

    Kanashius hat ja bald mehr geschrieben wie mein original. ich bin so gespannt.

    gruss


    PS: hoffe schoene ostern gehabt zu haben an alle.


    *grund fuer edit: vergessen code in codedarstellung zu packen

    ConsoleWrite("=====================>>> "&"About Me:"&" <<<=====================" & @CRLF)
    ConsoleWrite("Someday I will know how to do it but that day is not today!" & @CRLF)
    ConsoleWrite("===================>>> "&"bankesbusters"&" <<<===================" & @CRLF)

  • hi,

    also ... nach etlichen (langen) tests und vielen vielen fehlversuchen, (ich habe alles richtig abgeschrieben, alles kontrolliert und trotzdem schlichen sich fehler immer wieder ein!), kann ich sagen, dass die Version von Schnuffel fuer meine zwecke zu 100% perfekt ist und alles so tut wie es tun soll. das ist sowas von genial! Danke vielmals!

    natuerlich moechte ich die arbeit von Kanashius nicht schmaelern, denn sie ist auf eine andere art auch total genial und spannend zugleich, denn sie geht noch einige extra schritte weiter, die zwar nicht notwendig waren, aber total klasse sind. auf jeden fall ein script, welches ich ggf. auch noch mal verwenden werde. tolle sache.

    also, beides wirklich toll und auch verschieden in der herangehensweise.

    euch beiden einen ganz dicken dank an dieser stelle. ich weiss eure hilfe stets zu schaetzen. danke sehr.

    gruss

    bankesbusters

    ConsoleWrite("=====================>>> "&"About Me:"&" <<<=====================" & @CRLF)
    ConsoleWrite("Someday I will know how to do it but that day is not today!" & @CRLF)
    ConsoleWrite("===================>>> "&"bankesbusters"&" <<<===================" & @CRLF)