Bash nyelven szeretnék egy listát úgy rendezni véletlenszerűen, mint ahogyan a sort --random-sort
csinálja, viszont szeretném explicit módon megmondani neki, hogy a /dev/urandom (később saját device) legyen a randomizáció alapja. Létezik erre függvénykönyvtár? Ha nem, hogyan oldhatom meg? Más nyelv egyelőre nem játszik.
- 2237 megtekintés
Hozzászólások
$ dd if=/dev/urandom bs=1 count=1 2>/dev/null | xxd -p
6a
- A hozzászóláshoz be kell jelentkezni
A sort az teljesen ki van zárva?
Ez nem jó esetleg?:
echo -e '2\n1\n3\n5\n4' | sort -R --random-source=/dev/urandom
(http://stackoverflow.com/questions/537191/the-sort-r-command-doesnt-sor…)
Ha nem jó a sort parancs, akkor én vagy googliznék ilyen random sort algoritmusok után, vagy megnézném,
hogy maga a sort hogyan csinálja (forrás) és megpróbálnám bash-ben implementálni (jó étvágyat :))
De biztos van jobb megoldás.
Szerk.
- A hozzászóláshoz be kell jelentkezni
ez most tarkólövésként ért. nekem tökéletes a sort is, de álmomban sem gondoltam volna, hogy meg lehet neki adni a véletlenforrást (nyilván man-t nem nézek, minek az...). gyakorlatilag ez a lehető legegyszerűbb megoldás, gyorsan meg is írom. :)
- A hozzászóláshoz be kell jelentkezni
No para. man-t én is csak utólag olvastam, először googliztam. :)
- A hozzászóláshoz be kell jelentkezni
Szerintem nem nagyon fogsz tudni beleszólni, mármint akkor, ha a shell-be beépített véletlenszámgenerátort használod. Erről összesen ennyit lehet tudni:
RANDOM Each time this parameter is referenced, a random integer between
0 and 32767 is generated. The sequence of random numbers may be
initialized by assigning a value to RANDOM. If RANDOM is unset,
it loses its special properties, even if it is subsequently
reset.
Ha ezt hanyagolod, akkor meg mi akadályoz meg abban, hogy read-del az urandomból olvass? Pl:
read -N 1 char < /dev/urandom
- A hozzászóláshoz be kell jelentkezni
read -N 1 char < /dev/urandom
Valami ilyesmit használtam erre régen:
cat /dev/urandom|od -N4 -An -i
(Forrás: http://forum.codecall.net/bash-shell-scripting/17742-bash-random-number…)
- A hozzászóláshoz be kell jelentkezni
a read
használatával van egy kis bajom, de lehet, hogy könnyen megoldható, csak nem látom a fától a vadőrt. a rendezésemet úgy oldanám meg, hogy minden sorhoz generálok valamekkora random adatot az urandomból, aztán ennek a random adatnak kiszámolom a sha512 (vagy akármelyik) sumját. ezután a sumok szerint rendezek. nade mi van akkor, ha az urandomból két ugyanolyan chunkot kapok? minden új chunkot össze kell hasonlítanom az előzőekkel, nehogy ugyanaz kétszer előjöjjön. aztán mi van, ha két különböző chunk hashsumja ugyanaz? kicsi a valószínűsége, de nullánál nagyobb. ezt is ellenőriznem kell. ha nem menet közben akarok ellenőrizni, akkor mondjuk legenerálok kellő számú chunkot, azokat névsorba rendezem, majd egyformákat keresek köztük.
csak intuitív módon tudom mondani, de ezek az ellenőrzések nagyon nagy lassító tényezőnek tűnnek nekem. aki tud programozni, az megírja a sortot, és felhasználom, de nem akarok saját magamnak lassú és nem verifikált kódot gányolni.
- A hozzászóláshoz be kell jelentkezni