Что купить
Часть раздела Основы путешествия по R на Coddy — урок 78 из 78.
Задание
ЛегкоСоздайте функцию с именем what_to_buy, которая принимает два аргумента: budget (числовое значение) и prices (именованный вектор цен на товары). Функция должна возвращать символьный вектор, содержащий названия всех товаров, цены которых меньше или равны бюджету.
Если ни один товар не доступен по цене, верните пустой символьный вектор, используя character(0).
Вы получите следующие входные данные:
- Сумма бюджета (число)
- Список названий товаров через запятую (например,
apple,banana,steak,bread) - Список соответствующих цен через запятую (например,
2,1,15,3)
Обработайте входные данные, чтобы создать именованный вектор цен, вызовите свою функцию и выведите результат. Используйте print() для отображения возвращаемого символьного вектора.
Например, если входные данные следующие:
5
apple,banana,steak,bread
2,1,15,3Выходные данные должны быть:
[1] "apple" "banana" "bread"Если входные данные следующие:
10
laptop,phone,tablet
999,599,399Выходные данные должны быть:
character(0)Подсказки:
- Используйте
strsplit(input, ",")[[1]], чтобы разделить строки, разделенные запятыми, на векторы - Используйте
as.numeric()для преобразования строк с ценами в числа - Используйте
names(prices) <- item_namesдля создания именованного вектора - Используйте логическую индексацию с
names()для извлечения названий доступных по цене товаров
Попробуйте сами
# Чтение входных данных
con <- file("stdin", "r")
budget <- as.numeric(suppressWarnings(readLines(con, n = 1)))
item_names_input <- suppressWarnings(readLines(con, n = 1))
prices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Разбор входных данных
item_names <- strsplit(item_names_input, ",")[[1]]
price_values <- as.numeric(strsplit(prices_input, ",")[[1]])
# Создание именованного вектора цен
prices <- price_values
names(prices) <- item_names
# TODO: Напишите вашу функцию what_to_buy ниже
# Функция должна принимать budget и prices в качестве аргументов
# и возвращать символьный вектор названий доступных товаров
# Вызов функции и вывод результата
result <- what_to_buy(budget, prices)
print(result)Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строками