aboutsummaryrefslogtreecommitdiff
path: root/challenge-106
diff options
context:
space:
mode:
authorGuillermo Ramos <gramos@gramos.me>2021-03-31 00:04:26 +0200
committerGuillermo Ramos <gramos@gramos.me>2021-03-31 00:04:26 +0200
commitb680e5bcef16416d5bd6de874efcd5a3987fe1b9 (patch)
tree604536d4c512a147ca8240210a50b406acd3adbd /challenge-106
parent0beed338bde9c2ee3c13c79878d4225103c346e8 (diff)
downloadperlweeklychallenge-club-b680e5bcef16416d5bd6de874efcd5a3987fe1b9.tar.gz
perlweeklychallenge-club-b680e5bcef16416d5bd6de874efcd5a3987fe1b9.tar.bz2
perlweeklychallenge-club-b680e5bcef16416d5bd6de874efcd5a3987fe1b9.zip
Challenge 106 (Go)
Maximum Gap + Decimal String
Diffstat (limited to 'challenge-106')
-rw-r--r--challenge-106/guillermo-ramos/go/ch-1.go29
-rw-r--r--challenge-106/guillermo-ramos/go/ch-2.go76
2 files changed, 105 insertions, 0 deletions
diff --git a/challenge-106/guillermo-ramos/go/ch-1.go b/challenge-106/guillermo-ramos/go/ch-1.go
new file mode 100644
index 0000000000..bb9ee58e9d
--- /dev/null
+++ b/challenge-106/guillermo-ramos/go/ch-1.go
@@ -0,0 +1,29 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "sort"
+ "strconv"
+)
+
+func main() {
+ numbers := make(sort.IntSlice, 0, len(os.Args)-1)
+ for _, v := range os.Args[1:] {
+ n, err := strconv.Atoi(v)
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ numbers = append(numbers, n)
+ }
+ sort.Sort(numbers)
+ var maxGap int
+ for i := 0; i < len(numbers)-1; i++ {
+ diff := numbers[i+1] - numbers[i]
+ if diff > maxGap {
+ maxGap = diff
+ }
+ }
+ fmt.Println(maxGap)
+}
diff --git a/challenge-106/guillermo-ramos/go/ch-2.go b/challenge-106/guillermo-ramos/go/ch-2.go
new file mode 100644
index 0000000000..4450841303
--- /dev/null
+++ b/challenge-106/guillermo-ramos/go/ch-2.go
@@ -0,0 +1,76 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "strconv"
+)
+
+func getIntArg(i int) int {
+ if i >= len(os.Args) {
+ fmt.Println("Not enough arguments")
+ os.Exit(1)
+ }
+ v, err := strconv.Atoi(os.Args[i])
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ return v
+}
+
+type PerioDec struct {
+ digits []int
+ periodicIdx int
+}
+
+func (d PerioDec) String() (s string) {
+ for i, v := range d.digits {
+ if i == 1 {
+ s = fmt.Sprint(s, ".")
+ }
+ if i == d.periodicIdx {
+ s = fmt.Sprint(s, "(")
+ }
+ s = fmt.Sprint(s, strconv.Itoa(v))
+ }
+ if d.periodicIdx != -1 {
+ s = fmt.Sprint(s, ")")
+ }
+ return
+}
+
+func main() {
+ n := getIntArg(1)
+ d := getIntArg(2)
+
+ dec := PerioDec{periodicIdx: -1}
+ numeratorIdxs := make(map[int]int)
+
+ maxDecimals := 20
+ for i := 0; i <= maxDecimals; i++ {
+ if idx, ok := numeratorIdxs[n]; ok && idx > 0 {
+ dec.periodicIdx = idx
+ break
+ }
+
+ q := 0
+ r := n
+ for r >= d {
+ r = r - d
+ q++
+ }
+
+ numeratorIdxs[n] = i
+ dec.digits = append(dec.digits, q)
+
+ n = r * 10
+
+ if r == 0 {
+ break
+ }
+
+ }
+
+ fmt.Println(dec)
+}