// annkasep.cpp : アプリケーションのエントリ ポイントを定義します。
//
#include <iostream>
#include <tuple>
#include <vector>
#include <cstdint>
#include <string>
#include <sstream>
#include <cctype>
#include <algorithm>
typedef std::tuple < std::int64_t, std::int64_t> DType;
typedef std::vector<DType> RType;
typedef std::vector<std::int64_t> ExType;
//http://m...content-available-to-author-only...h.net/test/read.cgi/tech/1514772904/41 get license.it is GPL v3.
std::size_t FindDigit(const std::string& S,std::size_t F) {
for (std::size_t i = F; i < S.size(); i++) {
if (std::isdigit(S[i])) {
return i;
}
if (S[i] == ',') {
return i;
}
}
return S.npos;
}
std::string ConsumeDigit(const std::string& s){
std::size_t i = 0;
for (i = 0; i < s.size(); i++) {
if (!std::isdigit(s[i])&&s[i]!=',')break;
}
return s.substr(i, s.size() - i);
}
std::string Replace(std::string& s,char from,char To){
std::size_t p = 0;
while ((p=s.find(from, 0)) != s.npos) {
s = s.replace(p, 1, std::string{ To });
}
return s;
}
RType MakeHoge(std::string s) {
std::size_t p=0;
std::size_t l = 0;
std::int64_t F = 0;
std::int64_t E = 0;
bool F1 = false;
bool F2 = false;
RType R;
s = Replace(s, '-', '*');//*は適当
while(s.size()!=0) {
p = 0;
if (s[0] == ',')p++;
l = s.find_first_of(",", p);
if (l == s.npos)l = s.size();
std::string t = s.substr(p, l);
s = s.substr(l, s.size() - l);
t += ',';
F1 = false;
F2 = false;
while ((p = FindDigit(t, 0)) != std::string::npos) {
if (t[p] != ',') {
t = t.substr(p, t.size() - p);
std::stringstream ss;
ss << t;
if (F1 == false) {
ss >> F;
F1 = true;
F2 = true;
}
else {
ss >> E;
F1 = false;
}
}
t = ConsumeDigit(t);
}
if (F2) {
if (F1 == true) E = F;
if (E < F)std::swap(F, E);
R.push_back({ F,E });
}
}
return R;
}
std::vector<std::int64_t> ExAnka(const RType& R,std::int64_t F,std::int64_t E) {
std::vector<std::int64_t> v;
for (auto o : R) {
for (std::int64_t i = std::get<0>(o); i <= std::get<1>(o); i++) {
if (i <= F)continue;
if (i > E)continue;
v.push_back(i);
}
}
std::sort(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
return v;
}
bool show(const RType& R) {
for (auto o : ExAnka(R,0,100000)) {
std::cout << o << ',';
}
std::cout << std::endl;
return true;
}
int main()
{
RType R;
R=MakeHoge(">>1");
show(R);
R=MakeHoge(">>1-3");
show(R);
R=MakeHoge(">>1,3");
show(R);
R=MakeHoge(">>1-3,5,9-10");
show(R);
R=MakeHoge(">>000000-000000001");//8進数になるかもしれん。
show(R);
R=MakeHoge(">>289494");
show(R);
R=MakeHoge(">>3,0-3,4,5,6,4,2-8");
show(R);
return 0;
}
Ly8gYW5ua2FzZXAuY3BwIDog44Ki44OX44Oq44Kx44O844K344On44Oz44Gu44Ko44Oz44OI44OqIOODneOCpOODs+ODiOOCkuWumue+qeOBl+OBvuOBmeOAggovLwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx0dXBsZT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdGRpbnQ+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8Y2N0eXBlPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdHlwZWRlZiBzdGQ6OnR1cGxlIDwgc3RkOjppbnQ2NF90LCBzdGQ6OmludDY0X3Q+IERUeXBlOwp0eXBlZGVmIHN0ZDo6dmVjdG9yPERUeXBlPiBSVHlwZTsKdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OmludDY0X3Q+IEV4VHlwZTsKCi8vaHR0cDovL20uLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmgubmV0L3Rlc3QvcmVhZC5jZ2kvdGVjaC8xNTE0NzcyOTA0LzQxIGdldCBsaWNlbnNlLml0IGlzIEdQTCB2My4KCnN0ZDo6c2l6ZV90IEZpbmREaWdpdChjb25zdCBzdGQ6OnN0cmluZyYgUyxzdGQ6OnNpemVfdCBGKSB7Cglmb3IgKHN0ZDo6c2l6ZV90IGkgPSBGOyBpIDwgUy5zaXplKCk7IGkrKykgewoJCWlmIChzdGQ6OmlzZGlnaXQoU1tpXSkpIHsKCQkJcmV0dXJuIGk7CgkJfQoJCWlmIChTW2ldID09ICcsJykgewoJCQlyZXR1cm4gaTsKCQl9Cgl9CglyZXR1cm4gUy5ucG9zOwp9CgpzdGQ6OnN0cmluZyBDb25zdW1lRGlnaXQoY29uc3Qgc3RkOjpzdHJpbmcmIHMpewoJc3RkOjpzaXplX3QgaSA9IDA7Cglmb3IgKGkgPSAwOyBpIDwgcy5zaXplKCk7IGkrKykgewoJCWlmICghc3RkOjppc2RpZ2l0KHNbaV0pJiZzW2ldIT0nLCcpYnJlYWs7Cgl9CglyZXR1cm4gcy5zdWJzdHIoaSwgcy5zaXplKCkgLSBpKTsKfQoKc3RkOjpzdHJpbmcgUmVwbGFjZShzdGQ6OnN0cmluZyYgcyxjaGFyIGZyb20sY2hhciBUbyl7CglzdGQ6OnNpemVfdCBwID0gMDsKCXdoaWxlICgocD1zLmZpbmQoZnJvbSwgMCkpICE9IHMubnBvcykgewoJCXMgPSBzLnJlcGxhY2UocCwgMSwgc3RkOjpzdHJpbmd7IFRvIH0pOwoJfQoKCXJldHVybiBzOwp9CgoKUlR5cGUgTWFrZUhvZ2Uoc3RkOjpzdHJpbmcgcykgewoJc3RkOjpzaXplX3QgcD0wOwoJc3RkOjpzaXplX3QgbCA9IDA7CglzdGQ6OmludDY0X3QgRiA9IDA7CglzdGQ6OmludDY0X3QgRSA9IDA7Cglib29sIEYxID0gZmFsc2U7Cglib29sIEYyID0gZmFsc2U7CglSVHlwZSBSOwoJcyA9IFJlcGxhY2UocywgJy0nLCAnKicpOy8vKuOBr+mBqeW9kwoJd2hpbGUocy5zaXplKCkhPTApIHsKCQlwID0gMDsKCQlpZiAoc1swXSA9PSAnLCcpcCsrOwoJCWwgPSBzLmZpbmRfZmlyc3Rfb2YoIiwiLCBwKTsKCQlpZiAobCA9PSBzLm5wb3MpbCA9IHMuc2l6ZSgpOwoJCXN0ZDo6c3RyaW5nIHQgPSBzLnN1YnN0cihwLCBsKTsKCQlzID0gcy5zdWJzdHIobCwgcy5zaXplKCkgLSBsKTsKCQl0ICs9ICcsJzsKCQoJCUYxID0gZmFsc2U7CgkJRjIgPSBmYWxzZTsKCQl3aGlsZSAoKHAgPSBGaW5kRGlnaXQodCwgMCkpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CgkJCWlmICh0W3BdICE9ICcsJykgewoKCQkJCXQgPSB0LnN1YnN0cihwLCB0LnNpemUoKSAtIHApOwoJCQkJc3RkOjpzdHJpbmdzdHJlYW0gc3M7CgkJCQlzcyA8PCB0OwoKCQkJCWlmIChGMSA9PSBmYWxzZSkgewoJCQkJCXNzID4+IEY7CgkJCQkJRjEgPSB0cnVlOwoJCQkJCUYyID0gdHJ1ZTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXNzID4+IEU7CgkJCQkJRjEgPSBmYWxzZTsKCQkJCX0KCQkJfQkKCQkJdCA9IENvbnN1bWVEaWdpdCh0KTsKCQl9CgkJaWYgKEYyKSB7CgkJCWlmIChGMSA9PSB0cnVlKSBFID0gRjsKCQkJaWYgKEUgPCBGKXN0ZDo6c3dhcChGLCBFKTsKCQkJUi5wdXNoX2JhY2soeyBGLEUgfSk7CgkJfQoJfQoKCXJldHVybiBSOwp9CgpzdGQ6OnZlY3RvcjxzdGQ6OmludDY0X3Q+IEV4QW5rYShjb25zdCBSVHlwZSYgUixzdGQ6OmludDY0X3QgRixzdGQ6OmludDY0X3QgRSkgewoJc3RkOjp2ZWN0b3I8c3RkOjppbnQ2NF90PiB2OwoJZm9yIChhdXRvIG8gOiBSKSB7CgkJZm9yIChzdGQ6OmludDY0X3QgaSA9IHN0ZDo6Z2V0PDA+KG8pOyBpIDw9IHN0ZDo6Z2V0PDE+KG8pOyBpKyspIHsKCQkJaWYgKGkgPD0gRiljb250aW51ZTsKCQkJaWYgKGkgPiBFKWNvbnRpbnVlOwoJCQl2LnB1c2hfYmFjayhpKTsKCQl9Cgl9CglzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpKTsKCXYuZXJhc2Uoc3RkOjp1bmlxdWUodi5iZWdpbigpLCB2LmVuZCgpKSwgdi5lbmQoKSk7CgoJcmV0dXJuIHY7Cn0KCmJvb2wgc2hvdyhjb25zdCBSVHlwZSYgUikgewoJZm9yIChhdXRvIG8gOiBFeEFua2EoUiwwLDEwMDAwMCkpIHsKCQkKCQlzdGQ6OmNvdXQgPDwgbyA8PCAnLCc7Cgl9CgoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCXJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpCnsKCVJUeXBlIFI7CgoJUj1NYWtlSG9nZSgiPj4xIik7CglzaG93KFIpOwoJUj1NYWtlSG9nZSgiPj4xLTMiKTsKCXNob3coUik7CglSPU1ha2VIb2dlKCI+PjEsMyIpOwoJc2hvdyhSKTsKCVI9TWFrZUhvZ2UoIj4+MS0zLDUsOS0xMCIpOwoJc2hvdyhSKTsKCVI9TWFrZUhvZ2UoIj4+MDAwMDAwLTAwMDAwMDAwMSIpOy8vOOmAsuaVsOOBq+OBquOCi+OBi+OCguOBl+OCjOOCk+OAggoJc2hvdyhSKTsKCVI9TWFrZUhvZ2UoIj4+Mjg5NDk0Iik7CglzaG93KFIpOwoJUj1NYWtlSG9nZSgiPj4zLDAtMyw0LDUsNiw0LDItOCIpOwoJc2hvdyhSKTsKICAgIHJldHVybiAwOwp9Cgo=
1,
1,2,3,
1,3,
1,2,3,5,9,10,
1,
1,2,3,4,5,6,7,8,