durch3-durch5

R
challenge
string
Published

June 27, 2023

Aufgabe

Gegeben sei ein Vektor x:

x <- 1:50

Schreiben Sie R-Code, der “durch3” ausgibt, wenn x durch 3 teilbar ist und (auch) “durch5” ausgibt, wenn x durch5 teilbar ist.

Hinweise:











Lösung

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.3     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
d <-
  tibble(
    x = 1:50,
    txt = ""
  ) %>% 
  mutate(txt = case_when(
    (x %% 3) == 0 ~ str_c(txt, "_durch_3"),
    TRUE ~ txt)
  ) %>% 
  mutate(txt = case_when(
    (x %% 5) == 0 ~ str_c(txt, "_durch_5"),
    TRUE ~ txt
  ))

So sieht die Tabelle aus:

d
# A tibble: 50 × 2
       x txt       
   <int> <chr>     
 1     1 ""        
 2     2 ""        
 3     3 "_durch_3"
 4     4 ""        
 5     5 "_durch_5"
 6     6 "_durch_3"
 7     7 ""        
 8     8 ""        
 9     9 "_durch_3"
10    10 "_durch_5"
# ℹ 40 more rows

So kann man sich dann den Text ausgeben lassen:

d$txt
 [1] ""                 ""                 "_durch_3"         ""                
 [5] "_durch_5"         "_durch_3"         ""                 ""                
 [9] "_durch_3"         "_durch_5"         ""                 "_durch_3"        
[13] ""                 ""                 "_durch_3_durch_5" ""                
[17] ""                 "_durch_3"         ""                 "_durch_5"        
[21] "_durch_3"         ""                 ""                 "_durch_3"        
[25] "_durch_5"         ""                 "_durch_3"         ""                
[29] ""                 "_durch_3_durch_5" ""                 ""                
[33] "_durch_3"         ""                 "_durch_5"         "_durch_3"        
[37] ""                 ""                 "_durch_3"         "_durch_5"        
[41] ""                 "_durch_3"         ""                 ""                
[45] "_durch_3_durch_5" ""                 ""                 "_durch_3"        
[49] ""                 "_durch_5"        

Oder so:

d$txt %>% discard(\(x) x == "")
 [1] "_durch_3"         "_durch_5"         "_durch_3"         "_durch_3"        
 [5] "_durch_5"         "_durch_3"         "_durch_3_durch_5" "_durch_3"        
 [9] "_durch_5"         "_durch_3"         "_durch_3"         "_durch_5"        
[13] "_durch_3"         "_durch_3_durch_5" "_durch_3"         "_durch_5"        
[17] "_durch_3"         "_durch_3"         "_durch_5"         "_durch_3"        
[21] "_durch_3_durch_5" "_durch_3"         "_durch_5"        

Categories:

  • r
  • challenge
  • string