Hackerrank袜子商人挑战赛-STDIN和STDOUT与R



我花了很多时间试图尝试一下,但收效甚微。我基本上是在努力解决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

相关内容

  • 没有找到相关文章

最新更新