forked from BrondoL/Infix2Postfix_Evaluation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Solver.cpp
1 lines (1 loc) · 6.4 KB
/
Solver.cpp
1
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBzdGFja3sKCWRvdWJsZSBTdGFjS1sxMDAwMDBdOwoJY2hhciBTdGFja1sxMDAwMDBdOwoJaW50IHRvcDsKfTsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbnZlcnQKCmNsYXNzIENvbnZ7CnByaXZhdGU6CglzdGFjayB0dW1wdWs7CgpwdWJsaWM6Cgl2b2lkIGluaXQoKXsKCQl0dW1wdWsudG9wID0gLTE7Cgl9CgoJdm9pZCBwdXNoKGNoYXIgaW5wdXQpewoJCXR1bXB1ay50b3ArKzsKCQl0dW1wdWsuU3RhY2tbdHVtcHVrLnRvcF0gPSBpbnB1dDsKCX0KCgl2b2lkIHBvcCgpewoJCXR1bXB1ay50b3AtLTsKCX0KCgljaGFyIFRvcCgpewoJCXJldHVybiB0dW1wdWsuU3RhY2tbdHVtcHVrLnRvcF07Cgl9CgoJYm9vbCBpc0VtcHR5KCl7CgkJaWYodHVtcHVrLnRvcCA8PSAtMSkKCQkJcmV0dXJuIHRydWU7CgkJZWxzZQoJCQlyZXR1cm4gZmFsc2U7Cgl9Cn07IENvbnYgU0M7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFdmFsdWF0ZQoKY2xhc3MgRXZhbHsKcHJpdmF0ZToKCXN0YWNrIFR1bXB1azsKCnB1YmxpYzoKCXZvaWQgcHVzaChpbnQgaW5wdXQpewoJCVR1bXB1ay50b3ArKzsKCQlUdW1wdWsuU3RhY0tbVHVtcHVrLnRvcF0gPSBpbnB1dDsKCX0KCgl2b2lkIHBvcCgpewoJCVR1bXB1ay50b3AtLTsKCX0KCglpbnQgVG9wKCl7CgkJcmV0dXJuIFR1bXB1ay5TdGFjS1tUdW1wdWsudG9wXTsKCX0KfTsgRXZhbCBTRTsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbnZlcnQKCmJvb2wgaXNPcGVyYW5kKGNoYXIgaW5wdXQpOwpib29sIGlzT3BlcmF0b3IoY2hhciBpbnB1dCk7CmludCBnZXRsZXZlbChjaGFyIGlucHV0KTsKYm9vbCBwcmVjZWRlbmNlKGNoYXIgaW5wdXQxLCBjaGFyIGlucHV0Mik7CnN0cmluZyBJbmZpeHRvUG9zdGZpeChzdHJpbmcgaW5wdXQpOwoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRXZhbHVhdGUKCmRvdWJsZSBPcGVyYXRpb24oaW50IG9wMSwgY2hhciBjLCBpbnQgb3AyKTsKYm9vbCBPcGVyYW5kKGNoYXIgaW5wdXQpOwppbnQgRXZhbHVhdGUoc3RyaW5nIGlucHV0KTsKaW50IHBvdyhpbnQgbnVtYmVyLCBpbnQgZXhwKTsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE1haW4KCmludCBtYWluKCl7CgoJc3RyaW5nIFE7Cgljb3V0PDwiXHQgICBodHRwczovL2dpdGh1Yi5jb20vQnJvbmRvTC9JbmZpeDJQb3N0Zml4X0V2YWx1YXRpb24iPDxlbmRsOwoJY291dDw8Ilx0fHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXx8Ijw8ZW5kbDsKCWNvdXQ8PCJcdHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCI8PGVuZGw7Cgljb3V0PDwiXHR8fCAgICAgIERFVkVMT1BFRCBCWSBCcm9uZG9MIGFrYSBBdWxpYSBBaG1hZCBOYWJpbCAgICAgfHwiPDxlbmRsOwoJY291dDw8Ilx0fHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ijw8ZW5kbDsKCWNvdXQ8PCJcdHx8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18fCI8PGVuZGw8PGVuZGw7Cgljb3V0PDwiXHRcdFx0ICAgIElORklYIFRvIFBPU1RGSVgiPDxlbmRsPDxlbmRsOwoJY291dCA8PCAiRW50ZXIgSW5maXggRXhwcmVzc2lvbiBcbiI7Cgljb3V0IDw8IChjaGFyKTYyIDw8IChjaGFyKTYyIDw8ICIgIjsKCWdldGxpbmUoY2luLFEpOwoJc3RyaW5nIFAgPSBJbmZpeHRvUG9zdGZpeChRKTsKCWNvdXQgPDwgIlxuSW5maXggICAgPSAiIDw8IFE7Cgljb3V0IDw8ICJcblBvc3RmaXggID0gIiA8PCBQOwoJaW50IHJlc3VsdCA9IEV2YWx1YXRlKFApOwoJY291dCA8PCAiXG5FdmFsdWF0ZSA9ICIgPDwgcmVzdWx0OwoKCWNpbi5nZXQoKTsKCXJldHVybiAwOwp9CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb252ZXJ0Cgpib29sIGlzT3BlcmFuZChjaGFyIGlucHV0KXsKCWludCBjID0gKGludClpbnB1dDsKCWlmKGMgPj0gNDggJiYgYyA8PSA1NyB8fCBjID49IDY1ICYmIGMgPD0gOTAgfHwgYyA+PSA5NyAmJiBjIDw9IDEyMikKCQlyZXR1cm4gdHJ1ZTsKCWVsc2UKCQlyZXR1cm4gZmFsc2U7Cn0KCmJvb2wgaXNPcGVyYXRvcihjaGFyIGlucHV0KXsKCWludCBjID0gKGludClpbnB1dDsKCWlmKGMgPT0gOTQgfHwgYyA+PSA0MiAmJiBjIDw9IDQzIHx8IGMgPT0gNDUgfHwgYyA9PSA0NykKCQlyZXR1cm4gdHJ1ZTsKCWVsc2UKCQlyZXR1cm4gZmFsc2U7Cn0KCmludCBnZXRsZXZlbChjaGFyIGlucHV0KXsKCWlmKGlucHV0ID09ICdeJykKCQlyZXR1cm4gMzsKCWVsc2UgaWYoaW5wdXQgPT0gJyonIHx8IGlucHV0ID09ICcvJykKCQlyZXR1cm4gMjsKCWVsc2UgaWYoaW5wdXQgPT0gJysnIHx8IGlucHV0ID09ICctJykKCQlyZXR1cm4gMTsKCWVsc2UgaWYoaW5wdXQgPT0gJygnIHx8IGlucHV0ID09ICcpJykKCQlyZXR1cm4gMDsKCWVsc2UKCQlyZXR1cm4gLTE7Cn0KCmJvb2wgcHJlY2VkZW5jZShjaGFyIGlucHV0MSwgY2hhciBpbnB1dDIpewoJaW50IGMxID0gZ2V0bGV2ZWwoaW5wdXQxKTsKCWludCBjMiA9IGdldGxldmVsKGlucHV0Mik7CgoJaWYoYzEgPD0gYzIpCgkJcmV0dXJuIHRydWU7CgllbHNlCgkJcmV0dXJuIGZhbHNlOwp9CgpzdHJpbmcgSW5maXh0b1Bvc3RmaXgoc3RyaW5nIGlucHV0KXsKCVNDLmluaXQoKTsKCWludCBpPTA7CglzdHJpbmcgUCA9ICIiOwoJd2hpbGUoaW5wdXRbaV0gIT0gJ1wwJyl7CgkJaWYoaXNPcGVyYW5kKGlucHV0W2ldKSl7CgkJCVAgKz0gaW5wdXRbaV07CgkJfQoJCWlmKGlucHV0W2ldID09ICcoJyl7CgkJCVNDLnB1c2goaW5wdXRbaV0pOwoJCX0KCQlpZihpbnB1dFtpXSA9PSAnKScpewoJCQl3aGlsZSghU0MuaXNFbXB0eSgpICYmIFNDLlRvcCgpICE9ICcoJyl7CgkJCQlQID0gUCArICIgIiArIFNDLlRvcCgpOyBTQy5wb3AoKTsKCQkJfQoJCQlTQy5wb3AoKTsKCQl9CgkJaWYoaXNPcGVyYXRvcihpbnB1dFtpXSkpewoJCQlpZihTQy5pc0VtcHR5KCkgfHwgU0MuVG9wKCkgPT0gJygnKXsKCQkJCVNDLnB1c2goaW5wdXRbaV0pOwoJCQl9ZWxzZXsKCQkJCXdoaWxlKCFTQy5pc0VtcHR5KCkgJiYgU0MuVG9wKCkgIT0gJygnICYmIHByZWNlZGVuY2UoaW5wdXRbaV0sIFNDLlRvcCgpKSl7CgkJCQkJUCA9IFAgKyAiICIgKyBTQy5Ub3AoKTsgU0MucG9wKCk7CgkJCQl9CgkJCQlTQy5wdXNoKGlucHV0W2ldKTsKCQkJfQoJCX0KCQlpZihpc09wZXJhdG9yKGlucHV0W2ldKSkKCQkJUCArPSAiICI7CgkJaSsrOwoJfQoJd2hpbGUoIVNDLmlzRW1wdHkoKSl7CgkJUCA9IFAgKyAiICIgKyBTQy5Ub3AoKTsgU0MucG9wKCk7Cgl9CglyZXR1cm4gUDsKfQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRXZhbHVhdGUKCmludCBwb3coaW50IG51bWJlciwgaW50IGV4cCl7Cglmb3IoaW50IGk9MTsgaTxleHA7IGkrKykKCQludW1iZXIgKj0gbnVtYmVyOwoJcmV0dXJuIG51bWJlcjsKfQoKYm9vbCBPcGVyYW5kKGNoYXIgaW5wdXQpewoJaW50IGMgPSAoaW50KWlucHV0OwoJaWYoYyA+PSA0OCAmJiBjIDw9IDU3KQoJCXJldHVybiB0cnVlOwoJZWxzZSBpZihjID49IDY1ICYmIGMgPD0gOTAgfHwgYyA+PSA5NyAmJiBjIDw9IDEyMil7CgkJY291dCA8PCAiXG5Ob3QgRXZhbHVhdGVkIiA8PCBlbmRsOwoJCWNpbi5nZXQoKTsKCQlleGl0KDApOwoJfQoJZWxzZQoJCXJldHVybiBmYWxzZTsKfQoKZG91YmxlIE9wZXJhdGlvbihpbnQgb3AxLCBjaGFyIGMsIGludCBvcDIpewoJaWYoYyA9PSAnXicpCgkJcmV0dXJuIChwb3cob3AxLG9wMikpOwoJZWxzZSBpZihjID09ICcqJykKCQlyZXR1cm4gKG9wMSAqIG9wMik7CgllbHNlIGlmKGMgPT0gJy8nKQoJCXJldHVybiAob3AxIC8gb3AyKTsKCWVsc2UgaWYoYyA9PSAnKycpCgkJcmV0dXJuIChvcDEgKyBvcDIpOwoJZWxzZSBpZihjID09ICctJykKCQlyZXR1cm4gKG9wMSAtIG9wMik7CgllbHNlIHJldHVybiAwOwp9CgppbnQgRXZhbHVhdGUoc3RyaW5nIGlucHV0KXsKCWludCBpID0gMDsKCXdoaWxlKGlucHV0W2ldICE9ICdcMCcpewoJCWlmKE9wZXJhbmQoaW5wdXRbaV0pKXsKCQkJaW50IG9wZXJhbmQgPSAwOwoJCQl3aGlsZShpbnB1dFtpXSAhPSAnXDAnICYmIE9wZXJhbmQoaW5wdXRbaV0pKXsKCQkJCW9wZXJhbmQgPSAob3BlcmFuZCAqIDEwKSArIChpbnB1dFtpXSAtIDQ4KTsKCQkJCWkrKzsKCQkJfQoJCQlTRS5wdXNoKG9wZXJhbmQpOwoJCX0KCQlpZihpc09wZXJhdG9yKGlucHV0W2ldKSl7CgkJCWludCBBID0gU0UuVG9wKCk7IFNFLnBvcCgpOwoJCQlpbnQgQiA9IFNFLlRvcCgpOyBTRS5wb3AoKTsKCQkJaW50IHJlc3VsdCA9IE9wZXJhdGlvbihCLGlucHV0W2ldLEEpOwoJCQlTRS5wdXNoKHJlc3VsdCk7CgkJfQoJCWkrKzsKCX0KCXJldHVybiBTRS5Ub3AoKTsKfQo=