【发布时间】:2018-05-27 10:47:21
【问题描述】:
我有一些代码解决了今天的“代码出现第 2 部分”。 https://adventofcode.com/
我目前有很多硬编码的模条件,有什么简单的方法可以减少条件的数量吗?
一般来说,如果您已经检查过x % 2 == 0,则可以跳过检查x % 4 == 0。但是当涉及到加法时,我很难弄清楚如何简化。我可以查找任何建议或资源吗?
if (delay % 6 == 0)
{
return false;
}
if ((delay +1) % 2 == 0)
{
return false;
}
if ((delay +2) % 4 == 0)
{
return false;
}
if ((delay + 4) % 6 == 0)
{
return false;
}
if ((delay + 6) % 14 == 0)
{
return false;
}
if ((delay + 8) % 8 == 0)
{
return false;
}
if ((delay + 10) % 14 == 0)
{
return false;
}
if ((delay + 12) % 10 == 0)
{
return false;
}
if ((delay + 14) % 10 == 0)
{
return false;
}
if ((delay + 16) % 14 == 0)
{
return false;
}
if ((delay + 18) % 10 == 0)
{
return false;
}
if ((delay + 20) % 10 == 0)
{
return false;
}
if ((delay + 22) % 22 == 0)
{
return false;
}
if ((delay + 24) % 22 == 0)
{
return false;
}
if ((delay + 26) % 18 == 0)
{
return false;
}
if ((delay + 28) % 14 == 0)
{
return false;
}
if ((delay + 32) % 14 == 0)
{
return false;
}
if ((delay + 36) % 16 == 0)
{
return false;
}
if ((delay + 40) % 14 == 0)
{
return false;
}
if ((delay + 44) % 32 == 0)
{
return false;
}
if ((delay + 50) % 18 == 0)
{
return false;
}
if ((delay + 56) % 26 == 0)
{
return false;
}
if ((delay + 58) % 26 == 0)
{
return false;
}
if ((delay + 60) % 26 == 0)
{
return false;
}
if ((delay + 62) % 22 == 0)
{
return false;
}
if ((delay + 64) % 26 == 0)
{
return false;
}
if ((delay + 66) % 26 == 0)
{
return false;
}
if ((delay + 68) % 26 == 0)
{
return false;
}
if ((delay + 70) % 26 == 0)
{
return false;
}
if ((delay + 74) % 26 == 0)
{
return false;
}
if ((delay + 76) % 26 == 0)
{
return false;
}
if ((delay + 80) % 26 == 0)
{
return false;
}
if ((delay + 88) % 26 == 0)
{
return false;
}
doSomeComputation...
【问题讨论】:
-
究竟是什么问题,检查数字是否可整除?
-
你可以不在通过
x % 2 == 0时跳过x % 4 == 0。 -
@Sefe 我相信 OP 的意思是,如果你测试
x % 2 == 0并返回,那么之后就不需要测试x % 4 == 0,因为任何能被 4 整除的东西也能被 2 整除。跨度> -
@juharr 但这就是他已经在做的事情。删除第二个测试(实际上不在提供的实际代码中)将改变代码的语义。这显然是他不想要的。
-
@juharr,确切地说,这只是一个例子,因为当涉及到“+”时我不明白该怎么做。问题是是否有任何多余的检查,如果有如何找到它们?
标签: c# modulo simplify integer-division