#include <iostream>
#include <fstream>
unsigned int SLOC(std::fstream *inFile);
int main()
{
std::fstream filestream ("input.txt", std::fstream::in | std::fstream::out);
if(filestream.is_open()){
std::cout << SLOC(&filestream) << '\n';
}
filestream.close();
return 0;
}
unsigned int SLOC( std::fstream *inFile)
{
unsigned loc = 0;
bool singleLineComment = false;
bool multiLineComment = false;
unsigned int stringLen = 0;
char c;
do{
inFile->get(c);
if(c == '/' && ( inFile->peek() == '/' || inFile->peek() == '*') && !multiLineComment){
if(inFile->peek() == '/'){
singleLineComment = true;
//inFile->get(c);
}
else if(inFile->peek() == '*'){
multiLineComment = true;
//inFile->get(c);
}
}
else{
if(multiLineComment){
if(c == '*' && inFile->peek() == '/'){
inFile->get(c);
multiLineComment = false;
}
}
else if (singleLineComment){
if(c == '\n')
singleLineComment = false;
}
else{
if(c !=' ' && c != '\n' && c != ';')
++stringLen;
else if(c == ';' && stringLen){
++loc;
stringLen = 0;
}
}
}
}while(!inFile->eof());
return loc;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnVuc2lnbmVkIGludCBTTE9DKHN0ZDo6ZnN0cmVhbSAqaW5GaWxlKTsKCmludCBtYWluKCkKewogICAgc3RkOjpmc3RyZWFtIGZpbGVzdHJlYW0gKCJpbnB1dC50eHQiLCBzdGQ6OmZzdHJlYW06OmluIHwgc3RkOjpmc3RyZWFtOjpvdXQpOwogICAgaWYoZmlsZXN0cmVhbS5pc19vcGVuKCkpewogICAgICAgIHN0ZDo6Y291dCA8PCBTTE9DKCZmaWxlc3RyZWFtKSA8PCAnXG4nOwogICAgfQoKICAgIGZpbGVzdHJlYW0uY2xvc2UoKTsKCiAgICByZXR1cm4gMDsKfQoKdW5zaWduZWQgaW50IFNMT0MoIHN0ZDo6ZnN0cmVhbSAqaW5GaWxlKQp7CiAgICB1bnNpZ25lZCBsb2MgPSAwOwogICAgYm9vbCBzaW5nbGVMaW5lQ29tbWVudCA9IGZhbHNlOwogICAgYm9vbCBtdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CiAgICB1bnNpZ25lZCBpbnQgc3RyaW5nTGVuID0gMDsKICAgIGNoYXIgYzsKCiAgICBkb3sKICAgICAgICBpbkZpbGUtPmdldChjKTsKCiAgICAgICAgaWYoYyA9PSAnLycgJiYgKCBpbkZpbGUtPnBlZWsoKSA9PSAnLycgfHwgaW5GaWxlLT5wZWVrKCkgPT0gJyonKSAmJiAhbXVsdGlMaW5lQ29tbWVudCl7CiAgICAgICAgICAgIGlmKGluRmlsZS0+cGVlaygpID09ICcvJyl7CiAgICAgICAgICAgICAgICBzaW5nbGVMaW5lQ29tbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAvL2luRmlsZS0+Z2V0KGMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoaW5GaWxlLT5wZWVrKCkgPT0gJyonKXsKICAgICAgICAgICAgICAgIG11bHRpTGluZUNvbW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgLy9pbkZpbGUtPmdldChjKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZihtdWx0aUxpbmVDb21tZW50KXsKICAgICAgICAgICAgICAgIGlmKGMgPT0gJyonICYmIGluRmlsZS0+cGVlaygpID09ICcvJyl7CiAgICAgICAgICAgICAgICAgICAgaW5GaWxlLT5nZXQoYyk7CiAgICAgICAgICAgICAgICAgICAgbXVsdGlMaW5lQ29tbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHNpbmdsZUxpbmVDb21tZW50KXsKICAgICAgICAgICAgICAgIGlmKGMgPT0gJ1xuJykKICAgICAgICAgICAgICAgICAgICBzaW5nbGVMaW5lQ29tbWVudCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBpZihjICE9JyAnICYmIGMgIT0gJ1xuJyAmJiBjICE9ICc7JykKICAgICAgICAgICAgICAgICAgICArK3N0cmluZ0xlbjsKICAgICAgICAgICAgICAgIGVsc2UgaWYoYyA9PSAnOycgJiYgc3RyaW5nTGVuKXsKICAgICAgICAgICAgICAgICAgICArK2xvYzsKICAgICAgICAgICAgICAgICAgICBzdHJpbmdMZW4gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCgogICAgfXdoaWxlKCFpbkZpbGUtPmVvZigpKTsKCiAgICByZXR1cm4gbG9jOwp9Cg==