Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
Pseudocode:
1
2
3
4
5
6
| resstring = "" while len(jouwstring) > 0 randnr = random(0, len(jouwstring)) resstring = resstring & Mid(jouwstring, randnr, 1) jouwstring = Left(jouwstring, randnr - 1) & Right(jouwstring, randnr + 1, randnr + 1 - len(jouwstring)) wend |
Zoiets zou een idee zijn.
Niet getest, dus je zal sowieso heel wat dingen aan moeten passen, maar het idee is wel duidelijk lijkt me.
[ Voor 21% gewijzigd door NMe op 07-06-2004 22:57 . Reden: foutje 8)7 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Het kan net zo goed deze string zijn:
1
| 1,435,42,56,2356,234 |
Dus ik denk dat je er eerst een array van moet maken door te splitten op , en dan op de een of andere manier te onthouden welke array nummer (of hoe je het ook noemt) je al hebt gebruikt zodat deze niet gebruik wordt.
Dat is juist het probleem en los je dus niet op met jouw code.
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
Ik mis het concept "array" in je code:?NMe84 schreef op 07 juni 2004 @ 22:42:
Waarom überhaupt splitten? Het kan prima vanuit een array.
[...]
Bovendien hussel je volgens mij alle karakters door elkaar.. Dan krijg je ook uitvoer als:
1
| ,3 52 ,c, 6,t,1 ,4 e |
@TS: Waarom wordt de data in deze vorm aangeleverd? Komt het uit een DB? Dan kun je het meteen in een array schieten (en uit deze array achter elkaar willekeurige elementen kiezen waarbij je het gekozen element uit de array haalt). Anders moet je het even splitten in een array.
Daarna kun je "join" gebruiken om het weer in een string te schieten gescheiden door een komma.
Of wordt het door een user ingevoerd? Dan moet je er rekening mee houden dat er ook fouten gemaakt kunnen worden (komma's zonder spatie bijvoorbeeld).
* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans
Het gaat hier om een project waarbij je antwoorden moet maken die uit een database komen. Nu heb je bijvoorbeeld 30 vragen in de database maar ik wil dan zegmaar 15 vragen RANDOM op me scherm tonen.
Dus ik zat er aan te denken om de VraagId op te slaan en tussen elke VraagId een , en dan later daar op splitten en door elkaar gooien. En dan deze gewoon één voor één aflopen om zo de goede vraag uit de DB te pakken met RS.Move (randomVraagId).
Logisch is dan dat er geen dubbele vragen mogen worden vertoond
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
Schrijffout, bedoelde gewoon "string".nescafe schreef op 07 juni 2004 @ 22:50:
Ik mis het concept "array" in je code:?
Bovendien hussel je volgens mij alle karakters door elkaar.. Dan krijg je ook uitvoer als:
code:
1 ,3 52 ,c, 6,t,1 ,4 e
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Daar heeft mijn voorbeeld niets mee te makenNMe84 schreef op 07 juni 2004 @ 22:57:
[...]
En ik heb nergens gelezen dat er meer letters tussen die komma's konden staan.
Als je access gebruikt als database:Polderdijk schreef op 07 juni 2004 @ 22:54:
[...]
En dan deze gewoon één voor één aflopen om zo de goede vraag uit de DB te pakken met RS.Move (randomVraagId).
Logisch is dan dat er geen dubbele vragen mogen worden vertoond
[google=database select random], derde resultaat: http://lists.evolt.org/ar...-Mon-20040315/156878.html
Als je SQL Server gebruikt... nu ik zo zoek.. dan wordt het iets moeilijker om het direct in de query te doen
Gevonden: http://aspnet.4guysfromrolla.com/articles/051003-1.aspx m.b.v. [google=sql server random order], 6e resultaat.
1
2
3
| SELECT ProductID, Name, Description, Price FROM Products ORDER BY NEWID() |
Waarbij de functie NEWID() iedere keer een nieuwe unique identifier geeft. (Vraag me af of dit performancetechnisch wel verantwoord is, op guid's sorteren)
[ Voor 23% gewijzigd door nescafe op 07-06-2004 23:10 ]
* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans
Maar nu zit ik nog steeds met het probleem dat ik hiermee dubbele waarden kan genereren. Ik zoek een manier dat ik telkens wat eruit haal en dat dit wordt 'afgestreept' zodat je het niet 2 keer kan gebruiken.
Ik zat dus hieraan te denken:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| string = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" Aantal = 10 splString = Split(string, ",") aantalInString = UBound(splString) x = 0 Do While x <= Aantal Randomize randomgetal = CLng(aantalInString * Rnd()) string2 = string2 & "," & splString(randomgetal) 'hier moet iets komen zodat het randomgetal uit de array 'wordt gestreept en dus niet meer gebruik kan worden x = x + 1 Loop |
Edit:
In eerste instantie gebruik ik MS SQL, maar het moet waarschijnlijk een Access database gaan worden omdat het 'mobiel' moet gaan worden. Dus eigenlijk moet het werken voor alle 2.Als je access gebruikt als database:
[ Voor 19% gewijzigd door Polderdijk op 07-06-2004 23:10 ]
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
Als je dus dat dictionary object gebruikt is er een methode om een element te verwijderen.Polderdijk schreef op 07 juni 2004 @ 23:08:
Nooit van dictionary gehoord maar na een bezoek aan google weet ik meer
Maar nu zit ik nog steeds met het probleem dat ik hiermee dubbele waarden kan genereren. Ik zoek een manier dat ik telkens wat eruit haal en dat dit wordt 'afgestreept' zodat je het niet 2 keer kan gebruiken.
Ik zat dus hieraan te denken:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 string = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" Aantal = 10 splString = Split(string, ",") aantalInString = UBound(splString) x = 0 Do While x <= Aantal Randomize randomgetal = CLng(aantalInString * Rnd()) string2 = string2 & "," & splString(randomgetal) 'hier moet iets komen zodat het randomgetal uit de array 'wordt gestreept en dus niet meer gebruik kan worden x = x + 1 Loop
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Ahhhh, er gaat een wereld voor me openNMe84 schreef op 07 juni 2004 @ 23:10:
[...]
Als je dus dat dictionary object gebruikt is er een methode om een element te verwijderen.
Ik ga ff verder googlen
Edit:
Klopt, volgens http://www.w3schools.com/asp/asp_ref_dictionary.asp kan het met het remove method!
Ik ga het ff proberen
[ Voor 20% gewijzigd door Polderdijk op 07-06-2004 23:13 ]
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
Ik denk dat je qua performance de random sortering beter op de server kan uitvoeren dan op je client. Een sql server is erop gebouwd om te sorteren. Het 30 keer verplaatsen van je ado/daocursor (rs.Move) zal denk ik meer tijd kosten.
edit:
Ik weet niet hoe deze "mobiele" applicatie gaat werken (meerdere klanten, of portable devices), maar misschien dat de MSDE (Microsoft SQL Server Desktop Edition) uitkomst kan bieden. Dan houd je het sql-dialect wel gelijk.Polderdijk schreef op 07 juni 2004 @ 23:08:
[...]
In eerste instantie gebruik ik MS SQL, maar het moet waarschijnlijk een Access database gaan worden omdat het 'mobiel' moet gaan worden. Dus eigenlijk moet het werken voor alle 2.
[ Voor 46% gewijzigd door nescafe op 07-06-2004 23:22 ]
* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Private Function HusselString(strIn As String, Optional strSplitChar As String = ",") As String Dim arrTMP() As String Dim T As Long, A As Long, B As Long, U As Long Dim strSwap As String arrTMP = Split(strIn, strSplitChar) U = UBound(arrTMP) If U > 0 Then Randomize Timer For T = 0 To UBound(arrTMP) A = CLng(Rnd * U) B = CLng(Rnd * U) strSwap = arrTMP(A) arrTMP(A) = arrTMP(B) arrTMP(B) = strSwap Next End If HusselString = Join(arrTMP, strSplitChar) End Function |
Erg veel makkelijker kan ik het je niet maken
Aanroepen:
1
2
| Dim newString As String
newString = HusselString("a,236,124,dfk,jg,wef,fio,7,dnui,23n,wef") |
/voorkauw modus
Je bent het me overigens nu wel verschuldigd op de P&W Meeting III te komen
/ledenwerf-modus
[ Voor 29% gewijzigd door RobIII op 08-06-2004 00:40 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
SELECT * FROM table ORDER BY rand() LIMIT 0,15; heb je daar iets aan?
Geweldig ben jeRobIII schreef op 08 juni 2004 @ 00:36:
Simpele functie om je zooi te husselen:
[..vbcode..]
/voorkauw modus
Je bent het me overigens nu wel verschuldigd op de P&W Meeting III te komen(Zie sig)
/ledenwerf-modus
Ik heb het ff zo gemaakt om te laten werken in ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Function Hussel(strIn)
arrTMP = Split(strIn, ",")
U = UBound(arrTMP)
If U > 0 Then
Randomize Timer
For T = 0 To UBound(arrTMP)
A = CLng(Rnd * U)
B = CLng(Rnd * U)
strSwap = arrTMP(A)
arrTMP(A) = arrTMP(B)
arrTMP(B) = strSwap
Next
End If
Hussel = Join(arrTMP, ",")
End Function
Response.Write Hussel("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16") |
En het werkt super. Vanavond implementeren in me ASP pagina en dan moet het lukken!
P.S.
Over die meeting, ik wil graag komen, maar ik beng bang dat ik met me luie r**t in Turkije lig en dan heb ik echt geen zin om terug te komen (of thuis te blijven) voor een meeting
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!
Oops! Google Chrome could not find www.rijks%20museum.nl
Al moest het alleen op SQL server draaien had ik daar echt voor gekozen, alleen het moet dus met Access werken en daar werkt de NewId() functie helaas niet in.P_de_B schreef op 08 juni 2004 @ 08:53:
Ik zou er toch echt nog eens over nadenken om het direct via de NewId() functie in je SQL code te doen. Ik denk dat dat sneller gaat dan de VBScript hussel functie, zeker bij een beperkt aantal records.
Ook MSDE en al dat soort oplossingen zijn dus voor mij geen optie. En overigens, die hussel optie kan ik, nu ik de werking zie, voor meerdere dingen gaan toepassen! Dus ik ben gewoon blij2
Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!