picea892 Posted February 18, 2010 Share Posted February 18, 2010 Hi all So, I'm considering my options for randomly sorting an array. _arraySort can sort ascending/descending. I would have to utilize the random function. Except that continuously choosing random numbers between the array max and min seems to be a poor way of doing it. Does anyone have a thought on how to accomplish this? Picea Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 18, 2010 Moderators Share Posted February 18, 2010 picea892,I would do it this way - unless the array is seriously large, when all the Redims would slow it down unacceptably.#include <Array.au3> Global $aInput[9] = [1, 2, 3, 4, 5, 6, 7, 8, 9] Global $aOutput[UBound($aInput)] For $i = 0 To UBound($aInput) - 1 _Get_Element($i) Next _ArrayDisplay($aOutput, "Output") Func _Get_Element($iOutPutIndex) $iInputIndex = Random(0, UBound($aInput) - 1, 1) $aOutput[$iOutPutIndex] = $aInput[$iInputIndex] _ArrayDelete($aInput, $iInputIndex) EndFuncM23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Yashied Posted February 18, 2010 Share Posted February 18, 2010 #Include <Array.au3> Dim $Data[10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] _ArrayDisplay($Data) For $i = 1 To 100 $A = Random(0, UBound($Data) - 1, 1) $B = Random(0, UBound($Data) - 1, 1) $Temp = $Data[$A] $Data[$A] = $Data[$B] $Data[$B] = $Temp Next _ArrayDisplay($Data) VelvetElvis 1 My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
picea892 Posted February 18, 2010 Author Share Posted February 18, 2010 Wow...great examples guys....And the solutions appear to be random....no solution is duplicated. I think that Melba23's example seems more random somehow. Thanks again for these excellent solutions Link to comment Share on other sites More sharing options...
kaotkbliss Posted February 18, 2010 Share Posted February 18, 2010 isn't that kind of an oxymoron? randomly sort? random=chaotic, sort=to put in order lol 010101000110100001101001011100110010000001101001011100110010000 001101101011110010010000001110011011010010110011100100001 My Android cat and mouse gamehttps://play.google.com/store/apps/details?id=com.KaosVisions.WhiskersNSqueek We're gonna need another Timmy! Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 21, 2010 Moderators Share Posted February 21, 2010 picea892,Yashied's code is much faster if you are looking to randomise really large arrays - it is the _ArrayDelete (running ReDim internally) which is the killer. For a 10000 element array, my code takes around 90 sec, Yashied's a mere 1 sec. No contest really! Moral: try to avoid ReDim if you can - particularly for large arrays!M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Malkey Posted February 21, 2010 Share Posted February 21, 2010 picea892,Yashied's code is much faster if you are looking to randomise really large arrays - it is the _ArrayDelete (running ReDim internally) which is the killer. For a 10000 element array, my code takes around 90 sec, Yashied's a mere 1 sec. No contest really! Moral: try to avoid ReDim if you can - particularly for large arrays!M23Melba23 Yashied's code will not randomize large arrays.The For-Next loop loops 100 times. The possible maximum number of elements that could be randomized is 200. For a 10,000 element array, 9,800 elements would remain the same, untouched. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 21, 2010 Moderators Share Posted February 21, 2010 Malkey, I had, of course, modified his code to run the loop 10 times the number of elements in the array. He still won! M23 P.S. If you are interested: expandcollapse popup#include <Array.au3> Global $aInput[10000] For $i = 0 To 9999 $aInput[$i] = $i Next ConsoleWrite("Yashied starts" & @CRLF) $iBegin = TimerInit() For $i = 1 To UBound($aInput) * 10 $A = Random(0, UBound($aInput) - 1, 1) $B = Random(0, UBound($aInput) - 1, 1) $Temp = $aInput[$A] $aInput[$A] = $aInput[$B] $aInput[$B] = $Temp Next ConsoleWrite("Yashied: " & TimerDiff($iBegin) & @CRLF) ConsoleWrite("M23 starts" & @CRLF) $iBegin = TimerInit() Global $aOutput[UBound($aInput)] For $i = 0 To UBound($aInput) - 1 _Get_Element($i) Next ConsoleWrite("M23: " & TimerDiff($iBegin) & @CRLF) Func _Get_Element($iOutPutIndex) $iInputIndex = Random(0, UBound($aInput) - 1, 1) $aOutput[$iOutPutIndex] = $aInput[$iInputIndex] _ArrayDelete($aInput, $iInputIndex) EndFunc Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Yashied Posted February 21, 2010 Share Posted February 21, 2010 This is correct. For $i = 1 To 2 * UBound($Data) My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 21, 2010 Moderators Share Posted February 21, 2010 Yashied, Makes you even faster! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Yashied Posted February 21, 2010 Share Posted February 21, 2010 No, just x2 is the minimum required value for a satisfactory result. My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 21, 2010 Moderators Share Posted February 21, 2010 Yashied,[serious]I believe your statement as it seems quite reasonable from a common-sense point of view, but do you have a mathematical basis for saying 2*array_size is the minimum?[/serious]M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
MvGulik Posted February 21, 2010 Share Posted February 21, 2010 (edited) whatever Edited February 7, 2011 by MvGulik "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ... Link to comment Share on other sites More sharing options...
Yashied Posted February 21, 2010 Share Posted February 21, 2010 (edited) I believe your statement as it seems quite reasonable from a common-sense point of view, but do you have a mathematical basis for saying 2*array_size is the minimum? IMHO #Include <Array.au3> Dim $Data[1000] For $i = 0 To UBound($Data) - 1 $Data[$i] = $i Next For $i = 1 To 9 $Count = 0 $Temp = $Data _ArraySortRandom($Temp, $i) For $j = 0 To UBound($Temp) - 1 If $Temp[$j] = $Data[$j] Then $Count += 1 EndIf Next ConsoleWrite('x' & $i & ' => ' & (100 * $Count / UBound($Data)) & '% matches' & @CR) Next Func _ArraySortRandom(ByRef $aArray, $iMultiplier = 2) Local $A, $B, $Temp For $i = 1 To $iMultiplier * UBound($aArray) $A = Random(0, UBound($aArray) - 1, 1) $B = Random(0, UBound($aArray) - 1, 1) $Temp = $aArray[$A] $aArray[$A] = $aArray[$B] $aArray[$B] = $Temp Next EndFunc ;==>_ArraySortRandom ~2% (20 of 1000) matches for 1k points with x2 multiplier. More than x4 does not make sense to choose. Edited February 21, 2010 by Yashied My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
dani Posted February 21, 2010 Share Posted February 21, 2010 (edited) Why is the match % at x1 always so much higher than the rest? Result always looks like this:x1 => 14.5% matches x2 => 2.2% matches x3 => 0.1% matches x4 => 0.1% matches x5 => 0.1% matches x6 => 0.1% matches x7 => 0.2% matches x8 => 0.1% matches x9 => 0.1% matchesVery strange right? $Temp always gets initialized back to $Data, which doesn't change, but still the % matches is extremely high (relatively) @ x1 compared to x2 and up...~ editOh lol nvm, I thought you were just running it 9 times with multiplier 2 but you use a different multiplier ($i from 1 To 9) Edited February 21, 2010 by d4ni Link to comment Share on other sites More sharing options...
Yashied Posted February 21, 2010 Share Posted February 21, 2010 Add the following line in the beginning of the script: SRandom(@AutoItPID) My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 21, 2010 Moderators Share Posted February 21, 2010 Yashied, Thanks. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
MvGulik Posted February 21, 2010 Share Posted February 21, 2010 (edited) whatever Edited February 7, 2011 by MvGulik "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ... Link to comment Share on other sites More sharing options...
jchd Posted May 3, 2010 Share Posted May 3, 2010 (edited) There is no need to scan the array multiple times as it can be done in O(N) instead of O(kN). Durstenfeld variant of the Fisher–Yates algorithm works in a single pass, uses only one call to Random() and guarantees randomness not worst than the one provided by Random(). (And AutoIt Random is very good.) #Include <Array.au3> ;;;;;; SRandom(@AutoItPID) don't use that. Local Const $limit = 10000 Dim $Data[$limit] For $i = 0 To $limit - 1 $Data[$i] = $i Next _ArrayDisplay($Data) For $i = UBound($Data) - 1 To 1 Step -1 $j = Random(0, $i, 1) $Temp = $Data[$j] $Data[$j] = $Data[$i] $Data[$i] = $Temp Next _ArrayDisplay($Data) EDIT: I didn't mean to actually use SRandom() at all. To be honest I don't remember why it was left there... Edited July 21, 2014 by jchd argumentum 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
GEOSoft Posted May 3, 2010 Share Posted May 3, 2010 Here's one that I got from SmOke_N several months back that might do what you want. Func _ArrayRandomShuffle($av_array, $i_lbound = 0) Local $i_ubound = UBound($av_array) - 1 Local $icc, $s_temp, $i_random For $icc = $i_lbound To $i_ubound $s_temp = $av_array[$icc] $i_random = Random($i_lbound, $i_ubound, 1) $av_array[$icc] = $av_array[$i_random] $av_array[$i_random] = $s_temp Next Return $av_array EndFunc George Question about decompiling code? Read the decompiling FAQ and don't bother posting the question in the forums.Be sure to read and follow the forum rules. -AKA the AutoIt Reading and Comprehension Skills test.*** The PCRE (Regular Expression) ToolKit for AutoIT - (Updated Oct 20, 2011 ver:3.0.1.13) - Please update your current version before filing any bug reports. The installer now includes both 32 and 64 bit versions. No change in version number. Visit my Blog .. currently not active but it will soon be resplendent with news and views. Also please remove any links you may have to my website. it is soon to be closed and replaced with something else. "Old age and treachery will always overcome youth and skill!" Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now