Array Shuffler
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Array Shuffler
Salve!
Vorrei sapere qual'e' il metodo migliore (in termini di velocita' e performance) per eseguire uno shuffle (pseudo-random) di un array partendo pero' da un preciso "numero" (seed).
Per esempio: Inserisco come seed il numero 9349 e da quel numero deve avvenire una permutazione pseudo-random di un array.
Quindi. Array X -> Shuffle(9349) -> Array Y. Poi, inserendo l'array Y -> Shuffle(9349) -> riottenere l'array X.
Esiste qualche algoritmo?
Vorrei sapere qual'e' il metodo migliore (in termini di velocita' e performance) per eseguire uno shuffle (pseudo-random) di un array partendo pero' da un preciso "numero" (seed).
Per esempio: Inserisco come seed il numero 9349 e da quel numero deve avvenire una permutazione pseudo-random di un array.
Quindi. Array X -> Shuffle(9349) -> Array Y. Poi, inserendo l'array Y -> Shuffle(9349) -> riottenere l'array X.
Esiste qualche algoritmo?
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Array Shuffler
Se hai un discreto numero di elementi il più veloce probabilmente è copiare l'array su una list e lasciar fare il resto a GM, specialmente in VM.
https://docs.yoyogames.com/source/dadio ... uffle.html
https://docs.yoyogames.com/source/dadio ... uffle.html
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: Array Shuffler
Grazie della riposta Jak. Ma il problema non e' lo shuffler vero e proprio, ma bensi' riuscire a mescolare l'array (lista, o cosa sia) in base ad un seed, quindi dopo aver ottenuto l'array X mescolata con un certo seed, vorrei che se mescolo di nuovo l'array X con lo stesso seed, ri-ottengo cosi' com'era l'array prima di venir mescolato.Jak ha scritto:Se hai un discreto numero di elementi il più veloce probabilmente è copiare l'array su una list e lasciar fare il resto a GM, specialmente in VM.
https://docs.yoyogames.com/source/dadio ... uffle.html
E' qui che non so come fare...
- boxbuilder
- Membro
- Messaggi: 158
- Iscritto il: 25/06/2015, 10:37
- Specialità: programmatore
- Uso: GM:Studio 1.4 HTML5
- Contatta:
Re: Array Shuffler
Ciao, hai visto questo?Xxshark888xX ha scritto:Esiste qualche algoritmo?
https://en.wikipedia.org/wiki/Fisher%E2 ... es_shuffle
È una permutazione ciclica molto efficiente. Più sotto c'è anche un sattoloCycle molto carino (rispetta le quote rosa).
L'unica cosa che ti serve per effettuare l'"unscrambe" è memorizzare di volta in volta la j per ogni iterazione.
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Array Shuffler
Cè anche scritto sul link che ti ho mandato. La funzione ds_list_sort() usa il seed integrato di GM.
Quindi ti basta usare:
https://docs.yoyogames.com/source/dadio ... _seed.html
Quindi ti basta usare:
https://docs.yoyogames.com/source/dadio ... _seed.html
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Re: Array Shuffler
Si ma il sort è piu' lento di uno shuffleJak ha scritto:Cè anche scritto sul link che ti ho mandato. La funzione ds_list_sort() usa il seed integrato di GM.
Quindi ti basta usare:
https://docs.yoyogames.com/source/dadio ... _seed.html
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: Array Shuffler
Grazie delle risposte. Tecnicamente non mi serve per Game Maker, ma in C#.
Ora do un'occhiata al link che ha postato boxbuilder!
[Edit]
Proprio ciò che cercavo, grazie!
Ora do un'occhiata al link che ha postato boxbuilder!
[Edit]
Proprio ciò che cercavo, grazie!
- cp94
- Moderatore
- Messaggi: 2789
- Iscritto il: 04/07/2009, 19:18
- Specialità: ddd
- Località: Brescia
- Contatta:
Re: Array Shuffler
Se è un ArrayList o una List<> è presto fatto:
Codice: Seleziona tutto
// b è il tuo array, in questo caso ArrayList
ArrayList a = new ArrayList();
while (b.Count > 0) {
a.Insert(Random.Range(0, a.Count), b[0]);
b.RemoveAt(0);
}
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: Array Shuffler
Ho scritto male il nome della funzione, mea culpa. Volevo dire ds_list_shuffle();Tizzio ha scritto:Si ma il sort è piu' lento di uno shuffleJak ha scritto:Cè anche scritto sul link che ti ho mandato. La funzione ds_list_sort() usa il seed integrato di GM.
Quindi ti basta usare:
https://docs.yoyogames.com/source/dadio ... _seed.html
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: Array Shuffler
Random.Range? In Visual Studio 2015 con .NET 4.5 non esiste come funzione, comunque opto per l'algoritmo Fisher-Yates
- cp94
- Moderatore
- Messaggi: 2789
- Iscritto il: 04/07/2009, 19:18
- Specialità: ddd
- Località: Brescia
- Contatta:
Re: Array Shuffler
Ah scusa, ragionavo come se fosse Unity
Con un iterazione sei a posto.
Con un iterazione sei a posto.
Codice: Seleziona tutto
while (b.Count > 0) {
a.Insert(Random(a.Count), b[0]);
b.RemoveAt(0);
}
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Chi c’è in linea
Visitano il forum: Google [Bot] e 33 ospiti