1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Andy

Beiträge von Andy

  • Workaround für OperaUser [Update 10.6]

    • Andy
    • 3. Juli 2010 um 17:48

    Hi, habe für Opera 10.6 in den Workaround neue Features eingebaut, s. erstes Post.

  • OpenGl Farben

    • Andy
    • 3. Juli 2010 um 10:34
    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Color2 = _RGBToGL("0xFFFFFF")
    ConsoleWrite($Color2 & @CRLF)
    $Color2 = _RGBToGL("0x7700FF")
    ConsoleWrite($Color2 & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    Func _RGBToGL($Color)
    $nColor = StringTrimLeft($Color, 2)

    [/autoit] [autoit][/autoit] [autoit]

    $aColor = StringSplit($nColor, "")
    $R = $aColor[1] & $aColor[2]
    $G = $aColor[3] & $aColor[4]
    $B = $aColor[5] & $aColor[6]

    [/autoit] [autoit][/autoit] [autoit]

    $Para1 = dec($R)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Para1 = ' & $Para1 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $Para2 = dec ($G)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Para2 = ' & $Para2 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $Para3 = dec($B)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Para3 = ' & $Para3 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    Return ($Para1 / 255) & "|" & ($Para2 / 255) & "|" & ($Para3 / 255)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GLToRGB($Para1, $Para2, $Para3)
    $R = StringTrimLeft(Hex(255 * $Para1), 6)
    $G = StringTrimLeft(Hex(255 * $Para2), 6)
    $B = StringTrimLeft(Hex(255 * $Para3), 6)
    Return "0x" & $R & $G & $B
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _HexToDecimal($iHex)
    If StringLeft($iHex, 2) = "0x" Then $iHex = StringMid($iHex, 3)
    If StringIsXDigit($iHex) = 0 Then
    SetError(1)
    MsgBox(0,"Error","Wrong input, try again ...")
    Return ""
    EndIf
    Local $ret="", $hx_count=0, $hx_array = StringSplit($iHex, ""), $Ii, $hx_tmp
    For $Ii = $hx_array[0] To 1 Step -1
    $hx_tmp = StringInStr($iHex, $hx_array[$Ii]) - 1
    $ret += $hx_tmp * 16 ^ $hx_count
    $hx_count += 1
    Next
    Return $ret
    EndFunc ;==>_HexToDec()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;GLtoRGB:

    [/autoit] [autoit][/autoit] [autoit]

    ;Parameter * 255
    ;Das in Hex wandeln
    ;6 Stellen von links kappen
    ;R G B zusammenfügen
    ;0x dranhängen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;RGBtoGL:

    [/autoit] [autoit][/autoit] [autoit]

    ;0x kappen
    ;R G B trennen
    ;6Stellen dranfügen
    ;Das in Dezimal wandeln
    ; Durch 255 teilen

    [/autoit]
  • tcp - client der mit server kommuniziert

    • Andy
    • 3. Juli 2010 um 10:02

    @Flype, du disqualifizierst dich selbst durch

    Zitat

    kann mir nicht bittte bitte einer einfach die lösung posten anstatt immer
    "les dir das hier mal durch"

    Mal krass gesagt ist das hier kein Club der darauf wartet deinen Kram auf die Reihe zu bekommen! Und "einfach die Lösung posten" geht auch nur dann, wenn man genug und vor allem die richtigen Informationen bekommt.
    Ich verwette meinen Hintern darauf, daß du weder den Client und den Server lt. meinem Link auf deinem Rechner bzw. im Netzwerk laufen hattest, noch RICHTIG GELESEN HAST!
    Wenn ich sehe, was du in deinem Router eingetragen hast, ist das völlig klar!
    Hättest du gelesen, wüßtest du zumindest, das der Client kein forwarding braucht.

    Zitat

    eigentlich kann ich mir nicht vorstellen das es für die erfahren autoitler
    schwer ist mir zu sagen was am script falsch ist oder was ich falsch mache

    was du falsch machst? Du liest nicht....Links wurden gepostet.
    Nochmal, niemand von uns kann deinen Router konfigurieren, und niemand von uns kennt dein Netzwerk.

    Aber um hier nicht als Buhmann dazustehen, der nur alles mies macht, was hälst du mal davon, Routermodell und Handbuchauszug zu posten?
    Was ich an deinem Screenshot überhaupt nicht kapiere....wo sind die Ports fürs forwarding bzw. NAT bzgl. HTTP eingetragen?
    Denn irgendwie muß dein Router ja wissen, an welchen internen Rechner er die HTTP-Pakete senden soll. Genau dort kannst du auch deinen Server eintragen.
    Weiterhin könnte es sein, daß z.B. alles ausser HTTP geblockt wird, eine Regel in der Router- Firewall....da kannst du "hintendran" dann erlauben was du willst, bis dorthin kommt dein Paket garnicht....

  • tcp - client der mit server kommuniziert

    • Andy
    • 2. Juli 2010 um 18:52

    [ gelöst ] Clien sendet an Server nicht übers Inet

  • Sudoku-Löser

    • Andy
    • 2. Juli 2010 um 12:46

    Da du zzt. keinerlei Strategien anwendest, werden die allermeisten Sudokus natürlich nicht gelöst. Beim Backtracken viel Erfolg!
    Du kannst ja mal berichten, in welcher Zeit die "bösen" (s.o.) Sudokus gelöst wurden...mein BT hat sich bei zweien "totgelaufen", bzw ich habe nach einer bestimmten Zeit abgebrochen.

  • Fehler bei _Crypt_EncryptFile()

    • Andy
    • 2. Juli 2010 um 11:09

    Fehlermeldungen, @Error-Abfragen, Debug-Msgbox bzw. -Consolewrite-Infos, Traceline-Infos?
    Wieso sollen wir uns Arbeit machen, wenn du selbst in der Lage bist festzustellen, wo der Fehler liegt? Das war eine ernst gemeinte Frage!

  • FileWrite zwischen 2 bestimmten Texten

    • Andy
    • 1. Juli 2010 um 20:56

    SEuBo,
    du erwarest definitiv zu viel...jetzt sollen die Leute auch noch kapieren was ihnen hier in den Hintern geblasen wird...unverschämt von dir!
    Und auch noch selbstständig eine Zeile des Scripts tauschen...wo kommen wir denn da hin, wenn das jeder hier so machen würde?
    *Ironiemodus OFF*

    Nach den gelesenen Kommentaren zu den in den letzten Tagen geposteten Lösungen hab ich mich entschlossen, vorerst irgendwelchen "Neulingen" garnicht mehr zu Antworten. Solltest du auch machen, dann hast du mehr Zeit zu schlafen ;)

  • GegenTeil von _StringBetween()

    • Andy
    • 1. Juli 2010 um 19:45

    omfg...

    [autoit]

    #include <Array.au3>
    $t="Hey*ho*ho2"

    [/autoit][autoit][/autoit][autoit]

    $SUCHSTRING="ho"

    [/autoit][autoit][/autoit][autoit]

    $array = StringSplit(StringReplace($t, '*'&$SUCHSTRING&'*', '*'), '*',3)
    _ArrayDisplay($array)

    [/autoit]
  • GegenTeil von _StringBetween()

    • Andy
    • 1. Juli 2010 um 19:40

    ...und wieder wurde einem erfolgreich der Arm aus der Sonne gelegt.....
    ...damit nicht über das 1. item im array gejammert wird...

    [autoit]

    #include <Array.au3>
    $t="Hey*ho*ho2"
    $array = StringSplit(StringReplace($t, '*ho*', '*'), '*',3)
    _ArrayDisplay($array)

    [/autoit]
  • Sudoku-Löser

    • Andy
    • 1. Juli 2010 um 19:34

    Welcher?
    Im Script in Post #5 ist ein Sudoku eingetragen. Das wird auch gelöst....

  • FileWrite zwischen 2 bestimmten Texten

    • Andy
    • 1. Juli 2010 um 19:28

    @Burak
    mit setzen des Filepointers kann man auch im Schreibmodus lesen, s. Skript oben.
    Das mit der Geschwindigkeit hattest du ja erwähnt....

  • FileWrite zwischen 2 bestimmten Texten

    • Andy
    • 1. Juli 2010 um 19:24
    Zitat

    gibt es eine möglichkeit das zu beschleunigen denn auf die Art braucht er ne weile da Die MdlDyna.inc 35198 Zeilen hat


    Inelukis Version ist beim mehrfachen Eintragen nur deswegen so langsam, weil er permanent die Datei öffnet und schließt und jedes mal sämtliche Zeilen abklappert...
    Öffne deine Datei, schreibe alle Daten (Bsp. s. SeuBo) und dann schreib die Datei.

    Spoiler anzeigen
    [autoit]

    $dateiinhalt = '"item" 4' & @CRLF & _
    '{' & @CRLF & _
    'ALLE ITEMEINTRÄGE HIER' & @CRLF & _
    '}' & @CRLF & _
    '"mvr" 5' & @CRLF & _
    '{' & @CRLF & _
    'ALLE MONSTEREINTRÄGE HIER' & @CRLF & _
    '}' & @CRLF
    $a = FileWrite("test.txt", $dateiinhalt) ;datei zum Testen anlegen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hfile = FileOpen("test.txt", 1) ;datei zum schreiben öffnen
    $n = FileSetPos($hfile, 0, 0) ;filepointer setzen, so kann man auch im schreibmodus lesen

    [/autoit] [autoit][/autoit] [autoit]

    $dateiinhalt = FileRead($hfile)

    [/autoit] [autoit][/autoit] [autoit]

    ;for / to schleife alle items
    $item = ""
    For $i = 1 To 4
    $item &= "Itemeintrag Nr. " & $i & " eingefügt" & @CRLF
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $mvr = "}" & @CRLF & '"mvr"'
    $dateiinhalt = StringReplace($dateiinhalt, $mvr, $item & $mvr, 0, 1) ;casesensitiv ist wesentlich schneller

    [/autoit] [autoit][/autoit] [autoit]

    FileWrite($hfile, $dateiinhalt)
    ;next
    FileClose($hfile)
    ShellExecuteWait("test.txt")
    FileDelete("test.txt") ;testdatei löschen

    [/autoit]
  • Sudoku-Löser

    • Andy
    • 1. Juli 2010 um 18:10

    ein Sudoku besteht aus 9 Zeilen a 9 Ziffern. Wenn man alle Zeilen nacheinander schreibt, entsteht....ein String mit 81 Zeichen.
    Anstatt der 0 kann man auch . oder _ oder * einsetzen. Die gängigen Löser (ich empfehle mal einen Blick auf http://www.sudokuwiki.org/sudoku.htm) fressen so ziemlich alles....

  • Funktion für die Verteilung von Rechtecken in einer Fläche

    • Andy
    • 1. Juli 2010 um 17:07

    Ok, kreisförmig "um das erste Rechteck" ist eine gute Hausnummer^^
    Als ersten Ansatz würde ich die Rechtecke sortieren, das größte zuerst. Wenn die Rechtecke nacheinander erstellt werden sollen, ist das aber auch nicht schlimm.
    Ich habe folgendes umgesetzt:
    -Rechteck erstellen mit zufälliger Breite und Höhe
    -vom Mittelpunkt (man könnte auch den Schwerpunkt aller Rechtecke nehmen) das Rechteck in Richtung Fenster-Rand bewegen, wenn es ein anderes Rechteck berührt, weiterbewegen.
    -Berührt es keines der anderen Rechtecke, dann ist eine potentielle Position erreicht.
    -Abstand bestimmen zum Mittelpunkt. Ist dieser Abstand minimal, dann Position merken.
    -Sind alle möglichen Positionen rund um die anderen Rechtecke abgearbeitet, Rechteck an die Position mit dem minimalen Abstand zum Mittelpunkt zeichnen.
    -Neues Rechteck erstellen uswusf

    hab das mit controls gebastelt, so wars einfacher^^ ist aber auch langsamer.
    Optimierbar ist die Schrittweite der Linienfunktion, z.B. nur jedes 2. oder 3. Pixel und der Kollisions-check
    Weiterhin würde ich den Schwerpunkt aller vorhandenen Rechtecke als neuen Startpunkt festlegen, die Rechtecke sollten so noch etwas näher zusammenrücken....

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <StructureConstants.au3>
    Dim $rechteck[100]
    Dim $a[4] ;$a = controlgetpos($hgui,"",$rechteck[$id])

    [/autoit] [autoit][/autoit] [autoit]

    Global $SPsx = 400 ;koordinaten Gesamt-Schwerpunkt
    Global $SPsy = 400
    Global $xmin, $ymin ;koordinaten des aktuellen rechtecks
    Global $abstand_min = 2 ^ 12 ;minimaler abstand

    [/autoit] [autoit][/autoit] [autoit]

    $hgui = GUICreate("Rechtecke anordnen", 800, 800, 100, 1)
    GUISetState()
    $rechteck[0] = GUICtrlCreateGraphic(0, 0, 800, 800)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 40 ;anzahl der Rechtecke
    $a[2] = Random(1, 7, 1) * 20 ;breite
    $a[3] = Random(1, 7, 1) * 20 ;höhe
    $rechteck[$i] = GUICtrlCreateGraphic(20, 20, $a[2], $a[3])
    GUICtrlSetBkColor(-1, Random(1, 255 * 255 * 255, 1))
    GUICtrlSetColor(-1, Random(1, 255, 1))

    [/autoit] [autoit][/autoit] [autoit]

    $abstand_min = 2 ^ 12 ;zzt minimaler abstand des aktuellen Rechtecks zum Mittelpunkt
    For $x = 100 To 700 Step 20;oberer Rand von links nach rechts
    $y = 100
    line($SPsx, $SPsy, $x, $y, $i) ;auf der Linie entlang das Rechteck bewegen
    If $abstand_min = 0 Then ;gilt nur für das allererste Rechteck
    GUICtrlSetPos($rechteck[1], $xmin, $ymin)
    ContinueLoop 2 ;im mittelpunkt plazieren, nächstes Rechteck erstellen
    EndIf
    Next
    For $y = 100 To 700 Step 20;rechter Rand von oben nach unten
    $x = 700
    line($SPsx, $SPsy, $x, $y, $i)
    Next
    For $x = 700 To 100 Step -20;oberer Rand
    $y = 700
    line($SPsx, $SPsy, $x, $y, $i)
    Next
    For $y = 700 To 100 Step -20;oberer Rand
    $x = 100
    line($SPsx, $SPsy, $x, $y, $i)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetPos($rechteck[$i], $xmin, $ymin)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Line($x1, $y1, $x2, $y2, $rechteck) ;y=mx+b = geradengleichung =linienfunktion linie von x1|y1 nach x2|y2 zeichnen
    If $x2 = $x1 Then ;senkrechte linie
    Local $Step = 1
    If $y2 < $y1 Then $Step = -1
    For $yy = $y1 To $y2 Step $Step
    If _checkueberlappung($x1, $yy, $rechteck) = 0 Then Return
    Next
    Return
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $y2 = $y1 Then ;waagrechte linie
    $Step = 1
    If $x2 < $x1 Then
    $Step = -1
    EndIf
    For $xx = $x1 To $x2 Step $Step
    If _checkueberlappung($xx, $y1, $rechteck) = 0 Then Return
    Next
    Return
    Else
    Local $m = ($y2 - $y1) / ($x2 - $x1)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Local $b = $y1 - $m * $x1

    [/autoit] [autoit][/autoit] [autoit]

    If Abs($m) <= 1 Then
    $Step = -1
    If $x1 < $x2 Then $Step = 1

    [/autoit] [autoit][/autoit] [autoit]

    For $xx = $x1 To $x2 Step $Step
    Local $yy = Round($m * $xx + $b)
    If _checkueberlappung($xx, $yy, $rechteck) = 0 Then Return
    Next
    Else
    $Step = -1
    If $y1 < $y2 Then $Step = 1
    For $yy = $y1 To $y2 Step $Step
    Local $xx = Round(($yy - $b) / $m)
    If _checkueberlappung($xx, $yy, $rechteck) = 0 Then Return
    Next
    EndIf
    EndFunc ;==>Line

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _checkueberlappung($sxi, $syi, $id) ;kollision ermitteln
    $x1i = $sxi - ($a[2] / 2) ;aktuelles rechteck oben links
    $y1i = $syi - ($a[3] / 2)
    $x2i = $x1i + $a[2] ;unten rechts
    $y2i = $y1i + $a[3]
    GUICtrlSetPos($rechteck[$id], $x1i, $y1i) ;ausklammern....

    [/autoit] [autoit][/autoit] [autoit]

    For $m = 1 To $i - 1 ;alle vorhandenen Rechtecke prüfen
    $b = ControlGetPos($hgui, "", $rechteck[$m]) ;position des rechtecks ermitteln
    $x1m = $b[0] ;oben links
    $y1m = $b[1]
    $x2m = $b[0] + $b[2] ;unten rechts
    $y2m = $b[1] + $b[3]
    If _RectCollision($x1m, $y1m, $x2m, $y2m, $x1i, $y1i, $x2i, $y2i) Then ;wenn kollision, dann return 1
    ;MsgBox(0, "Kollision mit: ", $m)
    Return 1
    EndIf
    Next
    ;MsgBox(0, "keine kollision!", $sxi&" "&$syi)
    $abstand = Sqrt(($sxi - $SPsx) ^ 2 + ($syi - $SPsy) ^ 2) ;abstand vom Gesamt-Schwerpunkt
    If $abstand <= $abstand_min Then ;kleinster abstand zum Gesamt-Schwerpunkt gefunden
    ;MsgBox(0, "Kleinster abstand", $abstand)
    $abstand_min = $abstand
    $xmin = $x1i ;x-koordinate merken
    $ymin = $y1i ;y-koordinate merken
    EndIf
    Return 0 ;keine kollision, return 0
    EndFunc ;==>_checkueberlappung

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2)
    ; Prog@ndy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall("User32.dll", "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Return $r[0] <> 0
    EndFunc ;==>_RectCollision

    [/autoit]

    Bild hänge ich noch an....[Blockierte Grafik: http://www.abload.de/img/forum7bw3.jpg]

  • Sudoku-Löser

    • Andy
    • 30. Juni 2010 um 22:32

    Wenn du "Futter" brauchst, im schon angesprochenen Thread sollte auch eine Liste von ca 36.000 Sudokus enthalten sein, darunter auch sehr viele 17er. Ich hatte die mal spaßeshalber mit meinem Solver abgeackert, um "böse" Sudokus zu finden.
    20xBöse: (jedenfalls bei "normalen" Strategien)

    Spoiler anzeigen


    160000000000300050040002000007000020000104000000060007002005000000080006000000001
    000000120000803000000009000401060000000007003002000000000020040030000008095000000
    000900130000540000000060000080001020005000004006000000030007000004000005000000009
    500080200740000000000000000002050000000600007800000040060700000001000500000304000
    602050000000003040000000000430008000010000200000000700500270000000000081000600000
    602050000000004030000000000430008000010000200000000700500270000000000081000600000
    602700000000800130000000090400000700030090000000010000500400600010000020000000000
    700080000000000104000000200000102000200000030000400500051030000000006070040000000
    000701600500080000000000000000600701208090000400000000000020050070300000000000080
    002100400083000000000000000500400700600020000010000000000008063100700000000000080
    000800001900000500000000000410050000003000080000000700000108040020300000500000600
    051000000000300080000070000020501006800000040000700000000000201300040000000000500
    000020007405000000001000000000401000003000008060002000000500210070030000000000040
    000420050070000000000080000030006007002090080000000001000007006805000000000001000
    010065000000100080000000032070004001000020000008000000000007004806000000003000000
    500004090020001000000030000031000008000005000008000000600700050004080000000000001
    030080000000002005000000001000705030040000700000001000502000000000040080001006000
    ....7.94..7..9...53....5.7..874..1..463.8.........7.8.8..7.....7......28.5.268...
    38.6.......9.......2..3.51......5....3..1..6....4......17.5..8.......9.......7.32
    6...4...3.1.....7...5...8.....5.2...3...9...2...1.3.....8...9...7.....5.2...3...4

    das 8. sollte man mal "von Hand" probieren^^

  • Funktion für die Verteilung von Rechtecken in einer Fläche

    • Andy
    • 30. Juni 2010 um 22:05

    Hi,
    gib mal ne Hausnummer, nach welchen Kriterien sich die Rechtecke verteilen sollen.
    Möglichst kleiner Abstand der Rechtecke zueinander in einem Umkreis, oder in einer Ellypse oder auch (das ist dann ein MiniMax-Problem) der minimale "Abfall" bei Zuschnitt aus einer x*y-großen Platte.....da gibts reichlich Möglichkeiten, viele Rechtecke anzuordnen^^

  • Sudoku-Löser

    • Andy
    • 30. Juni 2010 um 09:43

    Wenn du ein Sudoku, dass nur aus leeren Feldern besteht, mit deinem Programm lösen kannst, dann sollte dieses Script alle anderen Sudokus auch lösen.
    Nur ist die "Brute-Force"-Lösung nicht immer die schnellste. Daher die diversen Strategien...

    Zitat

    Könntest du bitte mal das Sodoku posten, was du benutzt hast?


    In meinem vorherigen Post ist sowohl das Sudoku, als auch die Lösung. Weitere in dem Link s.o.

  • PC an Router angeschlossen bzw aktiv

    • Andy
    • 29. Juni 2010 um 22:24

    Du könntest auf dem WLAN-Rechner remote ein "netstat -a" laufen lassen und die Ausgabe auswerten. Somit bekommst du wenigstens raus, ob noch eine Verbindung zu anderen Rechnern bzw Internet besteht.
    Falls ja, ist man immer noch nicht weiter, denn bei fehlendem Traffic könnte es entweder sein, daß der User z.B. Forenbeiträge oder längere Artikel liest, oder vor dem Fernseher im Sessel rumliegt und vergessen hat, im WLAN-Rechner den Browser auszuschalten....
    Du könntest ja per "net send " (Nachrichtendienst muss aktiviert sein!) dem WLAN-User eine Frage stellen. Antwortet er nicht, kannst du den Router ausschalten^^

  • Sudoku-Löser

    • Andy
    • 29. Juni 2010 um 22:02

    ...gib mal Sudoku in der Sufu ein, im µ-It März 2009 gab es sehr schöne Solver

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GDIPlus.au3>
    ;=======================>
    #region GUI

    [/autoit] [autoit][/autoit] [autoit]

    $start = "000670900360005028805002100020506004009407000700100583070054261000703000084090050" ;normaler start
    $start1= "410670900360005028805002100020536004009407610700100583070054261000703000084090050" ;weitere zahlen der lösung eingesetzt
    $loesung="412678935367915428895342176128536794539487612746129583973854261251763849684291357";lösung
    $hGUI = GUIcreate("Sodoku", 300, 370)
    Local $aInputs[9][9]
    For $x = 0 To 8
    For $y = 0 To 8
    $left = ($x + 1) * 30
    $top = ($y + 1) * 30
    $nummer=stringmid($start1,$y*9+$x+1,1)
    if $nummer="0" then $nummer=""
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $nummer = ' & $nummer & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aInputs[$x][$y] = GUICtrlCreateInput($nummer, $left, $top, 20, 20)
    Next
    Next
    $idStartBut = GUIctrlcreatebutton("Start", 100, 320, 100)
    ;load_old_sodoku($aInputs)
    GUIsetstate()
    ;====================>Mit GDI+ die Striche draufmalen
    draw_lines()
    ;======>
    While 1
    $nMsg = GUIgetmsg()
    Switch $nMsg
    Case -3 ;GUI_EVENT_CLOSE
    Exit
    Case $idStartBut
    $aSodoku = get_array_of_sodoku($aInputs)
    save_Sodoku_Ini($aSodoku)
    MakeSodoku($aSodoku, $aInputs)
    EndSwitch
    Sleep(20)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func load_old_sodoku($aInputs)
    If NOT FileExists("last_sodoku.ini") Then return -1
    For $x = 0 To 8
    For $y = 0 To 8
    GUICtrlSetData($aInputs[$x][$y], Iniread("last_sodoku.ini", "section", $x&"|"&$y, ""))
    Next
    Next
    return 0
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    Func save_Sodoku_Ini($aSodoku)
    For $x = 0 To 8
    For $y = 0 To 8
    If $aSodoku[$x][$y] <> 0 Then
    Iniwrite("last_sodoku.ini", "section", $x&"|"&$y, $aSodoku[$x][$y])
    Else
    Iniwrite("last_sodoku.ini", "section", $x&"|"&$y, "")
    endif
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func get_array_of_sodoku($aInputs)
    Local $aSodoku[10][10]
    For $x = 0 To 8 ;die nicht-existierende Reihe mit 0en auffüllen
    $aSodoku[$x][9] = 0
    Next
    For $x = 0 To 8
    For $y = 0 To 8
    $aSodoku[$x][$y] = GUIctrlread($aInputs[$x][$y])
    If $aSodoku[$x][$y] = "" Then $aSodoku[$x][$y] = 0
    Next
    Next
    return $aSodoku
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func draw_lines()
    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hPen = _GDIPlus_PenCreate(0xFF000000, 3)
    _GDIPlus_GraphicsDrawLine($hGraphics, 115, 20, 115, 300, $hPen) ;senkrecht
    _GDIPlus_GraphicsDrawLine($hGraphics, 205, 20, 205, 300, $hPen) ;senkrecht
    _GDIPlus_GraphicsDrawLine($hGraphics, 20, 115, 295, 115, $hPen) ;waagrecht
    _GDIPlus_GraphicsDrawLine($hGraphics, 20, 205, 295, 205, $hPen) ;waagrecht
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func array_drehen2D($array)
    $er = $array
    For $i = 0 To Ubound($array) -1
    For $i2 = 0 To Ubound($array, 2) -1
    $er[$i][$i2] = $array[$i2][$i]
    Next
    Next
    return $er
    EndFunc ;==>by Zeitriss

    [/autoit] [autoit][/autoit] [autoit]

    #endregion GUI

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func MakeSodoku($aFeld, $aInputs)
    Local $aMerk[9][9] ;zum merken, welche Zahlen dort hin passen
    While 1
    $Ziffervoll = true
    For $x = 0 To 8 ;==>Alle Ziffern setzen
    For $y = 0 To 8
    If $aFeld[$x][$y] = 0 Then
    $Ziffervoll = False
    $aMerk[$x][$y] = getpossibleNrs($aFeld, $x, $y)
    Else
    $aMerk[$x][$y] = ""
    EndIf
    Next
    Next
    If $Ziffervoll Then exitloop
    ;===>Alle Ziffern setzen, die eindeutig sind
    For $x = 0 To 8 ;==>Alle Ziffern setzen
    For $y = 0 To 8
    If Stringlen($aMerk[$x][$y]) = 1 Then
    $aFeld[$x][$y] = $aMerk[$x][$y]
    $aMerk[$x][$y] = ""
    EndIf
    Next
    Next
    Sleep(5)
    WEnd
    ;===========================>Berechnung ist beendet
    ;=======>Jetzt werden die Kontrollfelder ausgefüllt
    For $x = 0 To 8
    For $y = 0 To 8
    GUIctrlsetdata($aInputs[$x][$y], $aFeld[$x][$y])
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func getpossibleNrs($aFeld, $iX_coord, $iY_coord)
    $sCase = "123456789"
    ;========>Senkrechte
    For $y = 0 To 8
    If $aFeld[$iX_coord][$y] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX_coord][$y], "")
    Next
    ;=========>Waagrechte
    For $x = 0 To 8
    If $aFeld[$x][$iY_coord] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$x][$iY_coord], "")
    Next
    ;==============>Daten des 9er-Feldes bestimmen
    If $iX_coord < 3 Then ;die Yer
    $iX = 1
    elseif $iX_coord > 5 Then
    $iX = 7
    elseif $iX_coord < 6 and $iX_coord > 2 Then
    $iX = 4
    EndIf
    ;=>
    If $iY_coord < 3 Then ;die Yer
    $iY = 1
    elseif $iY_coord > 5 Then
    $iY = 7
    elseif $iY_coord < 6 and $iY_coord > 2 Then
    $iY = 4
    EndIf
    ;=========>9er-Feld
    If $iX > 0 Then
    If $aFeld[$iX-1][$iY] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX-1][$iY], "")
    EndIf
    If $iX < 9 Then
    If $aFeld[$iX+1][$iY] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX+1][$iY], "")
    EndIf
    If $iX > 0 and $iY > 0 Then
    If $aFeld[$iX-1][$iY-1] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX-1][$iY-1], "")
    EndIf
    If $iX < 9 and $iY > 0 Then
    If $aFeld[$iX+1][$iY-1] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX+1][$iY-1], "")
    EndIf
    If $iY > 0 Then
    If $aFeld[$iX][$iY-1] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX][$iY-1], "")
    EndIf
    If $iX < 9 and $iY < 9 Then
    If $aFeld[$iX+1][$iY+1] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX+1][$iY+1], "")
    EndIf
    If $iX > 0 and $iY < 9 Then
    If $aFeld[$iX-1][$iY+1] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX-1][$iY+1], "")
    EndIf
    If $iY < 9 Then
    If $aFeld[$iX][$iY+1] <> 0 Then $sCase = Stringreplace($sCase, $aFeld[$iX][$iY+1], "")
    EndIf
    ;=============>
    return $sCase
    EndFunc

    [/autoit]


    Habe dein Script mal "vorbelegt" mit einem leichten Sudoku. Es wurde erst gelöst, nachdem ich weitere Zahlen eingesetzt hatte.
    µit - März hier findest du z.B. einen Solver, bei dem Script muß man die Zeile 158 auskommentieren, um etwas zu "sehen". Das Script mit der Gui und dem farbig dargestellten Lösungsweg der Strategien hab ich irgendwo vergraben...

  • Schnuffel hat Geburtstag

    • Andy
    • 28. Juni 2010 um 14:43

    Glücklichen Herzwunsch auch von mir!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™