@@ -6,7 +6,7 @@ import kotlin.math.*
66fun arithmetics (heap : Heap , expression : String ): Pair <String , Int > {
77 val exp = expression.replace(" \\ s" .toRegex(), " " )
88 if (exp.isEmpty()) {
9- return Pair (" Empty input " , 0 )
9+ return Pair (emptyInput() , 0 )
1010 }
1111 val (prepared, expStatus) = preparingExpression(heap, exp)
1212 val (correctLine, lineStatus) = lineCheck(exp)
@@ -78,7 +78,7 @@ fun rpnToAnswer(rpn: String): Pair<String, Int> {
7878 try {
7979 stack.push(operand.toInt())
8080 } catch (e: NumberFormatException ) {
81- return Pair (" Unexpected symbol $ operand" , 0 )
81+ return Pair (unexpectedSymbol( operand) , 0 )
8282 }
8383 operand = String ()
8484 }
@@ -91,7 +91,7 @@ fun rpnToAnswer(rpn: String): Pair<String, Int> {
9191 ' ^' -> {
9292 val result = b.toDouble().pow(a).toLong()
9393 if (result>= 2147483647 ){
94- return Pair (" Memory limit " , 0 )
94+ return Pair (memoryLimit() , 0 )
9595 }
9696 stack.push(result.toInt())
9797 }
@@ -100,10 +100,10 @@ fun rpnToAnswer(rpn: String): Pair<String, Int> {
100100 val result = b.toDouble().pow(step).toLong()
101101
102102 if (b< 0 ){
103- return Pair (" Root of a negative number " , 0 )
103+ return Pair (negativeRoot(), 0 )
104104 }
105105 if (result>= 2147483647 ){
106- return Pair (" Memory limit " , 0 )
106+ return Pair (memoryLimit() , 0 )
107107 }
108108 stack.push(result.toInt())
109109 }
@@ -114,145 +114,140 @@ fun rpnToAnswer(rpn: String): Pair<String, Int> {
114114 try {
115115 stack.push(b / a)
116116 } catch (e: Exception ) {
117- return Pair (" Division by zero " , 0 )
117+ return Pair (zeroDivision() , 0 )
118118 }
119119 }
120120 ' %' -> {
121121 try {
122122 stack.push(b % a)
123123 } catch (e: Exception ){
124- return Pair (" Division by zero " , 0 )
124+ return Pair (zeroDivision() , 0 )
125125 }
126126 }
127127 else -> {
128- return Pair (" Unexpected symbol ${ rpn[i]} " , 0 )
128+ return Pair (unexpectedSymbol( rpn[i].toString()) , 0 )
129129 }
130130 }
131131 } catch (e: EmptyStackException ) {
132- return Pair (" Incorrect expression " , 0 )
132+ return Pair (incorrectExpression() , 0 )
133133 }
134134 }
135135 i++
136136 }
137- return Pair (" OK " , stack.pop())
137+ return Pair (ok() , stack.pop())
138138}
139139
140140fun lineCheck (string : String ): Pair <String , Int > {
141141 var str = string.replace(" [A-Za-z-+*/0-9()%_^#\\ [\\ ]]" .toRegex(), " " )
142142 if (str.isNotEmpty()) {
143- return Pair (" Unexpected Symbol " , 0 )
143+ return Pair (unexpectedSymbol(str) , 0 )
144144 }
145- val reg = " ([-+%#^ ]+[0-9_]+[A_Za -z_]+[0-9]*[-+%*#^ ]*)|(\\ b[0-9_]+[A-Za-z_]+[0-9]*)|(\\ b[_][0-9]+)" .toRegex()
146- if (reg.find(string)!= null ){
147- return Pair (" Incorrect Expression " , 0 )
145+ val reg = " ([-+%#^ ]+[0-9_]+[A-Za -z_]+[0-9]*[-+%*#^ ]*)|(\\ b[0-9_]+[A-Za-z_]+[0-9]*)|(\\ b[_][0-9]+)" .toRegex()
146+ if (reg.find(string)!= null ) {
147+ return Pair (incorrectExpression(), 0 )
148148 }
149- str= string.replace(" [A-Za-z-+*/0-9%^#_\\ [\\ ]]" .toRegex(), " " )
150- val scob1 = str.replace(" \\ (" .toRegex(), " " )
151- val scob2 = str.replace(" \\ )" .toRegex(), " " )
152- if (scob1 .length!= scob2 .length) {
153- return Pair (" Incorrect Expression " , 0 )
149+ str = string.replace(" [A-Za-z-+*/0-9%^#_\\ [\\ ]]" .toRegex(), " " )
150+ val bracket1 = str.replace(" \\ (" .toRegex(), " " )
151+ val bracket2 = str.replace(" \\ )" .toRegex(), " " )
152+ if (bracket1 .length != bracket2 .length) {
153+ return Pair (incorrectExpression() , 0 )
154154 }
155- return Pair (" OK " , 1 )
155+ return Pair (ok() , 1 )
156156}
157157
158158fun preparingExpression (heap : Heap , expression : String ): Pair <String , Int > {
159159 var exp = expression
160160 var preparedExpression = String ()
161- val regArr= " ([A-Za-z]+[A-Za-z0-9_]*)\\ [[A-Za-z0-9 +%*/_#^-]*]" .toRegex();
162- var array = regArr.find(exp);
161+ val regArr= " ([A-Za-z]+[A-Za-z0-9_]*)\\ [[A-Za-z0-9 +%*/_#^-]*]" .toRegex()
162+ var array = regArr.find(exp)
163163 while (array!= null ) {
164164 val (arrName, arrIndex) = indexCount(heap, array.value)
165165 if (arrIndex== - 1 ){
166166 return Pair (arrName, 0 )
167167 }
168168 if (! heap.isArrayExist(arrName)) {
169- return Pair (" Undefined array $ arrName" , 0 )
169+ return Pair (undefinedArray( arrName) , 0 )
170170 }
171- val arrValue = heap.getArrayValue(arrName, arrIndex);
172- var fromArrToNum = arrValue.toString()
173- if (arrValue!! .toInt()< 0 ) {
174- fromArrToNum= " ( " + fromArrToNum+ " )"
171+ val arrValue = heap.getArrayValue(arrName, arrIndex)
172+ var fromArrToNum = arrValue.toString()
173+ if (arrValue!! .toInt() < 0 ) {
174+ fromArrToNum = " ( $ fromArrToNum )"
175175 }
176176 exp = exp.replace(array.value, fromArrToNum)
177177 array = regArr.find(exp)
178178 }
179- val reg= " [A-Za-z]+[A-Za-z0-9_]*" .toRegex();
180- var varieble = reg.find(exp);
181- while (varieble!= null ) {
182- val VV = varieble.value;
183- if (! heap.isVariableExist(varieble.value)) {
184- return Pair (" Undefined varieble $VV " , 0 )
179+ val reg= " [A-Za-z]+[A-Za-z0-9_]*" .toRegex()
180+ var variable = reg.find(exp)
181+ while (variable!= null ) {
182+ if (! heap.isVariableExist(variable.value)) {
183+ return Pair (undefinedVariable(variable.value), 0 )
185184 }
186- val varValue= heap.getVariableValue(varieble .value)
187- var fromVarToNum = varValue.toString()
188- if (varValue!! .toInt()< 0 ) {
189- fromVarToNum= " ( " + fromVarToNum+ " )"
185+ val varValue = heap.getVariableValue(variable .value)
186+ var fromVarToNum = varValue.toString()
187+ if (varValue!! .toInt() < 0 ) {
188+ fromVarToNum= " ( $ fromVarToNum )"
190189 }
191- exp = exp.replaceRange(varieble .range, fromVarToNum)
192- varieble = reg.find(exp)
190+ exp = exp.replaceRange(variable .range, fromVarToNum)
191+ variable = reg.find(exp)
193192 }
194193
195194 for (j in exp.indices) {
196195 if (exp[j] == ' -' ) {
197- if (j == 0 ) {
198- preparedExpression + = " 0"
199- } else if (exp[j - 1 ] == ' (' ) {
196+ if ((j == 0 ) || (exp[j - 1 ] == ' (' )) {
200197 preparedExpression + = " 0"
201198 }
202199 }
203200 preparedExpression + = exp[j]
204201 }
205202 return Pair (preparedExpression, 1 )
206203}
204+
207205fun defineInput (heap : Heap , expression : String ):Triple <String ,String , Int >{
208- val arr= " [A-Za-z]+[\\ [(\\ d+_*^#)\\ ]]" .toRegex();
209- val varieble = " [A-Za-z]+[A-Za-z0-9_]*" .toRegex();
206+ val arr= " [A-Za-z]+[\\ [(\\ d+_*^#)\\ ]]" .toRegex()
207+ val variable = " [A-Za-z]+[A-Za-z0-9_]*" .toRegex()
210208
211- if (arr.find(expression)!= null ){
212- val (name, index)= indexCount(heap,expression);
213- if (index== - 1 ){
214- return Triple (name, " NaN " , 0 );
209+ if (arr.find(expression)!= null ){
210+ val (name, index) = indexCount(heap,expression)
211+ if (index == - 1 ) {
212+ return Triple (name, tagNaN() , 0 )
215213 }
216214 if (heap.isArrayExist(name) && index>= 0 && index< heap.getArraySize(name)!! .toInt()) {
217- return Triple (" Array " , name, index);
215+ return Triple (tagArray() , name, index)
218216 }
219217 }
220- if (varieble .find(expression)!= null ){
218+ if (variable .find(expression)!= null ){
221219 if (heap.isVariableExist(expression)) {
222- return Triple (" Variable " , expression, 0 );
220+ return Triple (tagVariable() , expression, 0 )
223221 }
224222 }
225- return Triple (" InputError " , " NaN " ,0 );
223+ return Triple (inputError(), tagNaN() ,0 )
226224}
225+
227226fun indexCount (heap : Heap , arr : String ):Pair <String ,Int >{
228- var array: String = arr;
229- var index= - 1 ;
230- var arrname = " " ;
231- val reg= " ([A-Za-z]+[A-Za-z0-9_]*)\\ [[A-Za-z0-9 +*/%_^#-]*]" .toRegex();
232- while (reg.find(array)!= null ){
233- val arg= " \\ [[A-Za-z0-9 +*/_%^#-]*]" .toRegex().find(array);
234- arrname = " [A-Za-z]+[A-Za-z0-9_]*" .toRegex().find(reg.find(array)!! .value)!! .value;
227+ var array = arr
228+ var index = - 1
229+ var arrayName = " "
230+ val reg = " ([A-Za-z]+[A-Za-z0-9_]*)\\ [[A-Za-z0-9 +*/%_^#-]*]" .toRegex()
231+ while (reg.find(array) != null ) {
232+ val arg = " \\ [[A-Za-z0-9 +*/_%^#-]*]" .toRegex().find(array)
233+ arrayName = " [A-Za-z]+[A-Za-z0-9_]*" .toRegex().find(reg.find(array)!! .value)!! .value
235234 if (arg!= null ) {
236- var arm= arg.value.replace(" [" ," " );
237- arm= arm.replace(" ]" ," " );
238- var (status, rez) = arithmetics(heap, arm);
239- array= array.replace(arm,rez.toString());
240- index= rez;
241- println (index)
242- println (status)
243- if (! heap.isArrayExist(arrname)){
244- return Pair (" Unidentified array" , - 1 )
235+ val arm = arg.value.replace(" [" ," " ).replace(" ]" ," " )
236+ val (status, rez) = arithmetics(heap, arm)
237+ array = array.replace(arm,rez.toString())
238+ index = rez
239+ if (! heap.isArrayExist(arrayName)){
240+ return Pair (undefinedArray(arrayName), - 1 )
245241 }
246- if (index>= heap.getArraySize(arrname )!! .toInt() || index< 0 ){
247- return Pair (" Index out of range " , - 1 )
242+ if (index >= heap.getArraySize(arrayName )!! .toInt() || index< 0 ){
243+ return Pair (indexOutOfRange() , - 1 )
248244 }
249- if (status!= " OK " ){
250- return Pair (status,- 1 )
245+ if (status != ok() ){
246+ return Pair (status, - 1 )
251247 }
252- val arrayValue= heap.getArrayValue(arrname,rez);
253- array= array.replace(reg.find(array)!! .value, arrayValue.toString());
254-
248+ val arrayValue = heap.getArrayValue(arrayName, rez)
249+ array = array.replace(reg.find(array)!! .value, arrayValue.toString())
255250 }
256251 }
257- return Pair (arrname, index);
252+ return Pair (arrayName, index)
258253}
0 commit comments