R-Blogger블로그·해설한국어2024-01-18
Excel 퍼즐을 위한 R 솔루션
Puzzle #359: 숫자들을 연속된 숫자의 합으로 표현하기 드래곤과 같은 경우, 숫자들이 여러 연속된 요소들의 합으로 나타날 수 있습니다. 오늘의 과제는 주어진 숫자에 대해 유효한 연속 수열이 무엇인지 찾는 것입니다. 라이브러리와 데이터 불러오기 library(tidyverse) library(readxl) input = read_excel("Excel/359 Express as Sum of Consecutive Digits.xlsx", range = "A1:A10") test = read_excel("Excel/359 Express as Sum of Consecutive Digits.xlsx", range = "B1:B10") %% mutate(`Answer Expected` = str_remove_all(as.character(`Answer Expected`), "\\s")) 불필요한 공백이 있을 수 있어 모든 공백을 제거하고 이후 코드를 조정했습니다. 함수 정의 find_consecutive_sums = function(x){ # 함수 구현 내용 } Puzzle #360: 알파벳 역순 변환 라이브러리와 데이터를 불러옵니다. 라이브러리와 데이터 불러오기 library(tidyverse) library(readxl) input = read_excel("Excel/360 Reverse alphabets only.xlsx", range = "A1:A13") test = read_excel("Excel/360 Reverse alphabets only.xlsx", range = "B1:B13") 함수 정의 reverse_alpha = function(word) { chars = strsplit(word, "")[[1]] pos = which(chars %in% c(letters, LETTERS)) alphas = chars[pos] rev_alphas = rev(alphas) chars[pos] = rev_alphas processed = paste(chars, collapse = "") return(processed) } 결과 확인 output = input %% mutate(`Answer Expected` = map_chr(Strings, reverse_alpha)) identical(output$`Answer Expected`, test$`Answer Expected`) # [1] TRUE Puzzle #361: 가장 긴 알파벳 및 숫자 시퀀스 찾기 긴 문자열에서 알파벳과 숫자 시퀀스를 찾아 가장 긴 것을 반환합니다. 길이가 같은 시퀀스가 여러 개라면 모두 이어 붙여 반환합니다. 라이브러리와 데이터 불러오기 library(tidyverse) library(readxl) input = read_excel("Excel/361 Longest Sequence of Alphabets and Numbers.xlsx", range ="A1:A10") test = read_excel("Excel/361 Longest Sequence of Alphabets and Numbers.xlsx", range ="B1:C10") 함수 정의 extract_longest_typeseq = function(string, pattern) { seqs = data.frame(string = string) %% mutate(seq = str_extract_all(string, pattern)) %% unnest_longer(seq) %% mutate(str_len = str_length(seq)) %% filter(str_len == max(str_len, na.rm = TRUE)) %% pull(seq) %% paste0(collapse = ", ") if (is.na(seqs) | seqs == "") { return(NA) } else { return(seqs) } } 결과 생성 및 검증 result = input %% mutate(Alphabets = map_chr(String, ~extract_longest_typeseq(.x, "[A-Za-z]+")), Numbers = map_chr(String, ~extract_longest_typeseq(.x, "[0-9]+"))) identical(result$Alphabets, test$Alphabets) # [1] TRUE identical(result$Numbers, test$Numbers) # [1] TRUE Puzzle #362: 숫자 주변 알파벳 대문자화 숫자와 바로 앞뒤에 있는 알파벳을 대문자로 변환합니다. 라이브러리와 데이터 불러오기 library(tidyverse) library(readxl) input = read_excel("Excel/362 Uppercase Conversion Around Numbers.xlsx", range = "A1:A10") test = read_excel("Excel/362 Uppercase Conversion Around Numbers.xlsx", range = "B1:B10") 함수 정의 convert = function(sentence) { pos_foll = str_locate_all(sentence, pattern = "[a-z](?=[0-9])") %% unlist() pos_pre = str_locate_all(sentence, pattern = "(?=[0-9])[a-z]") %% unlist() if(length(pos_foll) 0) sentence[pos_foll] = toupper(sentence[pos_foll]) if(length(pos_pre) 0) sentence[pos_pre] = toupper(sentence[pos_pre]) return(sentence) } 결과 확인 output = input %% mutate(`Answer Expected` = map_chr(Sentences, convert)) identical(output$`Answer Expected`, test$`Answer Expected`) # [1] TRUE
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2024-01-18