90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | ## What's pseudorandom number generation?
 | ||
|  | 1. Numbers appear to be randomly generated but in reality they are not *CORRECT* | ||
|  | 2. Generating random numbers according to the physical laws | ||
|  | 3. Generating pseudo even and odd numbers | ||
|  | 
 | ||
|  | > **1:** Computers are deterministic machines. They can't generate truly random numbers (unlike actual physical processes).
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What's a seed number?
 | ||
|  | 1. Exchanging of random numbers between two computers | ||
|  | 2. It's used to getting a random number between 0 and the seed number | ||
|  | 3. It's used initialize a pseduorandom number generator *CORRECT* | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Which package is used to generate pseudorandom numbers in Go?
 | ||
|  | 1. pseudorand | ||
|  | 2. rand *CORRECT* | ||
|  | 3. random | ||
|  | 4. randomizer | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What does [0, 5) mean?
 | ||
|  | 1. A range of numbers between 0 and 5 (excluding 5) *CORRECT* | ||
|  | 2. A range of numbers between 0 and 5 (including 5) | ||
|  | 3. Just 0 and 5 | ||
|  | 4. Just 0 and 4 | ||
|  | 
 | ||
|  | > **1:** Right. The square-brace means: "inclusion". The parenthesis means: "exclusion". So, [0, 5] means: 0, 1, 2, 3, 4. It's called the "mathematical interval notation".
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Why this function call would not work?
 | ||
|  | ```go | ||
|  | rand.Intn(0) | ||
|  | ``` | ||
|  | 1. First you should seed it | ||
|  | 2. It expects two arguments | ||
|  | 3. Intn works within a range of [0, 0). So, it doesn't make sense to include 0 and not include 0 at the same time. *CORRECT* | ||
|  | 
 | ||
|  | > **1:** That's not the cause of this error. You don't always have to seed it.
 | ||
|  | > **2:** No, it does not.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What does this program print?
 | ||
|  | Note that, each seed number below returns pseudorandom numbers as these: | ||
|  | 
 | ||
|  | ``` | ||
|  | Seed: 0 | ||
|  |   3 3 6 8 4 1 9 3 6 6 | ||
|  | 
 | ||
|  | Seed: 1 | ||
|  |   1 1 9 3 2 4 7 6 6 6 | ||
|  | 
 | ||
|  | Seed: 2 | ||
|  |   10 1 2 2 0 6 4 1 0 5 | ||
|  | ``` | ||
|  | 
 | ||
|  | Here's the program: | ||
|  | 
 | ||
|  | ```go | ||
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"math/rand" | ||
|  | ) | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	for i := 0; i < 3; i++ { | ||
|  | 		rand.Seed(int64(i)) | ||
|  | 		fmt.Print(rand.Intn(11), " ") | ||
|  | 		fmt.Print(rand.Intn(11), " ") | ||
|  | 	} | ||
|  | } | ||
|  | ``` | ||
|  | 1. 3 1 10 3 1 1 | ||
|  | 2. 3 6 1 6 10 5 | ||
|  | 3. 1 10 1 1 3 3 | ||
|  | 4.  3 3 1 1 10 1 *CORRECT* | ||
|  | 
 | ||
|  | > **4:** The numbers are determined depending on the seed number. So, this loop, seeds the pseudorandom generator with 0, 1, and 2 respectively.
 | ||
|  | >  | ||
|  | > And, after each seed, it calls Intn twice to generate two random numbers.
 | ||
|  | >  | ||
|  | > So, if you look at the result, 3 3 is the first two numbers of Seed: 0. 1 1 for Seed: 1. And, 10 1 for Seed: 2.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What you should do if you want the pseudorandom generator to produce random numbers each time you run your program?
 | ||
|  | 1. You need to seed it like this: rand.Seed(rand.Random) | ||
|  | 2. You need to seed it like this: rand.Seed(time.Now().UnixNano()) *CORRECT* | ||
|  | 3. You need to seed it like this: rand.Seed(time.Now()) |