Use source("filename.r") to run this.
#utility functions readinteger <- function() { n <- readline(prompt="Enter an integer: ") if(!grepl("^[0-9]+$",n)) { return(readinteger()) } return(as.integer(n)) } # real program start here num <- round(runif(1) * 100, digits = 0) guess <- -1 cat("Guess a number between 0 and 100.\n") while(guess != num) { guess <- readinteger() if (guess == num) { cat("Congratulations,", num, "is right.\n") } else if (guess < num) { cat("It's bigger!\n") } else if(guess > num) { cat("It's smaller!\n") } }
> source("random-number-game.r") Guess a number between 0 and 100. Enter an integer: 50 It's smaller! Enter an integer: 20 It's bigger! Enter an integer: 40 It's bigger! Enter an integer: 45 It's smaller! Enter an integer: 43 It's bigger! Enter an integer: 44 Congratulations, 44 is right.
The readinteger function has been explained in a previous example.
Rounding
The round function rounds the first argument to the specified number of digits.
> round(22.5,0) # rounds to even number [1] 22 > round(3.14,1) [1] 3.1
Getting a random number
runif generates random numbers between 0 and 1.
The first argument specifies how many numbers you want.
runif(2)
[1] 0.8379240 0.1773677
The "unif" part of the function indicates that the numbers are uniformly distributed:
This isn't completely uniform at the sides because of our use of round. A round to 0 only happens between 0 and 0.5 because we don't have negative numbers.
A non-uniform normal distribution would look like this:
Learn how to make these graphs here.