Я пытаюсь завершить «Помогите продавцу!»на 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](https://i.stack.imgur.com/CmVjm.png)
моя функция:
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)