Hier im Forum findest du auch einige.
z.B.: Eins vom Xeno - Such mal nach Secure bzw. gina hook
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
Ich hab auch Probleme mit dem 5ten BT-Sudoku!
Kannst du deins bitte posten, dann tausch ich es beim Benchmark aus.
lgE
EDIT: Ich hab jetzt einfach das 5 (4 in der Ini) gelöscht und hinten ein leeres angehängt.
Es ist ja auch interessant, wie lange ein BT hierfür braucht...
Neue INI:
[LG]
0=000670900360005028805002100020506004009407000700100583070054261000703000084090050
1=628009000109056004500872001900510467807000030060020900004907103000201709091000280
2=076930000000108400300026000045080130010567090200310058068002005704000982020003710
3=120500360300009020007208004019000873403897001002350400000000087850016900200980140
4=906020100020050460000009730004260070700030608030871204800700041213000090490308006
5=007000300050908004900030060070004080102070900000500006800010000000000405060007000
6=060070008900104070003000500200007000008050906030900020000600010805000000000030007
7=000000000005010700070602090009020800060835010004070500030408020001090400000000000
8=004010050050900208300006000020000100000403000005000060000700005901004030070060900
9=500000006004902010070050900020004060900060803007100000000080200401000000000006070
[BT]
0=000000103000050000000000800060020070001000000000300000000001460720000050000800000
1=100050000006009000080200004040030008007000060900000100030800002000004050000010700
2=000300800640800050805000001500070206000090000209080005400000709020008013007005000
3=050060001004800070800000052200057030000000000030690005790000008010006500500030060
4=000000000005010700070602090009020800060835010004070500030408000001090400000000000
5=060090050000050609000362000006005700982030546003600100000246000601070308050010060
6=007000000000010000000040005000008900400000000906007000008609000000000050030000040
7=530070000600005000098000060800060003400803001700020006060000280000400005000080079
8=100050000006009000080200004040030008007000060900000100030800002000004050000010700
9=000000000000000000000000000000000000000000000000000000000000000000000000000000000
Mein aktueller Benchmark:
Sudoku Logisch 1 Richtig - Benötigte Zeit: 75.3657238559649
Sudoku Logisch 2 Richtig - Benötigte Zeit: 74.6170253481937
Sudoku Logisch 3 Richtig - Benötigte Zeit: 75.222409552052
Sudoku Logisch 4 Richtig - Benötigte Zeit: 75.9213810693817
Sudoku Logisch 5 Richtig - Benötigte Zeit: 74.7234634569477
Sudoku Logisch 6 Richtig - Benötigte Zeit: 159.986534601465
Sudoku Logisch 7 Richtig - Benötigte Zeit: 158.99925828562
Sudoku Logisch 8 Richtig - Benötigte Zeit: 183.081648645289
Sudoku Logisch 9 Richtig - Benötigte Zeit: 157.39235014506
Sudoku Logisch 10 Richtig - Benötigte Zeit: 157.207410439036
Ergebnis Logisch: Zeit gesammt: 1192.51720539901 Zeit Durchschnitt: 119.251720539901
Sudoku Backtrack 1 Richtig - Benötigte Zeit: 1246.10585982297
Sudoku Backtrack 2 Richtig - Benötigte Zeit: 4943.8973389076
Sudoku Backtrack 3 Richtig - Benötigte Zeit: 377.846905123416
Sudoku Backtrack 4 Richtig - Benötigte Zeit: 4305.27231812982
Sudoku Backtrack 5 Richtig - Benötigte Zeit: 327.588562233468
Sudoku Backtrack 6 Richtig - Benötigte Zeit: 186.952811041627
Sudoku Backtrack 7 Richtig - Benötigte Zeit: 1707.07869296237
Sudoku Backtrack 8 Richtig - Benötigte Zeit: 248.017275938702
Sudoku Backtrack 9 Richtig - Benötigte Zeit: 4948.56944108818
Sudoku Backtrack 10 Richtig - Benötigte Zeit: 779.482029140575
Ergebnis Logisch: Zeit gesammt: 1192.51720539901 Zeit Durchschnitt: 119.251720539901
Ergebnis Backtrack: Zeit gesammt: 19070.8112343887 Zeit Durchschnitt: 1907.08112343887
Ergebnis gelöste Sudokus: 20
lgE
So hab jetzt mein Script mal überarbeitet und es ist viel schneller, als vorher
jedoch löse ich z.z. nichtmal die Hälfte der Sudokus
Aber es ist ja noch etwas Zeit
Mein aktueller Benchmark:
Sudoku Logisch 1 Richtig - Benötigte Zeit: 65.7804274006892
Sudoku Logisch 2 Richtig - Benötigte Zeit: 64.5132272397749
Sudoku Logisch 3 Richtig - Benötigte Zeit: 64.5336208931582
Sudoku Logisch 4 Richtig - Benötigte Zeit: 64.9691511071938
Sudoku Logisch 5 Richtig - Benötigte Zeit: 64.7501288571592
Sudoku Logisch 6 Richtig - Benötigte Zeit: 130.012613334935
Sudoku Logisch 7 Richtig - Benötigte Zeit: 128.90465128948
Sudoku Logisch 8 Falsch
Sudoku Logisch 9 Richtig - Benötigte Zeit: 161.216579202105
Sudoku Logisch 10 Richtig - Benötigte Zeit: 129.80336886392
Ergebnis Logisch: Zeit gesammt: 1135.98124901349 Zeit Durchschnitt: 113.598124901349
Sudoku Backtrack 1 Falsch
Sudoku Backtrack 2 Falsch
Sudoku Backtrack 3 Falsch
Sudoku Backtrack 4 Falsch
Sudoku Backtrack 5 Falsch
Sudoku Backtrack 6 Falsch
Sudoku Backtrack 7 Falsch
Sudoku Backtrack 8 Falsch
Sudoku Backtrack 9 Falsch
Sudoku Backtrack 10 Falsch
Ergebnis Logisch: Zeit gesammt: 1135.98124901349 Zeit Durchschnitt: 113.598124901349
Ergebnis Backtrack: Zeit gesammt: 2610.95502361334 Zeit Durchschnitt: 261.095502361334
Ergebnis gelöste Sudokus: 9
Ich hoffe, ich bekomme auch Logisch Nr.8 noch hin, ohne viel an Speed einzubüßen!
Und bei den anderen muß ich mir sowieso noch was überlegen...
lgE
Weitere Möglichkeiten:
1) Via Consolewrite bzw. ConsoleRead (Stdin)
2) In GUI ein Edit erstellen, welches via ControlSetText gefüttert wird
3) via PostMessage / _SendCopyDataString
Zu allen Möglichkeiten gibts schon Beispiele im Forum
lgE
Zuwenig Vorgaben bei Backtracking geht nicht
sondern nur falsche Vorgaben...
Ein Backtrackalgorithmus muß auch ein leeres Sudoku korrekt befüllen können.
Nr. 4 hat folgende Lösung:
947 165 283
823 974 516
651 328 947
478 596 132
516 432 879
239 817 465
764 251 398
385 749 621
192 683 754
Alles anzeigen
Ach ja, ich hab einen Intel Core2 T7200 @ 2,00 GHz
Aber wenn ich noch etwas Zeit finde, dann wird mein Algo noch etwas schneller
Edit: Lösung oben ist vom 5 Sudoku, hier Lösung 4:
Falls du erkennen kannst, daß ein ControlClick nicht funktionieren wird, dann kannst du in diesem Fall ein MouseClick machen.
Und zwar zuerst Mausposition speichern und nach dem Click wieder zurücksetzten (mit Speed 0).
Das behindert zwar die richtige Maus für ein paar wenige ms, aber es würde funktionieren...