使用更少的代码进行脑筋急转弯

Hob*_*r11 2 if-statement r

这是我尝试编码的 R 问题的一个小脑筋急转弯。

假设您的桌子上有 15 根蜡烛。在三个不同的回合中,您将根据蜡烛是否已经点燃,点燃或熄灭给定的蜡烛。因此,如果给定的蜡烛已经点燃,那么您的行动就是将其熄灭。另一方面,如果蜡烛没有点燃,那么你的行动就是点亮它。

最初没有蜡烛被点燃。

首先,您将每隔一根蜡烛点亮一次,因此蜡烛编号为 2 到 14。

其次,您将每三根蜡烛点亮/熄灭一次。

最后,您将每五根蜡烛点亮/熄灭一次。

最后我想知道点燃了哪些蜡烛。

我用两个变量创建了一个数据框。蜡烛的数量和一个二元变量,说明蜡烛是否点亮。

我可以用三个不同的 if 语句手动解决这个问题,但我想用更少的代码来解决这个问题。关于我如何做到这一点的任何建议?

Ale*_*x P 5

这似乎有效。

candles <- vector(mode="logical", length=15)

for(i in c(2,3,5)){
  candles[1:15 %% i == 0] <- !candles[1:15 %% i == 0]
}

which(candles)
## 2  3  4  5  8  9 14
Run Code Online (Sandbox Code Playgroud)

感谢 Gregor 建议对代码进行一些简化