Anak-anak, Matematika, dan R

Pendidikan saat ini di sekolah semakin berkurang. Dan di bagian yang tersisa, penekanannya semakin ditempatkan pada efek eksternal. "Pekerjaan proyek", presentasi, efek wow, dll. Perada. Selain itu, seringkali tidak jelas kepada siapa latihan ini dibagikan - kepada anak atau orang tua? Konsekuensi dari semua ini adalah perlunya kelas tambahan di berbagai kalangan, di sekolah atau sebagai alternatif, jika ada tujuan untuk memberikan anak pendidikan penuh.


Dalam kasus matematika atau fisika, Anda dapat mencoba menangkap dua burung dengan satu batu (baik, atau kelinci dan kelinci). Kombinasikan solusi masalah dari ext. kelas (kurikulum sekolah tidak cocok untuk ini) dengan pendidikan paralel budaya bekerja dengan data dan pelatihan dalam pendekatan algoritmik. Kami tidak berbicara tentang bot obrolan dalam tiga baris, tetapi tentang menggunakan komputer sebagai bagian dari perhitungan kinerja - tujuan awal, melakukan percobaan numerik, memodelkan dan mengungkapkan dependensi tersembunyi, atas dasar di mana hipotesis baru dapat dibangun.


Saya segera mencatat bahwa tidak semua orang akan tertarik dengan topik ini. Kepada siapa itu tidak relevan - lewat . Siapa yang akan mendapat tambahan. ide, akan menarik untuk berkenalan juga. Berikutnya akan menjadi serangkaian masalah yang dipinjam dari kursus " Metashkola ", matematika, kelas 3. Secara alami, pada awalnya masalah diselesaikan dengan penalaran logis, kemudian metode solusi menggunakan komputer dibahas.


Tambahan penting dari diskusi di bawah ini:


  1. Bahannya ditulis dari sudut pandang orang tua, bukan guru. Tidak ada layanan dan PR. Berikut ini hanya seperangkat pertimbangan praktis.
  2. R digunakan sebagai alat karena lebih nyaman.

Ini adalah kelanjutan dari publikasi sebelumnya .


Pembukaan umum


library(tidyverse) library(glue) library(magrittr) library(lubridate) library(hms) library(numbers) library(polynom) library(Ryacas) library(stringi) library(tictoc) 

Berikut ini adalah serangkaian tugas yang dapat diperluas hingga tak terbatas.


Pulihkan Rekam


Tantangan


Kembalikan catatan: 3∗∗:∗3=3∗ . Temukan jumlah dari semua angka yang hilang.


Contoh solusi
 #  3ab = c3*3d df <- 0:9 %>% {tidyr::crossing(a = ., b = ., c = ., d = .)} %>% filter(300 + a * 10 + b == (c * 10 + 3) * (30 + d)) df 

Tantangan


Apakah mungkin untuk meletakkan tanda-tanda operasi aritmatika alih-alih “∗” dalam catatan 7∗(7∗7∗7)∗7 untuk mendapatkan 8?


Contoh solusi
 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) 

Tantangan


Semua angka dari 1 hingga 100 ditulis. Berapa kali angka 4 muncul dalam catatan?


Contoh solusi
 #  100   4,      99 #    tidyr::crossing(d1 = 0:9, d2 = 0:9) %>% #   ,   4 filter(d1 == 4 | d2 == 4) %>% arrange(d1, d2) 

Tantangan


Angka 9, yang dimulai dengan angka tiga digit, dipindahkan ke akhir nomor. Hasilnya adalah angka yang 216 lebih sedikit. Berapakah jumlah digit dari angka asli.


Contoh solusi
 #   : 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 

Tantangan


Produk dari 5 bilangan asli berturut-turut adalah 2520. Berapa angka lebih kecil?


Contoh Solusi Metode 1
 numbers::primeFactors(2520) 

Contoh Solusi Metode 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)) 

Contoh Solusi, Metode 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]) 

Tantangan


Nomor apa yang bisa diganti dengan "∗" sehingga angka 543∗ habis dibagi 4 ? Apa saja pilihannya?


Contoh solusi
 tibble(num = 5430 + 0:9, mod = mod(num, 4)) %>% arrange(mod, num) 

Tantangan


Berapa dua kali kuartal ketiga dari angka 60?


Contoh solusi
 2*(1/3*(1/4*60)) 60 %>% {./4} %>% {./3} %>% {.*2} 

Tantangan


Bagi dial jam tanpa tangan menjadi 2 bagian sehingga jumlah angka yang tersedia di setiap bagian akan sama.
Tambah. pertanyaannya adalah: berapa banyak bagian yang dapat jam wajah dibagi lebih lanjut sehingga di setiap bagian ada angka yang jumlahnya akan sama satu sama lain?


Contoh solusi
 #       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}]")) } } 

"Sapi dan Sapi"


Variasi 1


Dalam nomor catatan berbagai digit dari 1 hingga 5 inklusif.
Jumlah angka tebakan yang berdiri di tempat mereka adalah jumlah lembu jantan. Jumlah angka tebakan yang tidak pada tempatnya adalah jumlah sapi.


Berapakah angka tiga digit jika Anda tahu:


  • 314 - 1 sapi jantan dan 1 sapi;
  • 124 - 1 sapi jantan dan 1 sapi;
  • 523 - 1 sapi jantan dan 1 sapi.

Contoh solusi
 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 

Variasi 2


Dalam nomor catatan berbagai digit dari 1 hingga 5 inklusif.
Jumlah angka tebakan yang berdiri di tempat mereka adalah jumlah lembu jantan.
Jumlah angka tebakan yang tidak pada tempatnya adalah jumlah sapi.
Berapakah angka tiga digit jika Anda tahu:


543 - 1 banteng; 0 sapi;
235 - 1 banteng; 0 sapi.


Contoh solusi
 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 

Isi kotak


Apakah mungkin untuk mengatur sepuluh minus dalam sel tabel persegi 4 dengan 4 sehingga setiap kolom memiliki jumlah ganjil, dan setiap baris memiliki jumlah genangan yang genap?


Contoh solusi, opsi 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) } 

Contoh solusi, opsi 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) 

Kombinatorik


Tantangan


Berapa banyak kombinasi huruf yang berbeda di mana dua huruf identik tidak berdiri berdampingan satu sama lain dapat dibuat dengan menata ulang huruf K, A, W dan A?


Lihatlah berbagai pertimbangan.Buat semua permutasi yang berbeda dari daftar di R


Contoh solusi
 #     # 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, "")) 

Tantangan


Berapa hari Minggu dalam setahun? Berapa jumlah terbesar yang mungkin?


Contoh solusi
 #   ,     366 %/% 7 #   .         366 %% 7 

Tugas bajak laut


Bajak laut: A, B, C
Mengatakan 1
A: B memiliki 2 mata
B: C memiliki 2 mata
C: A memiliki 2 mata


Mengatakan 2
A: Kita semua memiliki 2 mata
B: Kita semua memiliki 3 mata
C: Kita semua memiliki 4 mata


Setiap bajak laut berbohong sebanyak matanya. Berapa banyak mata yang dimiliki masing-masing perompak?


Contoh solusi
 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 

Dll dll.


Bagi sebagian orang, ini mungkin kesempatan untuk menghabiskan waktu bersama anak Anda.


Posting sebelumnya - "Beberapa Pertimbangan untuk Komputasi Paralel dalam R untuk Tugas" Perusahaan " . "

Source: https://habr.com/ru/post/id462619/


All Articles