Random number generator (device): Difference between revisions
(Switch from draft to complete task) |
|||
Line 2: | Line 2: | ||
If your system has a means to generate random numbers involving not only a software algorithm (like the [[wp:/dev/random|/dev/random]] devices in Unix), show how to obtain a random 32-bit number from that mechanism. |
If your system has a means to generate random numbers involving not only a software algorithm (like the [[wp:/dev/random|/dev/random]] devices in Unix), show how to obtain a random 32-bit number from that mechanism. |
||
=={{header|Forth}}== |
|||
<lang forth>variable rnd |
|||
: randoms ( n -- ) |
|||
s" /dev/random" r/o open-file throw |
|||
swap 0 do |
|||
dup rnd 1 cells rot read-file throw drop |
|||
rnd @ . |
|||
loop |
|||
close-file throw ;</lang> |
|||
=={{header|J}}== |
=={{header|J}}== |
Revision as of 23:10, 1 February 2011
You are encouraged to solve this task according to the task description, using any language you may know.
If your system has a means to generate random numbers involving not only a software algorithm (like the /dev/random devices in Unix), show how to obtain a random 32-bit number from that mechanism.
Forth
<lang forth>variable rnd
- randoms ( n -- )
s" /dev/random" r/o open-file throw swap 0 do dup rnd 1 cells rot read-file throw drop rnd @ . loop close-file throw ;</lang>
J
Untested: <lang j>256#.a.i.1!:11'/dev/urandom';0 4</lang>
Fallback: <lang j>256#.a.i.4{.host'dd if=/dev/urandom bs=4 count=1'</lang>
Note: this assumes that J is running on linux.
PicoLisp
<lang PicoLisp>: (in "/dev/urandom" (rd 4)) -> 2917110327</lang>
PureBasic
PureBasic has the source for the random data is the "/dev/urandom" device on Linux or Mac OSX and the "Microsoft Cryptography API" on Windows. <lang PureBasic>If OpenCryptRandom()
MyRandom = CryptRandom(#MAXLONG) CloseCryptRandom()
EndIf</lang>
Tcl
<lang tcl>package require Tcl 8.5
- Allow override of device name
proc systemRandomInteger Template:Device "/dev/random" {
set f [open $device "rb"] binary scan [read $f 4] "I" x close $f return $x
}</lang> Usage: <lang tcl>% puts [systemRandomInteger] 636131349</lang>