double SCL::flux(const Point<DIM>& p, double u_l, double u_r, const std::vector<double>& n) const { std::vector<double> f_l((*_f_)(p, u_l)); std::vector<double> f_r((*_f_)(p, u_r)); double alpha0 = (*_v_)(p, u_l); double alpha1 = (*_v_)(p, u_r); double alpha = std::max(alpha0, alpha1); return 0.5*((innerProduct(f_l, n) + innerProduct(f_r, n)) - alpha*(u_r - u_l)); }
void RogueScene::logMessage(const char * pszFormat, ...) { char szBuf[kMaxLogLen+1] = {0}; va_list ap; va_start(ap, pszFormat); vsnprintf(szBuf, kMaxLogLen, pszFormat, ap); va_end(ap); CCLOG("logMessage: %s", szBuf); auto pGameLogNode = getChildByTag(RogueScene::kGameLogTag); // とりあえず子要素がないなら無理 if (!pGameLogNode || pGameLogNode->getChildrenCount() <= 0) { return; } auto pGameLogText = static_cast<LabelTTF*>(pGameLogNode->getChildren().at(0)); // TODO: 1子しかaddしてないから動く。ちゃんとしないと・・・ if (pGameLogText) { // TODO: 別クラスにしてログをlistで保持する。デフォルトの表示は1件だけで、center寄せ表示でいいかと auto pMessage = String::create(szBuf); pMessage->append("\n"); std::string nowString = pGameLogText->getString(); int count = f_r(nowString, '\n'); // 3行まで表示 if (count >= 3) { int size = nowString.size(); unsigned int loc = nowString.find_last_of('\n', size); CCLOG("logMessage: loc = %d size = %d", loc, size); if (loc != std::string::npos) { nowString.erase(loc, nowString.size() - loc); } } pMessage->append(nowString); pGameLogText->setString(pMessage->getCString()); pGameLogText->setVerticalAlignment(cocos2d::TextVAlignment::TOP); pGameLogText->setHorizontalAlignment(cocos2d::TextHAlignment::LEFT); pGameLogText->setPosition(Point(pGameLogText->getFontSize() / 4 + pGameLogText->getContentSize().width / 2, pGameLogNode->getContentSize().height - pGameLogText->getContentSize().height / 2 - pGameLogText->getFontSize() / 4)); } }
// ------------------------------------------------------- // test int main() { auto print = [](auto v) { std::cout << v << std::endl; }; print (f_r (-1)); // (f-r -1) print (f_r (0)); // (f-r 0) print (f_r (1)); // (f-r 1) print (f_r (2)); // (f-r 2) print (f_r (3)); // (f-r 3) print (f_r (4)); // (f-r 4) print (f_r (5)); // (f-r 5) print (""); print (f_i (-1)); // (f-i -1) print (f_i (0)); // (f-i 0) print (f_i (1)); // (f-i 1) print (f_i (2)); // (f-i 2) print (f_i (3)); // (f-i 3) print (f_i (4)); // (f-i 4) print (f_i (5)); // (f-i 5) }
N f_r (N n) { return n < 3 ? n : f_r(n-1) + 2*f_r(n-2) + 3*f_r(n-3); }
std::size_t f_r(const std::string& s, char c) { std::string::size_type pos = s.find(c); return (pos == std::string::npos) ? 0 : (1 + f_r(s.substr(pos+1), c)); }