Пытаясь решить следующую логическую проблему в R, я столкнулся с такой ситуацией:
Пять спортсменов (с номерами рубашек 1,2,3,4,5) участвуют в гонке, и онизаданные баллы, которые умножают номер их рубашки на ранг, в котором они закончили гонку;то есть, если спортсмен с футболкой № 2 финиширует 5-м, он получает 2 * 5 = 10 баллов.
Спортсмен с футболкой № 1 не финишировал в гонке 4-м и 5-м.
Сумма общего количества очков этих5 спортсменов после гонки - 41.
Найдите ранг каждого спортсмена, закончившего гонку.
Я закончил задачу с помощью следующего кода и заметил, что в случае, если один сталкивается с более чем 5 переменными, проверка неэквивалентности всех их друг от друга может быть очень громоздкой.Например, в 10 переменных это требует C (10,2) = 45 сравнений.
for (o in as.integer(1:5)) {
for (t in as.integer(1:5)) {
for (th in as.integer(1:5)) {
for (f in as.integer(1:5)) {
for (fi in as.integer(1:5)) {
if (o+2*t+3*th+4*f+5*fi == 41 &&
(o != 4 && o != 5) &&
# To check the following way in more complex cases is non-useful
((o!=t) && (o!=th) && (o!=f) && (o!=fi) && (t!=th) && (t!=f) && (t!=fi) && (th!=f) && (th!=fi) && (f!=fi))) {print(c(o,t,th,f,fi))}
}}}}}
# o t th f fi
# [1] 2 5 4 3 1
Есть ли короткий способ проверить неэквивалентность каждой переменной друг другу в R?
Источник (исходной задачи): Мехмет Эмрехан ХАЛИЧИ, "Brain Sport 1", 2019 (на турецком языке)