library(tidyverse)

raw_text <- "
1 | GARY HUA | ON | 6.0 | R: 1794 ->1817 | 39 21 18 14 7 12 4
2 | DAKSHESH DARURI | MI | 6.0 | R: 1553 ->1663 | 63 58 4 17 16 20 7
3 | ADITYA BAJAJ | MI | 6.0 | R: 1384 ->1640 | 8 61 25 21 11 13 12
4 | PATRICK H SCHILLING | MI | 5.5 | R: 1716 ->1744 | 23 28 2 26 5 19 1
5 | HANSHI ZUO | MI | 5.5 | R: 1655 ->1690 | 45 37 12 13 4 14 17
"

chess_df <- raw_text %>%
  str_split("\n") %>%
  unlist() %>%
  str_trim() %>%
  .[. != ""] %>%
  tibble(line = .) %>%
  separate(
    line,
    into = c("pair", "player_name", "state", "points", "rating", "opponents"),
    sep = "\\|",
    fill = "right"
  ) %>%
  mutate(
    player_name = str_trim(player_name),
    state = str_trim(state),
    points = as.numeric(str_trim(points)),
    pre_rating = as.numeric(str_extract(rating, "\\d{3,4}"))
  ) %>%
  select(player_name, state, points, pre_rating, opponents)

avg_opponent_rating <- chess_df$pre_rating

chess_df <- chess_df %>%
  mutate(
    avg_opp_rating = mean(avg_opponent_rating, na.rm = TRUE)
  )

final_df <- chess_df %>%
  select(
    Player = player_name,
    State = state,
    Total_Points = points,
    Pre_Rating = pre_rating,
    Avg_Opponent_Rating = avg_opp_rating
  )

final_df
## # A tibble: 5 × 5
##   Player              State Total_Points Pre_Rating Avg_Opponent_Rating
##   <chr>               <chr>        <dbl>      <dbl>               <dbl>
## 1 GARY HUA            ON             6         1794               1620.
## 2 DAKSHESH DARURI     MI             6         1553               1620.
## 3 ADITYA BAJAJ        MI             6         1384               1620.
## 4 PATRICK H SCHILLING MI             5.5       1716               1620.
## 5 HANSHI ZUO          MI             5.5       1655               1620.
write.csv(final_df, "chess_tournament_results.csv", row.names = FALSE)