Little useless-useful R functions – Finding substrings in number Pi

R-bloggers 2025-11-10

[This article was first published on R – TomazTsql, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

They say that number Pi holds all infinite possibilities, all the words, all the combinations. Well, easier said to be done. So let’s put this to a test.

This is my translational table.

We will do this in the following steps (for the word “eggs”):

  1. Encode the word EGGS to numbers. E = 5, G = 7, G = 7 and S = 19. Together concatenated we get the string of 57719.
  2. We store a veeery long string of PI number.
  3. Start looking in PI number for substring of “57719”.

Well, let’s create a function to do just that

library(Rmpfr)encode_a1z26 <- function(s) {  s_clean <- gsub("[^A-Za-z]", "", toupper(s))  if (nchar(s_clean) == 0) stop("No letters found in input.")  letters_vec <- strsplit(s_clean, "", fixed = TRUE)[[1]]  nums <- match(letters_vec, LETTERS)            paste0(nums, collapse = "")}pi_fraction_digits <- function(n_digits) {  # bits of precison ~ n_digits * log2(10)  precBits <- ceiling(n_digits * log2(10)) + 32L  pi_mpfr <- Const("pi", precBits)                          s <- formatMpfr(pi_mpfr, digits = n_digits + 2L, scientific = FALSE, base = 10L)  s <- gsub("\\.", "", s, fixed = FALSE)  frac <- substr(s, 2L, n_digits + 1L)  if (nchar(frac) < n_digits) {    stop("To low precision; did not get requested number of digits")  }  frac}find_in_pi <- function(pattern, n_digits) {  if (!grepl("^[0-9]+$", pattern)) stop("Pattern must be digits!")  t0 <- proc.time()[["elapsed"]]  frac <- pi_fraction_digits(n_digits)  loc <- regexpr(pattern, frac, fixed = TRUE)  elapsed <- proc.time()[["elapsed"]] - t0    #getting the positions  if (loc[1] != -1) {    start_pos <- as.integer(loc[1])                    end_pos   <- start_pos + nchar(pattern) - 1L    list(found = TRUE,         start = start_pos,         end   = end_pos,         digits_scanned = n_digits,         seconds = elapsed)  } else {    list(found = FALSE,         start = NA_integer_,         end   = NA_integer_,         digits_scanned = n_digits,         seconds = elapsed)  }}find_phrase_in_pi <- function(phrase, n_digits) {  pat <- encode_a1z26(phrase)  res <- find_in_pi(pat, n_digits)  res$pattern <- pat  res$phrase  <- phrase  res}

and finally, to run the function(s):

## Run functionsword <- "eggs"encoded_word <- encode_a1z26(word)cat("Encoded ",word," ->", encoded_word, "\n")  result_today <- find_in_pi(encoded_word, 1e5)print(result_today)

And see that the word “EGGS” as the number 57719, appears on Pi Number on 6026th till 6030th position. Pretty useless 🙂

As always, the complete code is available on GitHub in  Useless_R_function repository. The first version is here (filename: Find_substring_in_Pi.r).

Check the repository for future updates!

Stay healthy and happy R-coding!

To leave a comment for the author, please follow the link and comment on their blog: R – TomazTsql.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Continue reading: Little useless-useful R functions – Finding substrings in number Pi