моя функция codewars не проходит тесты, но не знаю почему - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь завершить «Помогите продавцу!»на codewars.

Вот подробности:

У продавца книг есть много книг, классифицированных в 26 категориях, помеченных как A, B, ... Z. Каждая книга имеет код c из3, 4, 5 или более заглавными буквами. 1-я буква кода - это заглавная буква категории книги. В перечне акций продавца книг за каждым кодом c следует пробел и положительное целое число n (int n> = 0), которое указывает количество книг с этим кодом на складе. Например, выдержка из одного из списков акций может быть:

L = c("ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60")

Вам будет предоставлен список акций (например, L) и список категорий заглавными буквами, например:

  M = c("A", "B", "C", "W")

* и ваша задача - найти все книги L с кодами, относящимися к каждой категории M, и суммировать их количество по каждой категории.

Для списков Lи M например, вы должны вернуть строку: *

  (A : 20) - (B : 114) - (C : 50) - (W : 0)

, где A, B, C, W - категории, 20 - сумма уникальной книги категории A, 114 -сумма, соответствующая "BKWRK" и "BTSQZ", 50 соответствует "CDXEF" и 0 соответствует категории "W", поскольку нет кода, начинающегося с W. Если L или M пустые, возвращаемая строка равна "". Примечание. Коды результатов и их значения находятся в том же порядке, что и в M.

Я завершил свою функцию, и кодовые войны возвращают 3 ошибки. Все ошибки приводят к предупреждению о принуждении, и все они показывают значение R как несоответствующее.

Поскольку кодовые войны не показывают ввод данных в функцию для этих ошибок, и я не могу найтичто-то не так с кодом в моей функции Я пытался повторить ошибку, создавая различные входные данные, ни одно из которых не выводит предупреждения, и все выдают правильный результат.

errors

моя функция:

stockList <- function(listOfArt, listOfCat) {

  listOfArt <- listOfArt[grepl("\\d", listOfArt)]

  if(length(listOfArt) == 0){return("")}

  s <- sapply(listOfCat, function(x){

    sums <- sum(ifelse(startsWith(listOfArt, x),
                       as.integer(gsub("\\D+(\\d+$)", "\\1", listOfArt)),
                       0), na.rm = T)

    paste0("(", x, " : ", sums, ") - ")

  })

  s <- paste0(s, collapse = "")

  return(substr(s, 1, nchar(s)-3))

}

Вот то, с чем я играл, чтобы попытаться вывести ошибку:

L = c( "UZZ ", "VZZ ", "RZZ 100", "RZZ 250", "RZZ ", "RZZ 0")
M = c("U", "V", "R")

stockList(L, M)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...