Skip to content

Commit 52ddccc

Browse files
committed
feat(2020-18/angch): Fancy goroutines
1 parent 995ce61 commit 52ddccc

1 file changed

Lines changed: 52 additions & 50 deletions

File tree

2020-18/angch/main.go

Lines changed: 52 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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\tGoroutine #2")
272+
for v := range tokbuffer {
273+
log.Println("\t\t\t\teval:", 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\teval:", 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

Comments
 (0)