diff options
| author | Michael Manring <michael@manring> | 2025-02-11 20:21:22 +1100 |
|---|---|---|
| committer | Michael Manring <michael@manring> | 2025-02-11 20:25:44 +1100 |
| commit | c1c1323849a9659113f16d26f56d5548722de1e8 (patch) | |
| tree | 13b64de779e0f3e796aae3a7ba35d0aec8ff90c1 | |
| parent | 824dd6ce5ffa5e3545787712d213bbbf02639f47 (diff) | |
| download | perlweeklychallenge-club-c1c1323849a9659113f16d26f56d5548722de1e8.tar.gz perlweeklychallenge-club-c1c1323849a9659113f16d26f56d5548722de1e8.tar.bz2 perlweeklychallenge-club-c1c1323849a9659113f16d26f56d5548722de1e8.zip | |
pwc308 minor update on task#2
| -rw-r--r-- | challenge-308/pokgopun/go/ch-2.go | 40 | ||||
| -rw-r--r-- | challenge-308/pokgopun/python/ch-2.py | 41 |
2 files changed, 39 insertions, 42 deletions
diff --git a/challenge-308/pokgopun/go/ch-2.go b/challenge-308/pokgopun/go/ch-2.go index 12f0bba5ea..716421da88 100644 --- a/challenge-308/pokgopun/go/ch-2.go +++ b/challenge-308/pokgopun/go/ch-2.go @@ -58,29 +58,27 @@ func (in input) process() ints { org := make(ints, l+1) org[0] = in.init for i := range l { + dst, src := enc[i], org[i] + if dst == src { + continue + } + if dst > src { + dst, src = src, dst + } orgn := 0 - switch { - case enc[i] == org[i]: - case enc[i] == 0: - orgn = org[i] - case org[i] == 0: - orgn = enc[i] - default: - b := 1 - dst, src := enc[i], org[i] - if dst < src { - dst, src = src, dst - } - for dst > 0 { - o := dst%2 - src%2 - if o < 0 { - o = 1 - } - orgn += b * o - b *= 2 - dst /= 2 - src /= 2 + b := 1 + for dst > 0 { + o := dst%2 - src%2 + if o < 0 { + o = 1 } + orgn += b * o + b *= 2 + dst /= 2 + src /= 2 + } + if src > 0 { + orgn += b * src } org[i+1] = orgn } diff --git a/challenge-308/pokgopun/python/ch-2.py b/challenge-308/pokgopun/python/ch-2.py index 5be727177d..25d2716b60 100644 --- a/challenge-308/pokgopun/python/ch-2.py +++ b/challenge-308/pokgopun/python/ch-2.py @@ -37,27 +37,26 @@ SO WHAT DO YOU THINK ? ### solution by pokgopun@gmail.com def decodeXOR(enc: tuple[int], init: int) -> tuple[int]: - org = [init] - for i in range(len(enc)): - o = 0 - if enc[i] == org[i]: ### a ^ o = a --> o = 0 - pass - elif enc[i] == 0: ### a ^ o = 0 --> o = a - o = org[i] - elif org[i] == 0: ### 0 ^ o = a --> o = a - o = enc[i] - else: - #print(i) - dst, src = enc[i], org[i] - if dst < src: - dst, src = src, dst - b = 1 - while dst > 0: - o += b * abs(dst%2 - src%2) - b *= 2 - dst //= 2 - src //= 2 - org.append(o) + l = len(enc) + org = [0 for i in range(l+1)] + org[0] = init + for i in range(l): + dst, src = enc[i], org[i] + if dst == src: ### a ^ o = a --> o = 0 + continue + #print(i) + if dst > src: + dst, src = src, dst + orgn = 0 + b = 1 + while dst > 0: + orgn += b * abs(dst%2 - src%2) + b *= 2 + dst //= 2 + src //= 2 + if src > 0: + orgn += b * src + org[i+1] = orgn return tuple(org) import unittest |
