A educação atual na escola é cada vez mais reduzida. E na parte restante, a ênfase é cada vez mais colocada no efeito externo. "Trabalho de projeto", apresentações, efeitos de uau, etc. enfeites. Além disso, muitas vezes não é claro para quem esses exercícios são distribuídos - para a criança ou os pais? A conseqüência de tudo isso é a necessidade de aulas adicionais em vários círculos, dentro da escola ou, alternativamente, se houver um objetivo de dar à criança uma educação completa.
No caso da matemática ou da física, você pode tentar pegar dois coelhos com uma cajadada (bem, ou uma lebre e uma lebre). Combine a solução de problemas do ext. aulas (o currículo escolar não é adequado para isso) com a educação paralela de uma cultura de trabalho com dados e treinamento em abordagens algorítmicas. Não se trata de bots de bate-papo em três linhas, mas do uso de um computador como parte do objetivo original - realizar cálculos, realizar experimentos numéricos, modelar e revelar dependências ocultas, com base nas quais novas hipóteses podem ser construídas.
Observo imediatamente que nem todos estarão interessados no tópico. Para quem é irrelevante - passe . Quem terá extra. idéias, seria interessante se familiarizar também. A seguir, uma série de problemas que foram emprestados dos cursos " Metashkola ", matemática, 3ª série. Naturalmente, a princípio o problema é resolvido pelo raciocínio lógico, então um método de solução usando um computador é discutido.
Adições importantes da discussão abaixo:
- O material é escrito da perspectiva de um pai, não de um professor. Não há serviços e relações públicas. Aqui está apenas um conjunto de considerações práticas.
- R foi usado como uma ferramenta porque era mais conveniente.
É uma continuação de publicações anteriores .
Preâmbulo geral
library(tidyverse) library(glue) library(magrittr) library(lubridate) library(hms) library(numbers) library(polynom) library(Ryacas) library(stringi) library(tictoc)
A seguir, é apresentada uma série de tarefas que podem ser estendidas até o infinito.
Restaurar registro
Desafio
Restaure o registro: 3∗∗:∗3=3∗
. Encontre a soma de todos os números ausentes.
Exemplo de solução # 3ab = c3*3d df <- 0:9 %>% {tidyr::crossing(a = ., b = ., c = ., d = .)} %>% filter(300 + a * 10 + b == (c * 10 + 3) * (30 + d)) df
Desafio
É possível colocar os sinais de operações aritméticas em vez de “∗”
no registro 7∗(7∗7∗7)∗7
para obter 8?
Exemplo de solução ops <- c('*', '/', '+', '-') # df <- tidyr::crossing(op1 = ops, op2 = ops, op3 = ops, op4 = ops) %>% # mutate(data = glue::glue("7 {op1} (7 {op2} 7 {op3} 7) {op4} 7"), expr = rlang::parse_exprs(data)) %>% mutate(res = purrr::map_dbl(expr, rlang::eval_bare)) %>% arrange(res) %>% filter(res == 8) print(tbl_df(df), n = 20)
Desafio
Todos os números de 1 a 100 são gravados.Quantas vezes o número 4 aparece no registro?
Exemplo de solução # 100 4, 99 # tidyr::crossing(d1 = 0:9, d2 = 0:9) %>% # , 4 filter(d1 == 4 | d2 == 4) %>% arrange(d1, d2)
Desafio
O número 9, com o qual o número de três dígitos começou, foi movido para o final do número. O resultado é um número que é 216 menos. Qual é a soma dos dígitos do número original.
Exemplo de solução # : abc df <- tidyr::crossing(b = 0:9, c = 0:9) %>% # 9 mutate(delta = (900 + 10*b + c) - (100*b + 10*c + 9)) %>% filter(between(delta, 200, 230)) df
Desafio
O produto de 5 números naturais consecutivos é 2520. Qual é o número menor?
Exemplo de solução Método 1 numbers::primeFactors(2520)
Exemplo de solução Método 2 # https://joftius.wordpress.com/2015/10/19/finding-multiple-roots-of-univariate-functions-in-r/ f <- function(x) {x * (x+1) * (x+2) * (x+3) * (x+4) - 2520} rootSolve::uniroot.all(f, c(0, 2520))
Exemplo de solução, método 3 eq <- "x * (x+1) * (x+2) * (x+3) * (x+4) - 2520" yacas(glue("Simplify({eq})")) # rts <- base::polyroot(c(-2520, 24, 50, 35, 10, 1)) # n-1 # # http://www.johnmyleswhite.com/notebook/2009/12/18/using-complex-numbers-in-r/ Re(rts[abs(Im(rts)) < 1^-10])
Desafio
Qual número pode ser substituído por "∗"
para que o número 543∗
divisível por 4
? Quais são todas as opções?
Exemplo de solução tibble(num = 5430 + 0:9, mod = mod(num, 4)) %>% arrange(mod, num)
Desafio
O que é o dobro do terceiro trimestre do número 60?
Exemplo de solução 2*(1/3*(1/4*60)) 60 %>% {./4} %>% {./3} %>% {.*2}
Desafio
Divida o mostrador do relógio sem ponteiros em 2 partes, para que a soma dos números disponíveis em cada seção seja a mesma.
Adicionar. a questão é: quantas partes o relógio pode ser dividido ainda mais para que em cada parte haja números cuja soma seja igual uma à outra?
Exemplo de solução # 2 , # , = sum(1:12) / 2 # for (i in 1:12){ res <- cumsum(i:12) print(glue(" : {i}, : {glue_collapse(res, ', ')}")) val <- which(res == 39) if(! identical(val, integer(0))){ print(glue(" [{i}; {val + i - 1}]")) } }
“Touros e vacas”
Variação 1
No número do registro, vários dígitos de 1 a 5 inclusive.
O número de números adivinhados em seus lugares é o número de touros. O número de números adivinhados que estão fora do lugar é o número de vacas.
O que é um número de três dígitos, se você souber:
- 314 - 1 touro e 1 vaca;
- 124 - 1 touro e 1 vaca;
- 523 - 1 touro e 1 vaca.
Exemplo de solução library(tidyverse) library(stringi) # "an_bn_cn". c -- df <- c(1, 2, 3, 4, 5) %>% {tidyr::crossing(an = ., bn = ., cn = .)} %>% # mutate(comb = purrr::pmap(., c)) %>% # mutate(val = stri_join(an, bn, cn)) %>% # # 314 - 1 filter(stri_detect_regex(val, "3[^1][^4]|[^3]1[^4]|[^3][^1]4")) %>% # 124 - 1 filter(stri_detect_regex(val, "1[^2][^4]|[^1]2[^4]|[^1][^2]4")) %>% # 523 - 1 filter(stri_detect_regex(val, "5[^2][^3]|[^5]2[^3]|[^5][^2]3")) %>% # filter(purrr::map_int(comb, n_distinct) == 3) %>% # (1 1 ) filter(purrr::map(comb, ~length(base::intersect(.x, c(3, 1, 4)))) == 2) %>% filter(purrr::map(comb, ~length(base::intersect(.x, c(1, 2, 4)))) == 2) %>% filter(purrr::map(comb, ~length(base::intersect(.x, c(5, 2, 3)))) == 2) df
Variação 2
No número do registro, vários dígitos de 1 a 5 inclusive.
O número de números adivinhados em seus lugares é o número de touros.
O número de números adivinhados que estão fora do lugar é o número de vacas.
O que é um número de três dígitos, se você souber:
543 - 1 touro; 0 vacas;
235 - 1 touro; 0 vacas.
Exemplo de solução library(tidyverse) library(stringi) df <- c(1, 2, 3, 4, 5) %>% tidyr::crossing(d3 = ., d2 = ., d1 = .) %>% # mutate(comb = purrr::pmap(., c)) %>% # mutate(val = stri_join(d3, d2, d1)) %>% # # 543 -- 1 ; 0 filter(stri_detect_regex(val, "5..|.4.|..3")) %>% # 235 -- 1 ; 0 filter(stri_detect_regex(val, "2..|.3.|..5")) %>% # filter(purrr::map_int(comb, n_distinct) == 3) %>% # filter(purrr::map(comb, ~length(base::intersect(.x, c(5, 4, 3)))) == 1) %>% filter(purrr::map(comb, ~length(base::intersect(.x, c(2, 3, 5)))) == 1) df
Preencha o quadrado
É possível organizar dez menos nas células de uma tabela quadrada 4 por 4 para que cada coluna tenha um número ímpar de menos e cada linha tenha um número par de menos?
Exemplo de solução, opção 1 # , 10. : 3, 3, 3, 1 library(arrangements) library(foreach) # : # 1 2 3 4 # 5 6 7 8 # 9 10 11 12 # 13 14 15 16 cmb <- arrangements::combinations(1:16, k = 10, replace = FALSE) pryr::object_size(cmb) # , , . icomb <- icombinations(1:16, k = 10, replace = FALSE) foreach(x = icomb, .combine=c) %do% { # x - , "" # # isOdd <- function(x, set){ # length(base::intersect(x, set)) %% 2 == 1 } isEven <- function(x, set){ # length(base::intersect(x, set)) %% 2 == 0 } col_flag <- all( isOdd(x, c(1, 5, 9, 13)), isOdd(x, c(2, 6, 10, 14)), isOdd(x, c(3, 7, 11, 15)), isOdd(x, c(4, 8, 12, 16)) ) row_flag <- all( isEven(x, c(1, 2, 3, 4)), isEven(x, c(5, 6, 7, 8)), isEven(x, c(9, 10, 11, 12)), isEven(x, c(13, 14, 15, 16)) ) if(col_flag && row_flag) print(x) }
Exemplo de solução, opção 2 # , 10. : 3, 3, 3, 1 library(tidyverse) library(magrittr) library(arrangements) library(foreach) # : # 1 2 3 4 # 5 6 7 8 # 9 10 11 12 # 13 14 15 16 # , , . icomb <- icombinations(1:16, k = 10, replace = FALSE) df <- foreach(x = icomb, .combine = rbind) %do% { # x - , "" # # v <- rep(0, 16) # , # browser() v[x] <- 1 m <- matrix(v, nrow = 4, ncol = 4, byrow = TRUE) # : , # if (all(colSums(m) %% 2 == 1) && all(rowSums(m) %% 2 == 0)) x else NULL } df %<>% as_tibble(.name_repair = "minimal") # v <- rep(0, 16) # , v[purrr::flatten_int(df[5, ])] <- 1 matrix(v, nrow = 4, ncol = 4, byrow = TRUE)
Combinatória
Desafio
Quantas combinações diferentes de letras nas quais duas letras idênticas não ficam próximas uma da outra podem ser feitas reorganizando as letras K, A, W e A?
Veja as várias considerações: Gerando todas as permutações distintas de uma lista em R
Exemplo de solução # # https://stackoverflow.com/questions/44918645/split-a-string-into-character-efficiently lset <- unlist(base::strsplit("", split = "", fixed = TRUE)) # , lset <- c("", "1", "", "2") # library(permutations) df <- tidyr::crossing(p1 = lset, p2 = lset, p3 = lset, p4 = lset) ff <- function(...){ vals <- rlang::list2(...) # browser() n_distinct(unlist(vals)) } df %>% # mutate(u = purrr::pmap_int(., ~n_distinct(.x))) mutate(u = purrr::pmap_int(., ff)) %>% filter(u == 4) %>% select(-u) %>% # mutate(s = purrr::pmap_chr(., stri_join)) %>% mutate_at(vars(s), stri_replace_all_regex, pattern = "(\\d+)", replacement = "") %>% distinct(s) %>% # filter(!stri_detect_fixed(s, ""))
Desafio
Quantos domingos podem haver em um ano? Qual é o maior número possível?
Exemplo de solução # , 366 %/% 7 # . 366 %% 7
A tarefa dos piratas
Piratas: A, B, C
Dizendo 1
A: B tem 2 olhos
B: C tem 2 olhos
C: A tem 2 olhos
Dizendo 2
A: Todos nós temos 2 olhos
B: Todos nós temos 3 olhos
C: Todos nós temos 4 olhos
Cada pirata mentiu tantas vezes quanto seus olhos. Quantos olhos tem cada pirata?
Exemplo de solução df <- tidyr::crossing(a = 0:2, b = 0:2, c = 0:2) %>% mutate(total = a + b + c) %>% mutate(a_lie = (b != 2) + (total != 2), b_lie = (c != 2) + (total != 3), c_lie = (a != 2) + (total != 4)) %>% filter(a_lie == a, b_lie == b, c_lie == c) df
Etc. etc.
Para alguns, pode ser uma ocasião para passar um tempo com seu filho.
Post anterior - “Algumas considerações para computação paralela no R para tarefas“ corporativas ”” .