Menu
Coddy logo textTech

Dodawanie niespodzianki

Część sekcji Podstawy ścieżki R w Coddy. Lekcja 55 z 78.

challenge icon

Wyzwanie

Łatwy

W poprzedniej lekcji utworzyłeś program FizzBuzz, który przechodzi przez liczby, używając domyślnych dzielników 3 i 5. Teraz dodaj urozmaicenie: umożliwiaj dostosowywanie dzielników za pomocą parametrów domyślnych.

Zmodyfikuj swoją funkcję fizzbuzz, aby przyjmowała trzy argumenty:

  • n — liczba do sprawdzenia (wymagany)
  • fizz_divisor — dzielnik dla "Fizz" (opcjonalny, domyślnie 3)
  • buzz_divisor — dzielnik dla "Buzz" (opcjonalny, domyślnie 5)

Funkcja powinna używać tych niestandardowych dzielników zamiast wartości wpisanych na stałe podczas sprawdzania podzielności.

Otrzymasz trzy wiersze danych wejściowych:

  1. Górny limit n
  2. Dzielnik fizz
  3. Dzielnik buzz

Wykonaj pętlę od 1 do n i wywołaj zaktualizowaną funkcję fizzbuzz ze wszystkimi trzema argumentami. Wypisz każdy wynik.

Na przykład, jeśli dane wejściowe to:

10
2
3

Wynik powinien być następujący:

[1] "1"
[1] "Fizz"
[1] "Buzz"
[1] "Fizz"
[1] "5"
[1] "FizzBuzz"
[1] "7"
[1] "Fizz"
[1] "Buzz"
[1] "Fizz"

Jeśli dane wejściowe to:

15
3
5

Wynik powinien być następujący:

[1] "1"
[1] "2"
[1] "Fizz"
[1] "4"
[1] "Buzz"
[1] "Fizz"
[1] "7"
[1] "8"
[1] "Fizz"
[1] "Buzz"
[1] "11"
[1] "Fizz"
[1] "13"
[1] "14"
[1] "FizzBuzz"

Spróbuj swoich sił

# Read input
con <- file("stdin", "r")
n <- as.numeric(suppressWarnings(readLines(con, n = 1)))

# Function from previous lesson
check_divisible <- function(number, divisor) {
  return(number %% divisor == 0)
}

# Create the fizzbuzz function
fizzbuzz <- function(n) {
  if (check_divisible(n, 3) && check_divisible(n, 5)) {
    return("FizzBuzz")
  } else if (check_divisible(n, 3)) {
    return("Fizz")
  } else if (check_divisible(n, 5)) {
    return("Buzz")
  } else {
    return(as.character(n))
  }
}

# Loop through numbers from 1 to n and print the result
for (i in 1:n) {
  print(fizzbuzz(i))
}

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator R online