aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-166/pokgopun/go/ch-1.go51
-rw-r--r--challenge-166/pokgopun/go/ch-2.go114
2 files changed, 165 insertions, 0 deletions
diff --git a/challenge-166/pokgopun/go/ch-1.go b/challenge-166/pokgopun/go/ch-1.go
new file mode 100644
index 0000000000..fcae10b89f
--- /dev/null
+++ b/challenge-166/pokgopun/go/ch-1.go
@@ -0,0 +1,51 @@
+package main
+
+import (
+ "bufio"
+ "log"
+ "os"
+ "regexp"
+ "sort"
+ "strings"
+)
+
+func main() {
+ var ds struct {
+ wib string
+ wibs []string
+ }
+ //ds.wibs = make([][]byte, 40)
+ f, err := os.Open("../../../data/dictionary.txt")
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer f.Close()
+ scanner := bufio.NewScanner(f)
+ //scanner.Split(bufio.ScanWords)
+ re := regexp.MustCompile(`^[abcdefolist]{2,8}$`)
+ if err != nil {
+ log.Fatal(err)
+ }
+ for scanner.Scan() {
+ ds.wib = scanner.Text()
+ if re.MatchString(ds.wib) {
+ ds.wibs = append(ds.wibs, ds.wib)
+ }
+ }
+ re = regexp.MustCompile(`[abcdef]`)
+ sort.SliceStable(ds.wibs, func(i, j int) bool {
+ lenOddI := len(re.ReplaceAllString(ds.wibs[i], ""))
+ lenOddJ := len(re.ReplaceAllString(ds.wibs[j], ""))
+ if lenOddI == lenOddJ {
+ return len(ds.wibs[i]) > len(ds.wibs[j])
+ } else {
+ return lenOddI < lenOddJ
+ }
+ })
+ r := strings.NewReplacer("o", "0", "l", "1", "i", "1", "s", "5", "t", "7")
+ w := bufio.NewWriter(os.Stdout)
+ for _, v := range ds.wibs {
+ w.WriteString(v + " => 0x" + r.Replace(v) + "\n")
+ }
+ w.Flush()
+}
diff --git a/challenge-166/pokgopun/go/ch-2.go b/challenge-166/pokgopun/go/ch-2.go
new file mode 100644
index 0000000000..4e1d6809b5
--- /dev/null
+++ b/challenge-166/pokgopun/go/ch-2.go
@@ -0,0 +1,114 @@
+/*
+go run ch-2.go ../../../challenge-001 ../../../challenge-002 ../../../challenge-003
+../../../challenge-001|../../../challenge-002|../../../challenge-003|
+----------------------|----------------------|----------------------|
+abigail/ |abigail/ |abigail/ |
+adam-russell/ |adam-russell/ |adam-russell/ |
+ailbhe-tweedie/ |ailbhe-tweedie/ |ailbhe-tweedie/ |
+alex-daniel/ |alex-daniel/ |alex-daniel/ |
+alexander-karelas/ |alexander-karelas/ |alexander-karelas/ |
+alexander-pankoff/ |alexander-pankoff/ |alexander-pankoff/ |
+alexey-melezhik/ |alexey-melezhik/ |alexey-melezhik/ |
+andrezgz/ |andrezgz/ |andrezgz/ |
+antonio-gamiz/ |antonio-gamiz/ |antonio-gamiz/ |
+arne-sommer/ |arne-sommer/ |arne-sommer/ |
+arpad-toth/ |arpad-toth/ |arpad-toth/ |
+athanasius/ |athanasius/ |athanasius/ |
+aubrey-quarcoo/ |aubrey-quarcoo/ |aubrey-quarcoo/ |
+ | |bill-palmer/ |
+bob-kleemann/ |bob-kleemann/ |bob-kleemann/ |
+bob-lied/ |bob-lied/ |bob-lied/ |
+ | |cliveholloway/ |
+conor-hoekstra/ | | |
+daniel-mantovani/ |daniel-mantovani/ |daniel-mantovani/ |
+dave-cross/ |dave-cross/ |dave-cross/ |
+dave-jacoby/ |dave-jacoby/ |dave-jacoby/ |
+david-kayal/ |david-kayal/ |david-kayal/ |
+deadmarshal/ | | |
+*/
+package main
+
+import (
+ "fmt"
+ "log"
+ "os"
+ "sort"
+ "strings"
+ "text/tabwriter"
+)
+
+func main() {
+ if len(os.Args) == 1 {
+ os.Args = append(os.Args,
+ "../../../challenge-001",
+ "../../../challenge-002",
+ "../../../challenge-003",
+ "../../../challenge-012",
+ "../../../challenge-023",
+ "../../../challenge-123")
+ }
+ var ds struct {
+ dirNum int
+ name string
+ names []string
+ name2dir map[string]int
+ nameLen int
+ maxNameLen int
+ ok bool
+ }
+ ds.name2dir = map[string]int{}
+ ds.dirNum = len(os.Args) - 1
+ i := 1
+ for _, v := range os.Args[1:] {
+ ds.nameLen = len(v)
+ if ds.maxNameLen < ds.nameLen {
+ ds.maxNameLen = ds.nameLen
+ }
+ d, err := os.Open(v)
+ if err != nil {
+ log.Fatal(err)
+ }
+ c, err := d.ReadDir(-1)
+ if err != nil {
+ log.Fatal(err)
+ }
+ for _, v := range c {
+ ds.name = v.Name()
+ if v.IsDir() {
+ ds.name += "/"
+ }
+ _, ds.ok = ds.name2dir[ds.name]
+ if !ds.ok {
+ ds.names = append(ds.names, ds.name)
+ ds.nameLen = len(ds.name)
+ if ds.maxNameLen < ds.nameLen {
+ ds.maxNameLen = ds.nameLen
+ }
+ }
+ ds.name2dir[ds.name] += i
+ }
+ i *= 2
+ }
+ sort.Strings(ds.names)
+ w := tabwriter.NewWriter(os.Stdout, ds.maxNameLen, ds.maxNameLen, 0, ' ', tabwriter.Debug)
+ w.Write([]byte(strings.Join(os.Args[1:], "\t") + "\t\n"))
+ w.Flush()
+ w.Init(os.Stdout, ds.maxNameLen, ds.maxNameLen, 0, '-', tabwriter.Debug)
+ w.Write([]byte(strings.Repeat("\t", ds.dirNum) + "\n"))
+ w.Flush()
+ w.Init(os.Stdout, ds.maxNameLen, ds.maxNameLen, 0, ' ', tabwriter.Debug)
+ for _, v := range ds.names {
+ flag := []byte(fmt.Sprintf("%0[1]*[2]b", ds.dirNum, ds.name2dir[v]))
+ sort.SliceStable(flag, func(i, j int) bool {
+ return true
+ })
+ for _, b := range flag {
+ if b > 48 {
+ w.Write([]byte(v))
+ }
+ w.Write([]byte("\t"))
+ }
+ w.Write([]byte("\n"))
+ }
+ w.Flush()
+}