bool GetLngHlfParam ( char* s, char* last, char** qb, char** qe, char* ParamName ) { SkipEmpty(s, last); if ( s == last ) return false; if ( *s++ != '.' ) return false; if ( !strncmp(s, ParamName, strlen(ParamName)) ) { s += strlen(ParamName); SkipEmpty(s, last); if ( (s != last) && (*s == '=') ) { *qb = s+1; *qe = last; return true; } } return false; }
ParseExp::Result ParseExp::ParseItemType(POETCode* input, int *p_lineno) { POETCode* res = 0, *tail=0; if ( get_head(input) == lp) { Result resOfRest = ParseExpImpl(NextToken(input),exp_bop->get_entry().get_code(),0, p_lineno); if (get_head(resOfRest.second) == rp) { input = NextToken(resOfRest.second); res = resOfRest.first; } else return Result(0,input); } else if (match_expItem(input)) { try { res = parse_AST(input, exp_item->get_entry().get_code(), &tail); assert(res != 0); input=SkipEmpty(tail, p_lineno); } catch (ParseError err) { if (backtrack) return Result(0,input); throw err; } } else return Result(0,input); if (funcall->get_entry().get_code() != 0 && get_head(input) == lp) { CodeVar* fvar = dynamic_cast<CodeVar*>(funcall->get_entry().get_code()); if (fvar == 0) INCORRECT_CVAR(funcall->get_entry().get_code()); Result resOfTail = ParseExpImpl(NextToken(input),exp_bop->get_entry().get_code(),0, p_lineno); std::vector<POETCode*> argVec; while (resOfTail.first!=0 && (get_head(resOfTail.second) != rp)) { argVec.push_back(resOfTail.first); resOfTail=ParseExpImpl(NextToken(resOfTail.second),exp_bop->get_entry().get_code(),0, p_lineno); } argVec.push_back(resOfTail.first); POETCode* args = Vector2List(argVec); if (args == 0) args = EMPTY; return Result(CODE_REF(fvar,PAIR(res,args)), NextToken(resOfTail.second)); } else if (arrref->get_entry().get_code() != 0 && get_head(input) == lb ) { CodeVar* fvar = dynamic_cast<CodeVar*>(arrref->get_entry().get_code()); if (fvar == 0) INCORRECT_CVAR(arrref->get_entry().get_code()); std::vector<POETCode*> argVec; while (get_head(input) == lb) { Result resOfTail = ParseExpImpl(NextToken(input),exp_bop->get_entry().get_code(),0, p_lineno); if (resOfTail.first==0 || get_head(resOfTail.second) != rb) return Result(res,input); argVec.push_back(resOfTail.first); input = NextToken(resOfTail.second); } POETCode* args = Vector2List(argVec); if (args == 0) args = EMPTY; return Result(CODE_REF(fvar,PAIR(res,args)),input); } return Result(res, input); }
void TLineSplitter::operator() (const char *p, yvector<TPair<const char*, size_t> >& fields) const { if (!p || !*p) return; const char *q = p; while (1) { p = Sep.brk(p); if (q && (p - q || !SkipEmpty())) fields.push_back(MakePair(q, p - q)); q = 0; if (!*p) break; if (SepStrLen == 1 || (SepStrLen > 1 && !strncmp(p + 1, SepStr + 1, SepStrLen - 1))) { p += SepStrLen; q = p; } else p++; } }
Result parse(POETCode* input, int *p_lineno = 0) { POETCode* bop = exp_bop->get_entry().get_code(); return ParseExpImpl(SkipEmpty(input, p_lineno), bop, 0, p_lineno); }
return; } for (char c : "0123456789") { if (!AdvanceIndexesByLetter(strings, c, indexes)) { continue; } current_sequence->push_back(c); ShortestCommonSuperstring(strings, indexes, minimum_length_string, current_sequence); current_sequence->pop_back(); RetractIndexesByLetter(strings, c, indexes); } } std::string ShortestCommonSuperstring(const std::vector<std::string>& strings) { std::string sequence; std::vector<int> indexes(strings.size()); std::string minimum_length_string = std::accumulate(strings.begin(), strings.end(), std::string{}); ShortestCommonSuperstring(strings, &indexes, &minimum_length_string, &sequence); return minimum_length_string; } TASK(79) { std::vector<std::string> strings = Split(ReadFileIntoString("data/079_keylog.txt"), '\n', SkipEmpty()); return ShortestCommonSuperstring(strings); }