我花了很多时间试图尝试一下,但收效甚微。我基本上是在努力解决Hackerrank在R.上提出的袜子商人挑战。挑战本身很直接,但我真的很难接受STDIN和STDOUT大多数可用的帮助都与Python有关,所以我非常感谢您的帮助。
以下是挑战的描述:
约翰在一家服装店工作。他有一大堆袜子,必须按颜色搭配才能出售。给定一个表示每只袜子颜色的整数数组,确定有多少双颜色匹配的袜子。例如,有n=7颜色ar=[1,2,1,2,1,3,2]的袜子。有一对颜色1和一对颜色2。剩下三只奇怪的袜子,每种颜色一只。配对数为2。函数描述:在下面的编辑器中完成sockMerchant函数。它必须返回一个整数,表示可用的匹配袜子的数量。sockMerchant具有以下参数:
- n:堆中袜子的数量
- ar:每只袜子的颜色
输入格式:第一行包含一个整数,即中表示的袜子数量。第二行包含空格分隔的整数,用于描述袜子堆中袜子的颜色。
输出格式:返回John可以出售的匹配袜子的总数。
这是我的简单尝试,它在RStudio 上运行得很好
sockmerchant <- function(n,ar){
unique.values <- unique(ar)
count <- rep(0, length(unique.values))
for (i in 1:length(unique.values)){
count[i] <- sum(ar == unique.values[i])
}
temp <- count/2
pairs <- floor(temp)
return(sum(pairs))
}
然而,我不确定如何使此代码符合Hackerrank的要求。我的主要挑战是如何在Hackerrank上解释这个函数。我应该如何修改代码,使其从STDIN读取输入并将输出打印到STDOUT。
readLines
的每个输入都被解释为文本,因此需要转换为数值进行计算。第二行需要用空格分隔,以返回一个整数向量,然后将其转换为数字。
sockmerchant <- function() {
cat("Enter total number of socks: ")
n <- as.numeric(readLines(n = 1))
cat("nEnter colors of socks as integers separated by spaces: ")
ar <- as.numeric(strsplit(readLines(n = 1), " +")[[1]])
if (length(ar) != n) stop("The number of socks doesn't match the color list!")
unique.values <- unique(ar)
count <- rep(0, length(unique.values))
for (i in 1:length(unique.values)){
count[i] <- sum(ar == unique.values[i])
}
temp <- count/2
pairs <- floor(temp)
return(sum(pairs))
}
它会这样工作:
> sockmerchant()
Enter total number of socks:
7
Enter colors of socks as integers separated by spaces:
3 5 7 3 5 7 9
[1] 3