Конкурс Hackerrank Sock Merchant Challenge - STDIN и STDOUT с R - PullRequest
0 голосов
/ 04 августа 2020

Я потратил немало времени, пытаясь получить go, но без особого успеха. Я в основном пытаюсь решить задачу продавца носков из Hackerrank на R. Сама задача довольно проста, но я действительно изо всех сил пытаюсь примириться с STDIN и STDOUT. Большая часть доступной помощи относится к Python, поэтому я буду очень благодарен за любую помощь.

Ниже приводится описание задачи:

Джон работает в магазине одежды. У него есть большая стопка носков, которые он должен собрать по цветам для продажи. Учитывая массив целых чисел, представляющих цвет каждого носка, определите, сколько пар носков совпадающих цветов существует. Например, есть n = 7 носки с цветами ar = [1,2,1,2,1,3,2] . Есть одна пара цвета 1 и одна цвета 2 . Осталось три нечетных носка, по одному каждого цвета. Количество пар: 2 .

Описание функции : Завершите функцию sockMerchant в редакторе ниже. Он должен возвращать целое число, представляющее количество подходящих пар доступных носков. sockMerchant имеет следующие параметры:

  • n: количество носков в стопке
  • ar: цвета каждого носка

Формат ввода : первая строка содержит целое число, количество представленных носков. Вторая строка содержит разделенные пробелом целые числа, описывающие цвета носков в стопке.

Формат вывода : возвращает общее количество совпадающих пар носков, которые Джон может продать.

Вот моя простая попытка, и она просто работает отлично на 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))
}

Однако я не уверен, как сделать этот код совместимым с stdin / stdout, как того требует Hackerrank. Моя главная задача - как сделать эту функцию интерпретируемой на Hackerrank. Как мне изменить код, чтобы он считывал ввод из STDIN и печатал вывод в STDOUT.

1 Ответ

0 голосов
/ 04 августа 2020

Каждый ввод в readLines интерпретируется как текст, поэтому вам необходимо преобразовать в числовые c значения для вычисления. Вторая строка должна быть разделена пробелами, чтобы получить вектор целых чисел, который затем будет преобразован в числа.

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
...