Я уже решил эту проблему (см. Код ниже), но у меня нет удовлетворительного имени для результирующей функции. Также я хотел бы изучить эту проблему более широко, но я не знаю, что я ищу. Я пробовал "круговую математику", "проблему с часами". Я даже помню, как монады использовались для решения этого принципа, но я не могу найти, где я это увидел.
ПРОБЛЕМА: Учитывая последовательный набор чисел, которые идут по кругу, как часы 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4..
(или шкалу цветового оттенка в моем случае) и учитывая расстояние (в целых числах), я хочу вычислить результирующее число на этом круговая серия.
Поэтому, если часы показывают 5, а я добавляю 9 часов, результат должен быть 2.
5+9=2
или 3-7=8
Вопрос в том, как мне это назвать. Вот решение в PHP:
function circularmath($strExpression = "2+2" , $top = 355 ){
$result = 0;
if(preg_match('/^\d+[+-]\d+$/',$strExpression)){
list($n1,$op,$n2)=preg_split('/([+-])/',$strExpression, null, PREG_SPLIT_DELIM_CAPTURE);
$result =($op==="+")? $n1+$n2:$n1-$n2;
if($result < 0){
$result=$top+$result;
}elseif($result > $top){
$result=$result-$top;
}
}
return $result;
}
$foo = circularmath("352+4");
echo $foo;