다른 답변에서 언급했듯이 24hr 방법은 여러 시간대에 더 친숙하며 각 사용자에 대해 마지막으로 성공한 타임 스탬프를 저장하는 것처럼 코딩하기 쉽습니다.
또한 실제로 매일 사용자가 앱과 상호 작용하여 모든 일상적인 작업을 수행해야하는 "혜택"이 추가되었습니다. 자정 재설정이있는 경우 사용자는 오후 11시 59 분에 작업을 수행 한 다음 오전 12시에 다시 작업을 수행 할 수 있습니다. 그들은 매일이 작업을 수행하고 여전히 모든 작업을 수행 할 수 있습니다. 일부 앱의 경우 일상적인 작업의 목적은 사용자가 매일 앱과 상호 작용하도록하는 것이 이상적이지 않습니다.
UI 함정을 피하는 세 번째 대안이 있지만 코딩하기가 조금 더 어렵습니다.
3) (n-0.75) * 24 시간 동안 n 개 이상의 동작에 줄무늬가 없음
저장하는 데 두 가지 변수가 필요하지만 시스템을 남용하지 않는 사람은 시간대와 재설정에 대해 걱정할 필요없이 하루 중 언제든지 한 가지 작업을 사용할 수 있습니다.
또한 모든 사람이 둘 이상의 "추가"작업을 사용하지 못하게합니다.
실제로 행진의 시작 시간, 마지막 재생 시간 및 행진의 동작 수를 저장해야하는 알고리즘을 구현하십시오.
마지막 작업 시간을 추적하면 너무 가까운 두 작업을 거부 할 수 있습니다. 이 줄무늬는 24 시간 이내에이 제한을 만들 수 있습니다.
매일 행동을 취하는 한 행진은 계속됩니다. 조치를 취하면 행진에서 며칠보다 더 많은 조치를 취해야한다면 거부됩니다. 이렇게하면 줄무늬의 시작 시간이 변경되지 않기 때문에 "추가"작업을 수행하면서 천천히 앞으로 기어 오르는 것을 방지합니다.
검사를 구현하고 시간을 추적하는 의사 코드 :
//precondition: streakStart and lastAction are initialized as in the far past
// streakCount is initialized as 0
graceHours=18;
checkAllowed(currentTime,&streakStart,&streakCount, &lastAction){
diffhours=hoursDifferent(lastAction,currentTime);
if(diffhours< 24 - graceHours){
return false;
}
diffhours=hoursDifferent(streakStart,currentTime);
if(diffhours <= 24*streakCount - graceHours){
return false;
}
if(diffhours > 24*(streakCount+2)-graceHours){
streakStart=currentTime;
streakCount=0;
}
streakCount++;
lastActionTime=currentTime;
return true;
}
추가 보너스로 원하는 경우 줄무늬 카운터를 얻을 수 있습니다.