More

    Résoudre des Énigmes Excel avec R : Guide Complet

    France

    Dans le monde de l’informatique, résoudre des énigmes Excel avec le langage R peut sembler complexe, mais avec les bonnes techniques, cela devient une tâche réalisable et même amusante. Cet article vous guidera à travers plusieurs énigmes intéressantes, en vous montrant comment utiliser R pour les résoudre efficacement.

    Énigme #564

    Avez-vous déjà pensé à trier seulement une partie des données sans changer leur position d’origine ? Imaginez un chef d’orchestre montrant une partie de l’orchestre pour changer leur façon de jouer sans affecter les autres. Dans cette énigme, nous devons trier des nombres tout en gardant les lettres à leur place. Voici comment procéder :

    Chargement des bibliothèques et des données

    library(tidyverse)
    library(readxl)
    path = "Excel/564 Sort Numbers only.xlsx"
    input = read_excel(path, range = "A2:D11")
    test = read_excel(path, range = "F2:I11")

    Transformation

    process_column = function(col) {
      letters = grep("[A-Za-z]", col)
      num_positions = grep("[0-9]", col)
      numbers = as.numeric(col[num_positions])
      numbers = sort(numbers)
      col[num_positions] = numbers
      return(col)
    }
    input = input %>% map_df(process_column)

    Validation

    all.equal(input, test) #> [1] TRUE

    Énigme #565

    La déesse romaine Janus avait deux visages regardant dans des directions opposées, ce qui illustre parfaitement les nombres inversés. L’objectif ici est de trouver 50 nombres dont les racines carrées et inversées sont des nombres pairs et des carrés parfaits. Voici le processus :

    Chargement des bibliothèques et des données

    library(tidyverse)
    library(readxl)
    path = "Excel/565 Even Number and Reversal Perfect Square.xlsx"
    test = read_excel(path, range = "A1:A51")

    Transformation

    is_even = function(x) { x %% 2 == 0 }
    is_perfect_square = function(x) { sqrt_x = sqrt(x); sqrt_x == floor(sqrt_x) }
    reverse_number = function(x) { as.numeric(paste(rev(strsplit(as.character(x), NULL)[[1]]), collapse = "")) }
    find_even_reverse_perfect_squares = function(n_required) {
      results = vector("list", n_required)
      count = 1
      n = 10
      while (count <= n_required) {
        square = n^2
        reverse_square = reverse_number(square)
        if (is_even(square) && is_even(reverse_square) && is_perfect_square(reverse_square)) {
          results[[count]] = list(original = square, reverse = reverse_square)
          count = count + 1
        }
        n = n + 1
      }
      return(results)
    }
    result = find_even_reverse_perfect_squares(50) %>% map_df(~ .x)

    Validation

    all.equal(result$original, test$`Expected Answer`) # [1] TRUE

    Énigme #566

    Dans cette énigme, nous avons des fruits dans trois boîtes différentes, et nous devons déterminer dans quelle boîte se trouve quelle quantité de chaque fruit. Voici comment résoudre ce problème :

    Chargement des bibliothèques et des données

    library(tidyverse)
    library(readxl)
    path = "Excel/566 Count in Columns.xlsx"
    input = read_excel(path, range = "A2:C14")
    test = read_excel(path, range = "E2:J6")

    Transformation

    result = input %>% 
      pivot_longer(everything(), names_to = "basket", values_to = "fruit") %>%
      summarise(Count = n(), .by = c(fruit, basket)) %>%
      na.omit() %>%
      pivot_wider(names_from = Count, values_from = basket, 
                  values_fn = list(basket = ~ str_c(sort(.x), collapse = ", "))) %>%
      arrange(fruit) %>%
      select(Count = fruit, `1`, `2`, `3`, `4`, `5`)

    Validation

    all.equal(result, test, check.attributes = FALSE) # [1] TRUE

    Énigme #567

    Pour cette énigme, nous allons dessiner en ASCII. Nous allons créer une matrice pour dessiner une maison. Voici comment réaliser cela :

    Chargement des bibliothèques et des données

    library(tidyverse)
    library(readxl)
    path = "Excel/567 ASCII House.xlsx"
    test = read_excel(path, range = "C2:Q18", col_names = F) %>% 
      replace(is.na(.), "") %>% as.matrix()

    Transformation

    M = matrix("", nrow = 17, ncol = 15)
    for (i in 1:7) {
      M[i, (8 - i + 1):(8 + i - 1)] = "#"
    }
    M[17, ] = "#"
    for (i in 8:16) {
      M[i, c(2, 14)] = "#"
    }
    M[16, -c(1, 15)] = "#"
    M[9:11, c(4,6)] = "#"
    M[c(9, 11), 5] = "#"
    M[9:16, 9] = "#"
    M[9, 10:11] = "#"
    M[9:16, 12] = "#"
    as.data.frame(M)

    Validation

    all.equal(M, test, check.attributes = F) # TRUE

    Énigme #568

    Enfin, réfléchissons à l’alphabet comme une chaîne. L’objectif est de compléter l’espace entre les lettres d’un mot avec toute la séquence qui se trouve entre elles. Voici comment procéder :

    Chargement des bibliothèques et des données

    library(tidyverse)
    library(readxl)
    path = "Excel/568 Fill in the Alphabets.xlsx"
    input = read_excel(path, range = "A1:A10")
    test = read_excel(path, range = "B1:B10")

    Transformation

    fill_words = function(string) {
      lets = strsplit(string, "")[[1]]
      pairs = map(1:(length(lets) - 1), ~paste(lets[.x:(.x + 1)], collapse = ""))
      df = tibble(
        first = map_chr(pairs, ~str_sub(.x, 1, 1)),
        second = "",
        third = map_chr(pairs, ~str_sub(.x, 2, 2))
      )
      df = df %>% 
        mutate(
          second = map2_chr(first, third, ~{
            first_num = as.numeric(charToRaw(.x))
            third_num = as.numeric(charToRaw(.y))
            letters = map_chr((first_num):(third_num), ~rawToChar(as.raw(.x)))
            paste(letters, collapse = "") %>% str_sub(2, -2)
          }),
          third = if_else(row_number() == n(), "", third)
        ) %>% 
        unite("word", c("first", "second", "third"), sep = "") %>% 
        pull(word) %>% 
        paste(collapse = "")
      return(df)
    }
    result = input %>% 
      mutate(`Answer Expected` = map_chr(Words, fill_words)) %>% 
      select(-Words)

    Validation

    all.equal(result$`Answer Expected`, test$`Answer Expected`, check.attributes = FALSE) #> [1] TRUE
    Énigmes Excel | Excel | R | Programmation | Données | Énigmes | France

    LAISSER UN COMMENTAIRE

    S'il vous plaît entrez votre commentaire!
    S'il vous plaît entrez votre nom ici

    Actualités

    L’acteur de Friends, Matthew Perry, décède à 54 ans

    "Matthew Perry, célèbre pour son rôle de Chandler Bing dans Friends, décède à 54 ans. Acteur très apprécié, sa mort suscite l'émotion mondiale."

    Entité sioniste déploie des navires de guerre en Mer Rouge selon un expert militaire

    Entité sioniste déploie des navires de guerre en Mer Rouge pour contrer les Houthis au Yémen, une manœuvre vue comme une démonstration de force envers l'Iran.

    Le Retour de Microsoft avec Bing et Edge : Une Menace pour Google ?

    Depuis moins de trois mois, ChatGPT a déjà créé...

    L’affaire des SMS entre Pfizer et la Commission européenne : ce qu’il faut savoir

    En avril 2021, le New York Times a révélé...

    Banque suisse : Credit Suisse en chute libre après la faillite de la SVB

    L'action de Credit Suisse a dévissé de plus de...

    Hébron : des blessés palestiniens lors d’attaques de l’armée et de colons sionistes

    Dix Palestiniens ont été pris en charge à Hébron. D’autres incidents, arrestations et sièges de maisons ont été signalés en Cisjordanie.

    Syrie : une enquête annoncée après l’hospitalisation de Mohamed Ghmira

    Les autorités de Lattaquié annoncent une enquête après l’hospitalisation de Mohamed Ghmira. Le cas d’Abd al-Salam Akko ravive aussi le débat sur les détenus en Syrie.

    Liban : 11 morts après des frappes de l’État sioniste dans le Sud

    L’armée de l’État sioniste affirme avoir tué un commandant du Hezbollah. Les frappes de samedi ont fait 11 morts et 19 blessés, d’après le bilan rapporté.

    Iran : deux médiations en attente autour du détroit d’Ormuz

    Mascate travaille avec Téhéran sur l’organisation du trafic maritime, tandis qu’une initiative pakistanaise vise à rétablir un canal politique avec Washington.

    Syrie : des milliers de dounams agricoles endommagés à Quneitra

    La direction de l’agriculture de Quneitra évalue à plus de 4 800 dounams les pâturages, cultures d’hiver et vergers endommagés après des épandages signalés en janvier.

    Détroit d’Ormuz : condamnations du Golfe après trois attaques contre des navires d’ADNOC

    Trois navires d’ADNOC ont été visés dans le détroit d’Ormuz en deux soirs. Les pays du Golfe ont condamné les attaques.

    Gaza : une délégation du Hamas attendue au Caire pour discuter de l’accord

    Conduite par Khalil al-Hayya, une délégation du Hamas est attendue au Caire pour discuter de l’accord de cessez-le-feu à Gaza.

    Coupe du Roi d’Arabie saoudite : les 32es de finale lancent la 40e édition

    La Coupe du Roi d’Arabie saoudite lance ses 32es de finale sur quatre jours, avec 32 clubs engagés dans cette 40e édition.

    à Lire

    Categories