---
title: "Use Cases"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Use Cases}
%\VignetteEncoding{UTF-8}
%\VignetteEngine{knitr::rmarkdown}
editor_options:
chunk_output_type: console
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
The following examples demonstrate using `chars` objects inside functions, no
longer needing to spell out `strsplit(x, "")[[1]]` every time.
```{r setup}
library(charcuterie)
```
## Test Membership
Which letters are vowels (aeiou)?
```{r}
vowels <- function(word) {
ch <- chars(word)
setNames(ch %in% chars("aeiou"), ch)
}
vowels("string")
vowels("banana")
```
Since `%in%` is vectorised, it works nicely with a `chars` object
```{r}
banana <- chars("banana")
banana[which(banana %in% chars("aeiou"))]
onomatopoeia <- chars("onomatopoeia")
onomatopoeia[which(onomatopoeia %in% chars("aeiou"))]
```
## Iterate
"Strings" are finally iterable
```{r}
for (x in chars("ABC")) {
print(paste("Appendix", x))
}
```
## Identify Palindromes
Is a word a palindrome (spelled the same forwards and backwards)?
```{r}
palindrome <- function(a, ignore_spaces = FALSE) {
a <- chars(a)
if (ignore_spaces) a <- except(a, " ")
all(rev(a) == a)
}
palindrome("palindrome")
palindrome("racecar")
palindrome("never odd or even", ignore_spaces = TRUE)
palindrome("go hang a salami im a lasagna hog", ignore_spaces = TRUE)
```
## Find Anagrams
Are two words just rearrangements of their letters?
```{r}
anagram <- function(a, b) {
is_anagram <- function(a, b) {
length(a) == length(b) && all(sort(a) == sort(b))
}
sapply(candidates, \(x) is_anagram(chars(a), chars(x)))
}
target <- "stressed"
candidates <- c("started", "desserts", "rested")
anagram(target, candidates)
```
## Spongebob Case
Make every second letter uppercase
```{r}
spongebob <- function(phrase) {
x <- chars(phrase)
odds <- seq(1, length(x), 2)
x[odds] <- toupper(x[odds])
string(x)
}
spongebob("you can't do anything useful with this package")
```
```{r, echo=FALSE}
knitr::include_graphics("spongebob.jpg")
```