Die derzeitige Schulbildung wird immer weniger. Und im verbleibenden Teil wird der externe Effekt immer mehr betont. "Projektarbeit", Präsentationen, Wow-Effekte usw. Lametta. Darüber hinaus ist oft unklar, an wen diese Übungen verteilt werden - an das Kind oder die Eltern? Die Folge all dessen ist die Notwendigkeit zusätzlicher Klassen in verschiedenen Kreisen, innerhalb der Schule oder alternativ, wenn das Ziel besteht, dem Kind eine vollständige Ausbildung zu ermöglichen.
Im Fall von Mathematik oder Physik können Sie versuchen, zwei Fliegen mit einer Klappe zu schlagen (naja oder einen Hasen und einen Hasen). Kombinieren Sie die Lösung von Problemen aus ext. Klassen (der Lehrplan ist dafür nicht geeignet) mit der parallelen Bildung einer Kultur des Arbeitens mit Daten und des Trainings in algorithmischen Ansätzen. Wir sprechen nicht über Chat-Bots in drei Zeilen, sondern über die Verwendung eines Computers als Teil des ursprünglichen Ziels - Berechnungen durchführen, numerische Experimente durchführen, versteckte Abhängigkeiten modellieren und aufdecken, auf deren Grundlage neue Hypothesen erstellt werden können.
Ich stelle sofort fest, dass sich nicht jeder für das Thema interessieren wird. Für wen es irrelevant ist - gehen Sie vorbei . Wer wird extra haben. Ideen wäre es interessant, sich auch kennenzulernen. Als nächstes folgt eine Reihe von Problemen, die aus den Kursen " Metashkola ", Mathematik, 3. Klasse entlehnt wurden. Natürlich wird das Problem zuerst durch logisches Denken gelöst, dann wird eine Lösungsmethode unter Verwendung eines Computers diskutiert.
Wichtige Ergänzungen aus der folgenden Diskussion:
- Das Material ist aus der Perspektive eines Elternteils geschrieben, nicht eines Lehrers. Es gibt keine Dienste und PR. Hier sind nur einige praktische Überlegungen.
- R wurde als Werkzeug verwendet, weil es bequemer war.
Es ist eine Fortsetzung früherer Veröffentlichungen .
Allgemeine Präambel
library(tidyverse) library(glue) library(magrittr) library(lubridate) library(hms) library(numbers) library(polynom) library(Ryacas) library(stringi) library(tictoc)
Das Folgende ist eine Reihe von Aufgaben, die bis ins Unendliche erweitert werden können.
Datensatz wiederherstellen
Herausforderung
Stellen Sie den Datensatz wieder her: 3∗∗:∗3=3∗
. Finden Sie die Summe aller fehlenden Zahlen.
Lösungsbeispiel # 3ab = c3*3d df <- 0:9 %>% {tidyr::crossing(a = ., b = ., c = ., d = .)} %>% filter(300 + a * 10 + b == (c * 10 + 3) * (30 + d)) df
Herausforderung
Ist es möglich, die Vorzeichen von arithmetischen Operationen anstelle von “∗”
in den Datensatz 7∗(7∗7∗7)∗7
zu setzen, um 8 zu erhalten?
Lösungsbeispiel 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)
Herausforderung
Alle Zahlen von 1 bis 100 werden ausgeschrieben. Wie oft erscheint die Zahl 4 im Datensatz?
Lösungsbeispiel # 100 4, 99 # tidyr::crossing(d1 = 0:9, d2 = 0:9) %>% # , 4 filter(d1 == 4 | d2 == 4) %>% arrange(d1, d2)
Herausforderung
Die Nummer 9, mit der die dreistellige Nummer begann, wurde an das Ende der Nummer verschoben. Das Ergebnis ist eine Zahl, die 216 weniger ist. Was ist die Summe der Ziffern der ursprünglichen Nummer.
Lösungsbeispiel # : 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
Herausforderung
Das Produkt von 5 aufeinanderfolgenden natürlichen Zahlen ist 2520. Was ist die kleinere Zahl?
Lösungsbeispiel Methode 1 numbers::primeFactors(2520)
Lösungsbeispiel Methode 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))
Lösungsbeispiel, Methode 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])
Herausforderung
Welche Zahl kann durch "∗"
so dass die Zahl 543∗
durch 4
teilbar ist? Was sind alle Optionen?
Lösungsbeispiel tibble(num = 5430 + 0:9, mod = mod(num, 4)) %>% arrange(mod, num)
Herausforderung
Was ist doppelt so viel wie im dritten Quartal der Zahl 60?
Lösungsbeispiel 2*(1/3*(1/4*60)) 60 %>% {./4} %>% {./3} %>% {.*2}
Herausforderung
Teilen Sie das Zifferblatt ohne Zeiger in zwei Teile, sodass die Summe der in jedem Abschnitt verfügbaren Zahlen gleich ist.
Hinzufügen. Die Frage ist: Wie viele Teile kann das Zifferblatt weiter unterteilt werden, so dass es in jedem Teil Zahlen gibt, deren Summe gleich wäre?
Lösungsbeispiel # 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}]")) } }
"Bullen und Kühe"
Variation 1
In der Datensatznummer verschiedene Ziffern von 1 bis einschließlich 5.
Die Anzahl der erratenen Zahlen, die an ihren Plätzen stehen, ist die Anzahl der Bullen. Die Anzahl der erratenen Zahlen, die fehl am Platz sind, ist die Anzahl der Kühe.
Was ist eine dreistellige Zahl, wenn Sie wissen:
- 314 - 1 Bulle und 1 Kuh;
- 124 - 1 Bulle und 1 Kuh;
- 523 - 1 Bulle und 1 Kuh.
Lösungsbeispiel 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
Variante 2
In der Datensatznummer verschiedene Ziffern von 1 bis einschließlich 5.
Die Anzahl der erratenen Zahlen, die an ihren Plätzen stehen, ist die Anzahl der Bullen.
Die Anzahl der erratenen Zahlen, die fehl am Platz sind, ist die Anzahl der Kühe.
Was ist eine dreistellige Zahl, wenn Sie wissen:
543 - 1 Bulle; 0 Kühe;
235 - 1 Bulle; 0 Kühe.
Lösungsbeispiel 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
Füllen Sie das Quadrat
Ist es möglich, zehn Minuspunkte in den Zellen einer quadratischen Tabelle 4 mal 4 so anzuordnen, dass jede Spalte eine ungerade Anzahl von Minuspunkten und jede Zeile eine gerade Anzahl von Minuspunkten hat?
Lösungsbeispiel, Option 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) }
Lösungsbeispiel, Option 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
Herausforderung
Wie viele verschiedene Buchstabenkombinationen, in denen zwei identische Buchstaben nicht nebeneinander stehen, können durch Umordnen der Buchstaben K, A, W und A hergestellt werden?
Schauen Sie sich die verschiedenen Überlegungen an: Generieren Sie alle unterschiedlichen Permutationen einer Liste in R.
Lösungsbeispiel # # 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, ""))
Herausforderung
Wie viele Sonntage kann ein Jahr sein? Was ist die größtmögliche Anzahl?
Lösungsbeispiel # , 366 %/% 7 # . 366 %% 7
Die Aufgabe der Piraten
Piraten: A, B, C.
1 sagen
A: B hat 2 Augen
B: C hat 2 Augen
C: A hat 2 Augen
2 sagen
A: Wir haben alle 2 Augen
B: Wir haben alle 3 Augen
C: Wir haben alle 4 Augen
Jeder Pirat hat so oft gelogen wie seine Augen. Wie viele Augen hat jeder Pirat?
Lösungsbeispiel 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
Usw. usw.
Für einige ist dies möglicherweise eine Gelegenheit, Zeit mit Ihrem Kind zu verbringen.
Vorheriger Beitrag - "Einige Überlegungen zum parallelen Rechnen in R für" Unternehmens "-Aufgaben . "