@@ -201,74 +201,76 @@ func do2(fileName string) (ret1 int, ret2 int) {
201201 l = strings .ReplaceAll (l , ")" , " ) " )
202202 l = strings .ReplaceAll (l , " " , " " )
203203 toks := strings .Split (l , " " )
204- num := 0
205204
206- tokbuffer := make ([]string , 0 )
207- opstack := make ([]string , 0 )
208- op := ""
205+ tokbuffer := make (chan string )
209206 log .Println ("Input:" , toks )
210- for _ , v := range toks {
211- if v == "" {
212- continue
213- }
214- if v == "(" {
215- opstack = append (opstack , v )
216- log .Println ("RPN:" , v , tokbuffer , opstack )
217- continue
218- }
219- if v == ")" {
220- for len (opstack ) > 0 {
221- top := opstack [len (opstack )- 1 ]
222- if top != "(" {
223- tokbuffer = append (tokbuffer , top )
224- opstack = opstack [:len (opstack )- 1 ]
225- } else if top == "(" {
226- opstack = opstack [:len (opstack )- 1 ]
227- break
207+ log .Println ("Goroutine #1" )
208+ go func () {
209+ opstack := make ([]string , 0 )
210+ for _ , v := range toks {
211+ if v == "" {
212+ continue
213+ }
214+ if v == "(" {
215+ opstack = append (opstack , v )
216+ log .Println ("RPN:" , v , opstack )
217+ continue
218+ }
219+ if v == ")" {
220+ for len (opstack ) > 0 {
221+ top := opstack [len (opstack )- 1 ]
222+ if top != "(" {
223+ // tokbuffer = append(tokbuffer, top)
224+ log .Println ("RPN: push" , top )
225+ tokbuffer <- top
226+ opstack = opstack [:len (opstack )- 1 ]
227+ } else if top == "(" {
228+ opstack = opstack [:len (opstack )- 1 ]
229+ break
230+ }
228231 }
232+ log .Println ("RPN:" , v , opstack )
233+ continue
229234 }
230- log .Println ("RPN:" , v , tokbuffer , opstack )
231- continue
232- }
233- if v == "+" || v == "-" || v == "*" {
234- if len (tokbuffer ) == 0 || tokbuffer [len (tokbuffer )- 1 ] == "(" {
235- tokbuffer = append (tokbuffer , v )
236- } else {
235+ if v == "+" || v == "-" || v == "*" {
237236 for len (opstack ) > 0 {
238237 top := opstack [len (opstack )- 1 ]
239238
240239 if (top == "-" || top == "+" ) && top != "(" {
241- tokbuffer = append (tokbuffer , top )
240+ // tokbuffer = append(tokbuffer, top)
241+ log .Println ("RPN: push" , top )
242+ tokbuffer <- top
242243 opstack = opstack [:len (opstack )- 1 ]
243244 continue
244245 }
245246
246247 break
247248 }
248249 opstack = append (opstack , v )
250+ // }
251+ log .Println ("RPN:" , v , opstack )
252+ continue
249253 }
250- log .Println ("RPN:" , v , tokbuffer , opstack )
251- continue
252- }
253254
254- tokbuffer = append (tokbuffer , v )
255- if op != "" {
256- tokbuffer = append (tokbuffer , op )
255+ // tokbuffer = append(tokbuffer, v)
256+ log .Println ("RPN: push" , v )
257+ tokbuffer <- v
258+ // log.Println("RPN:", v, tokbuffer, opstack)
257259 }
258- log .Println ("RPN:" , v , tokbuffer , opstack )
259- }
260-
261- for len (opstack ) > 0 {
262- top := opstack [len (opstack )- 1 ]
263- opstack = opstack [:len (opstack )- 1 ]
264- tokbuffer = append (tokbuffer , top )
265- }
266260
267- log .Println ("RPN:" , tokbuffer , opstack )
261+ for len (opstack ) > 0 {
262+ top := opstack [len (opstack )- 1 ]
263+ opstack = opstack [:len (opstack )- 1 ]
264+ tokbuffer <- top
265+ }
266+ log .Println ("RPN: Close channel" , opstack )
267+ close (tokbuffer )
268+ }()
268269
269270 stack := make ([]int , 0 )
270- for _ , v := range tokbuffer {
271- // log.Println("eval:", v, stack)
271+ log .Println ("\t \t \t \t Goroutine #2" )
272+ for v := range tokbuffer {
273+ log .Println ("\t \t \t \t eval:" , v , stack )
272274 if v == "*" || v == "+" || v == "-" {
273275 n1 := stack [len (stack )- 1 ]
274276 n2 := stack [len (stack )- 2 ]
@@ -283,17 +285,17 @@ func do2(fileName string) (ret1 int, ret2 int) {
283285 n3 := n1 * n2
284286 stack = append (stack , n3 )
285287 }
286- log .Println ("eval :" , v , stack )
288+ log .Println ("\t \t \t \t eval :" , v , stack )
287289 continue
288290 }
289291 num , err := strconv .Atoi (v )
290292 if err != nil {
291293 log .Fatal (err )
292294 }
293295 stack = append (stack , num )
294- log .Println ("eval:" , v , stack )
296+ // log.Println("eval:", v, stack)
295297 }
296- num = stack [0 ]
298+ num : = stack [0 ]
297299
298300 log .Println ("Result:" , num )
299301 sum += num
0 commit comments