Hier sind meine Scripte
Der logische Solver:
Hier hab ich die Methode_5(hidden pairs/tribbles) abgeschaltet, da sie manchmal fehlerhaft arbeitet!
Hab das Problem noch nicht gefunden...
Der reine Backtracker:
lgE
Hier sind meine Scripte
Der logische Solver:
Hier hab ich die Methode_5(hidden pairs/tribbles) abgeschaltet, da sie manchmal fehlerhaft arbeitet!
Hab das Problem noch nicht gefunden...
Der reine Backtracker:
lgE
Na dann werd ich mich auch mal bemühen, etwas Geschwindigkeit gutzumachen ![]()
btw.: ich hab auch ein reines BT-Script geschrieben.
insgesammt 44 Zeilen
Man beachte Logisch Nr.: 4 und das leere Sudoku BackTrack Nr.: 10
Sudoku Logisch 1 Richtig - Benötigte Zeit: 62.6152206495518
Sudoku Logisch 2 Richtig - Benötigte Zeit: 23.2518378732493
Sudoku Logisch 3 Richtig - Benötigte Zeit: 38.6174779196797
Sudoku Logisch 4 Richtig - Benötigte Zeit: 20.3076089279503
Sudoku Logisch 5 Richtig - Benötigte Zeit: 30.7047404069512
Sudoku Logisch 6 Richtig - Benötigte Zeit: 5525.45980005839
Sudoku Logisch 7 Richtig - Benötigte Zeit: 773.753926825896
Sudoku Logisch 8 Richtig - Benötigte Zeit: 7149.75506663556
Sudoku Logisch 9 Richtig - Benötigte Zeit: 2557.18925170657
Sudoku Logisch 10 Richtig - Benötigte Zeit: 5812.10405233067
Ergebnis Logisch: Zeit gesammt: 21993.7589833345 Zeit Durchschnitt: 2199.37589833345
Sudoku Backtrack 1 Richtig - Benötigte Zeit: 1765275.2981175
Sudoku Backtrack 2 Richtig - Benötigte Zeit: 3151.57373353317
Sudoku Backtrack 3 Richtig - Benötigte Zeit: 1263.15970325838
Sudoku Backtrack 4 Richtig - Benötigte Zeit: 12333.7896296876
Sudoku Backtrack 5 Richtig - Benötigte Zeit: 6219.82486600951
Sudoku Backtrack 6 Richtig - Benötigte Zeit: 4814.80635108652
Sudoku Backtrack 7 Richtig - Benötigte Zeit: 186393.929954785
Sudoku Backtrack 8 Richtig - Benötigte Zeit: 3464.58753836032
Sudoku Backtrack 9 Richtig - Benötigte Zeit: 3146.24987253967
Sudoku Backtrack 10 Richtig - Benötigte Zeit: 194.844596170742
Ergebnis Logisch: Zeit gesammt: 21993.7589833345 Zeit Durchschnitt: 2199.37589833345
Ergebnis Backtrack: Zeit gesammt: 1986258.06436293 Zeit Durchschnitt: 198625.806436293
Ergebnis gelöste Sudokus: 20
Alles anzeigen
Jedoch für BT Nr.:1 braucht der Algo fast 30 min
und das haut mir den ganzen Schnitt zusammen...
lgE
Dafür, daß es sich um den März-Wettbewerb handelt, einigen wir uns doch ziemlich bald ![]()
Wer macht eigentlich die Auswertung?
Dieser Jemand soll dann Sudokus für die Analyse auswählen.
Und auch entscheiden, nach welchen Kriterien bewertet werden soll.
Ich denke, es wird keinen "besten" Solver geben, sondern mehrere...
Den Solver mit der schönsten Strategie (unabhängig von der Geschwindigkeit)
Den Solver, der im Durchschnitt am schnellsten löst
Den programmiertechnisch schnellsten Solver
Den schönsten, reinen Backtracker
usw...
Und daraus kombinieren wir dann die besten Elemente zu einem gescheiten Solver.
lgE
Anwendungsbeispiele gibt es genügend
Ich hab mal ein Programm geschrieben, welches den Soundkarteninut als mp3 aufnimmt, gleichzeitigt zu einem Icecastserver streamt, wärend ein Webcambild mit Logo versehen wird und via http-post hochgeladen wird.
Wenn nun die Internetverbindung grad nicht so richtig will, geraten Stream und Webcamupload etwas ins stocken und würden das gesammte Script bremsen.
Deshalb ist jedes Programm ein eigenes Script, die trotzdem alle miteinander kommunizieren müssen.
Das geht mit ConsoleWrite
lgE
Hier im Forum findest du auch einige.
z.B.: Eins vom Xeno - Such mal nach Secure bzw. gina hook
lgE
Hi
Schau dir mal die GDI+ Beispiele von Uez im englischen Forum an.
Da ist mindestens eines dabei, wo Bälle miteinander kollidieren und sich gegenseitig beschleunigen...
lgE
Auch will ![]()
Eine Primzahl ist nur durch 1 und sich selbst teilbar - und das trifft auf 1 völlig zu ![]()
Vielleicht hilft eine Flag-Option weiter, wo man selbst entscheiden kann, ob 1 nun eine Primzahl ist oda nicht ![]()
lgE
EDIT: *klugscheiß off*
Dann müßte man die Variablen in einer Funktion mit Punkt trennen
z.b.: Modulo der Zahlen 3,4 und 2,1:
[autoit]Mod(3,4.2,1)
[/autoit]
Wie sieht das erst aus ![]()
lgE
Eben nicht!
In der englischen Schreibweise wird das Komma als Tausendertrennzeichen verwendet und der Punkt als Dezimalstellentrennzeichen.
In Programmiersprachen kann man auch deshalb kein Komma benutzen, da es schon einem anderen Zweck dient.
lgE
...Komma abtrennen und nicht mit einem Punkt (wo gibts denn sowas?).
Verlangen nicht alle Programmiersprachen einen Punkt bei Dezimalstellen?!
weil englische Schreibweise...
lgE
Hi
Du mußt GuiCtrlRead innerhalb der Funktion ausführen:
[autoit]Local $len = StringLen(GUICtrlRead($enter_id))
[/autoit]
sonst hat $Len immer den Anfangswert...
lgE
Wenn du jedem Control eine Hintergrundfarbe zuweist, dann gehts.
Ich glaube auch, daß das ein Bug ist...
lgE
Hi
Vielleicht so?
#include<GUIConstantsEx.au3>
#include<WinAPI.au3>
#include<WindowsConstants.au3>
#include <EditConstants.au3>
Global $hGui, $hInput1, $hInput2, $hInput3, $hLabel
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("Test", 420, 200)
$hInput1 = GUICtrlCreateInput("1234", 10, 10, 400, 20, $ES_NUMBER)
GUICtrlSetLimit(-1, 4)
$hInput2 = GUICtrlCreateInput("http://www.autoit.de", 10, 40, 400, 20)
$hLabel = GUICtrlCreateLabel("", 10, 70, 100, 20)
$hInput3 = GUICtrlCreateInput("123ABCabc", 10, 110, 400, 20)
GUISetState()
_CheckUrl()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]While GUIGetMsg() <> -3
Sleep(5)
WEnd
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode, $hWndInput2, $hWndInput3
If Not IsHWnd($hInput2) Then $hWndInput2 = GUICtrlGetHandle($hInput2)
If Not IsHWnd($hInput3) Then $hWndInput3 = GUICtrlGetHandle($hInput3)
$hWndFrom = $ilParam
$iIDFrom = _WinAPI_LoWord($iwParam)
$iCode = _WinAPI_HiWord($iwParam)
Switch $hWndFrom
Case $hInput3, $hWndInput3
Switch $iCode
Case $EN_UPDATE ; Sent when an edit control is about to redraw itself
_CheckString()
EndSwitch
Case $hInput2, $hWndInput2
Switch $iCode
Case $EN_UPDATE ; Sent when an edit control is about to redraw itself
_CheckUrl()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _CheckUrl() ;pattern from http://www.osix.net/modules/article/?id=586
Local $sPattern = "^(https?://)" & _
"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" & _; //user@
"(([0-9]{1,3}\.){3}[0-9]{1,3}" & _; // IP- 199.194.52.184
"|" & _; // allows either IP or domain
"([0-9a-z_!~*'()-]+\.)*" & _; // tertiary domain(s)- www.
"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." & _; // second level domain
"[a-z]{2,6})" & _; // first level domain- .com or .museum
"(:[0-9]{1,4})?" & _; // port number- :80
"((/?)|" & _; // a slash isn't required if there is no file name
"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"
Local $sUrl = GUICtrlRead($hInput2)
If StringRegExp($sUrl, $sPattern) Then
GUICtrlSetData($hLabel, "URL korrekt")
GUICtrlSetBkColor($hLabel, 0x00FF00)
Else
GUICtrlSetData($hLabel, "URL nicht korrekt")
GUICtrlSetBkColor($hLabel, 0xFF0000)
EndIf
EndFunc ;==>_CheckUrl
Func _CheckString()
Local $sString = GUICtrlRead($hInput3)
GUICtrlSetData($hInput3, StringRegExpReplace($sString, "[^a-zA-Z0-9]", ""))
EndFunc ;==>_CheckString
lgE
Du könntest Schleifen mit einem "Goto" realisieren.
Mehrzeilige Befehle wie:
If...Endif
While...WEnd
Do...Until
usw...
werden wahrscheinlich nicht zu machen sein.
Diese Aufgabe ist aus dieser Projekt-X Radiosendung (FM4):
http://fm4-archiv.at/details.php?file=257
und ist sehr zu empfehlen ![]()
(anm: teilw. österreichischer Dialekt...)
Yep, Pi find ich auch cool!
Bei _MathEx_IsDivisible konnte man auch
[autoit]If Mod($integer_number_mathex_dividend,$integer_number_mathex_divisor)=0 Then
[/autoit]
verwenden...
Aufgabe:
Ein Schusterbetrieb hat im Jahr 15€ Umsatz. Wieviel Umsatz hat er in 2 Jahren, wenn der Umsatz pro Jahr gleich bleibt ![]()
(projekt x / fm4)
lgE
BackTrack:
Man probiert für jedes Feld jede mögliche Zahl und überprüft, ob diese Zahl den Regeln entspricht (darf nur 1 mal in einer Reihe vorkommen usw.)
Wenn dies nicht der Fall ist, dann 1 Schritt zurück.
Diese Funktion sollte (muß) rekursiv sein.
Wenn man mit Hilfe der logischen Algo´s die Anzahl der Möglichkeiten schon reduziert hat, dann ist auch der BT-Algo schneller...
Zur Geschwindigkeit allgemein: Man hat doch für jedes Feld eine Variable, welche die noch möglichen Zahlen beinhaltet.
Dazu kann man einen String oder ein Array nehmen; Oder auch eine andere Möglichkeit, wie ich sie verwende (wird aber noch nicht verraten ;))
Hier kann man viel Geschwindigkeit rausholen.
lgE