Function

# Function to assign teams
assign_teams <- function(names, team_size) {
  # Shuffle the names
  shuffled_names <- sample(names)
  
  # Calculate the number of full teams
  num_full_teams <- floor(length(names) / team_size)
  
  # Create full teams
  teams <- split(shuffled_names[1:(num_full_teams * team_size)], 
                 rep(1:num_full_teams, each = team_size))
  
  # Add any remaining members to the last team
  if (length(names) %% team_size != 0) {
    teams[[length(teams) + 1]] <- shuffled_names[(num_full_teams * team_size + 1):length(names)]
  }
  
  return(teams)
}

# Main function
main <- function() {
  # Manually assign names here
  names <- c("Nathan", "Yasmine", "Camille", "Iran", "Aryaman", "Jasmine", "Catie", "Andrew", "Emily")
  
  # Uncomment the following line if you want to input names manually at runtime
  # names <- unlist(strsplit(readline("Enter names separated by commas: "), ","))
  
  # Remove any leading or trailing whitespace from names
  names <- trimws(names)
  
  # Get team size from user
  team_size <- as.integer(readline("Enter the desired team size: "))
  
  # Assign teams
  teams <- assign_teams(names, team_size)
  
  # Report results
  cat("\nTeam Assignments:\n")
  for (i in 1:length(teams)) {
    cat(sprintf("Team %d: %s\n", i, paste(teams[[i]], collapse = ", ")))
  }
}

# Run the main function
main()
3

Team Assignments:
Team 1: Nathan, Yasmine, Camille
Team 2: Jasmine, Andrew, Emily
Team 3: Catie, Iran, Aryaman
LS0tCnRpdGxlOiAiVGVhbSBnZW5lcmF0b3IiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkZ1bmN0aW9uCmBgYHtyfQojIEZ1bmN0aW9uIHRvIGFzc2lnbiB0ZWFtcwphc3NpZ25fdGVhbXMgPC0gZnVuY3Rpb24obmFtZXMsIHRlYW1fc2l6ZSkgewogICMgU2h1ZmZsZSB0aGUgbmFtZXMKICBzaHVmZmxlZF9uYW1lcyA8LSBzYW1wbGUobmFtZXMpCiAgCiAgIyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBmdWxsIHRlYW1zCiAgbnVtX2Z1bGxfdGVhbXMgPC0gZmxvb3IobGVuZ3RoKG5hbWVzKSAvIHRlYW1fc2l6ZSkKICAKICAjIENyZWF0ZSBmdWxsIHRlYW1zCiAgdGVhbXMgPC0gc3BsaXQoc2h1ZmZsZWRfbmFtZXNbMToobnVtX2Z1bGxfdGVhbXMgKiB0ZWFtX3NpemUpXSwgCiAgICAgICAgICAgICAgICAgcmVwKDE6bnVtX2Z1bGxfdGVhbXMsIGVhY2ggPSB0ZWFtX3NpemUpKQogIAogICMgQWRkIGFueSByZW1haW5pbmcgbWVtYmVycyB0byB0aGUgbGFzdCB0ZWFtCiAgaWYgKGxlbmd0aChuYW1lcykgJSUgdGVhbV9zaXplICE9IDApIHsKICAgIHRlYW1zW1tsZW5ndGgodGVhbXMpICsgMV1dIDwtIHNodWZmbGVkX25hbWVzWyhudW1fZnVsbF90ZWFtcyAqIHRlYW1fc2l6ZSArIDEpOmxlbmd0aChuYW1lcyldCiAgfQogIAogIHJldHVybih0ZWFtcykKfQoKIyBNYWluIGZ1bmN0aW9uCm1haW4gPC0gZnVuY3Rpb24oKSB7CiAgIyBNYW51YWxseSBhc3NpZ24gbmFtZXMgaGVyZQogIG5hbWVzIDwtIGMoIk5hdGhhbiIsICJZYXNtaW5lIiwgIkNhbWlsbGUiLCAiSXJhbiIsICJBcnlhbWFuIiwgIkphc21pbmUiLCAiQ2F0aWUiLCAiQW5kcmV3IiwgIkVtaWx5IikKICAKICAjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gaW5wdXQgbmFtZXMgbWFudWFsbHkgYXQgcnVudGltZQogICMgbmFtZXMgPC0gdW5saXN0KHN0cnNwbGl0KHJlYWRsaW5lKCJFbnRlciBuYW1lcyBzZXBhcmF0ZWQgYnkgY29tbWFzOiAiKSwgIiwiKSkKICAKICAjIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbmFtZXMKICBuYW1lcyA8LSB0cmltd3MobmFtZXMpCiAgCiAgIyBHZXQgdGVhbSBzaXplIGZyb20gdXNlcgogIHRlYW1fc2l6ZSA8LSBhcy5pbnRlZ2VyKHJlYWRsaW5lKCJFbnRlciB0aGUgZGVzaXJlZCB0ZWFtIHNpemU6ICIpKQogIAogICMgQXNzaWduIHRlYW1zCiAgdGVhbXMgPC0gYXNzaWduX3RlYW1zKG5hbWVzLCB0ZWFtX3NpemUpCiAgCiAgIyBSZXBvcnQgcmVzdWx0cwogIGNhdCgiXG5UZWFtIEFzc2lnbm1lbnRzOlxuIikKICBmb3IgKGkgaW4gMTpsZW5ndGgodGVhbXMpKSB7CiAgICBjYXQoc3ByaW50ZigiVGVhbSAlZDogJXNcbiIsIGksIHBhc3RlKHRlYW1zW1tpXV0sIGNvbGxhcHNlID0gIiwgIikpKQogIH0KfQoKIyBSdW4gdGhlIG1haW4gZnVuY3Rpb24KbWFpbigpCmBgYAoK