aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyoungjin JEON <jeongoon@gmail.com>2020-10-18 19:32:27 +1100
committerMyoungjin JEON <jeongoon@gmail.com>2020-10-18 19:32:27 +1100
commit3614ede29665d34e1cdd8b0bb20894440bcbd5b1 (patch)
treeb42242fe664a0592233c0a2930b38e4ca51a44ce
parentd7ce8466b3044e9cc96d839cfde10cef88970510 (diff)
downloadperlweeklychallenge-club-3614ede29665d34e1cdd8b0bb20894440bcbd5b1.tar.gz
perlweeklychallenge-club-3614ede29665d34e1cdd8b0bb20894440bcbd5b1.tar.bz2
perlweeklychallenge-club-3614ede29665d34e1cdd8b0bb20894440bcbd5b1.zip
[ch-082/jeongoon] ch-2.go less depth, tried use another Interface
-rw-r--r--challenge-082/jeongoon/go/ch-2.go70
1 files changed, 35 insertions, 35 deletions
diff --git a/challenge-082/jeongoon/go/ch-2.go b/challenge-082/jeongoon/go/ch-2.go
index 10b66cf142..74fd4f4619 100644
--- a/challenge-082/jeongoon/go/ch-2.go
+++ b/challenge-082/jeongoon/go/ch-2.go
@@ -17,63 +17,63 @@ import (
"fmt"
)
-func isInterleaving (A string, B string, C string) bool {
+type MaybeIntereaved string
+
+func (C MaybeIntereaved) isInterleavingFrom (A string, B string) bool {
Alen, Blen, Clen := len(A), len(B), len(C)
if Alen + Blen != Clen {
return false
}
- Apin, Bpin := -1, -1
+ Apin, Bpin := -1, -1 // if * >= 0, we have plan B
checkpingPlanB := false
for Ai, Bi, Ci := 0, 0, 0 ;; Ci = Ai + Bi {
if checkpingPlanB {
- if Bpin > 0 {
+ if Bpin > -1 {
// note: it was A[Ai] == B[Bi] == C[Ci]
// and tried A already.
Bi = Bpin + 1
Ai = Apin
Apin, Bpin = -1, -1
checkpingPlanB = false
+ Ci = Ai + Bi
} else {
// there is no plan B ...
return false
+
}
- continue
- } else {
- if Ci == Clen {
+ }
+
+ if Ci == Clen {
+ return true
+ }
+ if Ai == Alen {
+ if B[Bi:] == string(C[Ci:]) {
return true
+ } else {
+ checkpingPlanB = true
+ continue
}
- if Ai == Alen {
- if B[Bi:] == C[Ci:] {
- return true
- } else {
- checkpingPlanB = true
- continue
- }
- } else if Bi == Blen {
- return A[Ai:] == C[Ci:]
+ } else if Bi == Blen {
+ return A[Ai:] == string(C[Ci:])
+ }
+ if A[Ai] == B[Bi] {
+ if A[Ai] != C[Ci] {
+ checkpingPlanB = true
+ } else {
+ // remember this node
+ Apin, Bpin = Ai, Bi
+ // try plan A first
+ Ai++
}
-
- if A[Ai] == B[Bi] {
-
- if A[Ai] != C[Ci] {
- checkpingPlanB = true
- } else {
- // remember this node
- Apin, Bpin = Ai, Bi
- // try plan A first
- Ai++
- }
+ } else {
+ if A[Ai] == C[Ci] {
+ Ai++
+ } else if B[Bi] == C[Ci] {
+ Bi++
} else {
-
- if A[Ai] == C[Ci] {
- Ai++
- } else if B[Bi] == C[Ci] {
- Bi++
- } else {
- checkpingPlanB = true
- }
+ checkpingPlanB = true
}
}
}
@@ -91,7 +91,7 @@ func main() {
}
A, B, C := os.Args[1], os.Args[2], os.Args[3]
- if isInterleaving(A, B, C) {
+ if MaybeIntereaved(C).isInterleavingFrom(A, B) {
fmt.Println( "1" )
} else {
fmt.Println( "0" )