---
title: "Vybíráme pěkné křestní jméno k příjmení"
output: html_notebook
---

```{r}
library(tidyverse)
library(tidyr)
library(magrittr)
```

```{r}
moje_jmena <- read_tsv("moje_jmena.tsv") #vytvorili jsme v souboru strings02.Rmd
```
```{r}
glimpse(moje_jmena)
```

# Na vstupu zadat
v `moje_jmena` jsou křestní jména pro obě pohlaví, s percentilem frekvence v
rámci pohlaví. 

Uživatel dodá příjmení, ke kterému hledá vhodné křestní jméno, 
pohlaví,
rozmezí percentilů frekvence jména.

```{r}
surname <- "Novák"
sex_input <- "boys"
percentile_min <- 45
percentile_max <- 50
```

Ještě tam nemáme žádná další pravidla hezkých kombinací, ale ukážeme si, jak 
vygenerovat nabídku jmen pro Nováka. 

```{r}
moje_jmena %>% filter(sex == sex_input, 
                      between(x = percentile, left = percentile_min, right = percentile_max)) 

#percentile > percentile_min & percentile < percentile_max
```

Přidáme jednoduché pravidlo: křestní jméno se nesmí shodovat s příjmením. První 
v pořadí předchozí tabulky byl Patrick. Zkusíme teď zadat příjmení "Patrick" a 
přidat novou podmínku. Jinak žádný vstup neměníme. 

```{r}
surname <- "Patrick"
sex_input <- "boys"
percentile_min <- 45
percentile_max <- 50

moje_jmena %>% filter(sex == sex_input, 
                      between(percentile, percentile_min, percentile_max), 
                      name != surname) 
```


### Věnceslava Božetěcha Drahokoupilová
Když je dlouhé příjmení, nemělo by být moc dlouhé křestní jméno. Délku řetězce 
aproximujeme počtem samohlásek. Dvojhlásky ignorujeme, tj. počítáme jako dvě 
samohlásky. Ono to tak většinou je i správně: Eduard, Marie... netrefí např. Alois. 
Pravidlo by mohlo být, že příjmení s pěti a více slabikami by se nemělo kombinovat
s křestním jménem o pěti a více slabikách. 

Zkusíme napřed takové najít 
```{r}
surname <- "Anisimová-Nezabučelová"
sex_input <- "girls"
percentile_min <- 0
percentile_max <- 100

moje_jmena %>% filter(sex == sex_input, 
                      between(percentile, percentile_min, percentile_max), 
                      name != surname,
                      (str_count(string = str_to_lower(surname), 
                                pattern = "[aeiouyáéíáóůúý]") > 4 &
                          str_count(string = str_to_lower(name), 
                                    pattern = "[aeiouyáéíáóůúý]") > 4)
                      )

```
To funguje, tak to jenom zakážeme negací podmínky na počet slabik 
(vykřičník před kulatou závorkou). 

```{r}
surname <- "Anisimová-Nezabučelová"
sex_input <- "girls"
percentile_min <- 0
percentile_max <- 100

moje_jmena %>% filter(sex == sex_input, 
                      between(percentile, percentile_min, percentile_max), 
                      name != surname,
                      !(str_count(string = str_to_lower(surname), #tady ten vykřičník!
                                pattern = "[aeiouyáéíáóůúý]") > 4 &
                          str_count(string = str_to_lower(name), 
                                    pattern = "[aeiouyáéíáóůúý]") > 4)
                      )

```

Proč řetězce převádíme na malá písmena? 

Podívat dolů, jak se tvoří funkce, pak se vrátit k tvoření dalších podmínek

### Hynek Cinek
Křestní jméno by se nemělo rýmovat s příjmením. Aproximujeme jako poslední 
dva znaky každého řetězce. Pokud implementujeme tohle, máme tím zároveň vyřešené 
zcela shodné jméno a příjmení! 

```{r}
string <- c("Hynek", "Cinek")
str_sub(string = string ,start = -2, end = -1 )
```

```{r}
surname <- "Cinek"
sex_input <- "boys"
percentile_min <- 0
percentile_max <- 100

moje_jmena %>% filter(sex == sex_input, 
                      between(percentile, percentile_min, percentile_max), 
                      name != surname,
                      !(str_count(string = str_to_lower(surname), #tady ten vykřičník!
                                pattern = "[aeiouyáéíáóůúý]") > 4 &
                          str_count(string = str_to_lower(name),
                                    pattern = "[aeiouyáéíáóůúý]") > 4),
                      !(str_sub(string = str_to_lower(surname), 
                             start = -2, end = -1) ==
                      str_sub(string = str_to_lower(name), 
                             start = -2, end = -1)) 
                      
                      )

```


### Radomír Gruber
Některé hlásky, například "r" se mnoha lidem obtížně vyslovují. Spočítáme "r" 
v křestním jménu a v příjmení, sečtěte je a otestujte, že výsledek je menší 
než váš limit (třeba tři výskyty)


```{r}
surname <- "Rarach"
sex_input <- "boys"
percentile_min <- 0
percentile_max <- 100

moje_jmena %>% filter(sex == sex_input, 
                      between(percentile, percentile_min, percentile_max), 
                      name != surname,
                      !(str_count(string = str_to_lower(surname), #tady ten vykřičník!
                                pattern = "[aeiouyáéíáóůúý]") > 4 &
                          str_count(string = str_to_lower(name),
                                    pattern = "[aeiouyáéíáóůúý]") > 4),
                      !(str_sub(string = str_to_lower(surname), 
                             start = -2, end = -1) ==
                      str_sub(string = str_to_lower(name), 
                             start = -2, end = -1)),
                      !(str_count(string = str_to_lower(name), 
                                pattern = "r") +
                      str_count(string = str_to_lower(surname), 
                                pattern = "r") > 3)
                      )



```


### Tomáš Špičák
Křestní jméno by nemělo končit hláskou, kterou začíná příjmení.
Aproximujme pro začátek jenom písmenem. 

```{r}
surname <- "Novák"
sex_input <- "boys"
percentile_min <- 0
percentile_max <- 100

moje_jmena %>% filter(sex == sex_input, 
                      between(percentile, percentile_min, percentile_max), 
                      name != surname,
                      !(str_count(string = str_to_lower(surname), #tady ten vykřičník!
                                pattern = "[aeiouyáéíáóůúý]") > 4 &
                          str_count(string = str_to_lower(name),
                                    pattern = "[aeiouyáéíáóůúý]") > 4),
                      !(str_sub(string = str_to_lower(surname), 
                             start = -2, end = -1) ==
                      str_sub(string = str_to_lower(name), 
                             start = -2, end = -1)),
                      !(str_count(string = str_to_lower(name), 
                                pattern = "r") +
                      str_count(string = str_to_lower(surname), 
                                pattern = "r") > 3),
                      !(str_sub(string = str_to_lower(name), 
                               start = -1, end = -1) ==
                        str_sub(string = str_to_lower(surname), 
                               start = 1, end = 1) 
                      )
                      )
                    


```

////////////

A teď bychom z toho mohli udělat funkci: 

Předveď automatickou extrakci funkce z Code-Extract Function
```{r}
vyber_jmeno <- function(moje_jmena, sex_input, percentile_min, percentile_max, surname) {
  moje_jmena %>% filter(sex == sex_input, 
                        between(percentile, percentile_min, percentile_max), 
                        name != surname,
                        !(str_count(string = str_to_lower(surname), #tady ten vykřičník!
                                  pattern = "[aeiouyáéíáóůúý]") > 4 &
                            str_count(string = str_to_lower(name),
                                      pattern = "[aeiouyáéíáóůúý]") > 4),
                        !(str_sub(string = str_to_lower(surname), 
                               start = -2, end = -1) ==
                        str_sub(string = str_to_lower(name), 
                               start = -2, end = -1)),
                        !(str_count(string = str_to_lower(name), 
                                  pattern = "r") +
                        str_count(string = str_to_lower(surname), 
                                  pattern = "r") > 3),
                        !(str_sub(string = str_to_lower(name), 
                                 start = -1, end = -1) ==
                          str_sub(string = str_to_lower(surname), 
                                 start = 1, end = 1) 
                        )
                        )
}
                    


```





```{r}
vyber_jmeno(moje_jmena = read_tsv("moje_jmena.tsv"), sex_input = "boys", percentile_min = 60, percentile_max = 100, surname = "Měsíček"
            )
```



Musí se to malinko editovat...
```{r}
vyber_jmeno <- function(moje_jmena = read_tsv("moje_jmena.tsv"), sex_input = c("girls", "boys"), percentile_min = 0, percentile_max = 100, surname)
  {sex_input <- match.arg(sex_input, choices = c("girls", "boys"))
  moje_jmena %>% filter(sex == sex_input, 
                        between(percentile, percentile_min, percentile_max), 
                        name != surname,
                        !(str_count(string = str_to_lower(surname), #tady ten vykřičník!
                                  pattern = "[aeiouyáéíáóůúý]") > 4 &
                            str_count(string = str_to_lower(name), 
                                      pattern = "[aeiouyáéíáóůúý]") > 4)
                        )
}
```

```{r}
vyber_jmeno(sex_input = "male",
                                  percentile_min = 80,
                                  percentile_max = 100,
                                  surname = "Černá"
                                  )
```


```{r}
vyber_jmeno(sex_input = "girls", surname = "Černá")
```



