aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2015/20/.gitignore1
-rw-r--r--2015/20/Makefile12
-rw-r--r--2015/20/input1
-rw-r--r--2015/20/puzzles.go58
4 files changed, 72 insertions, 0 deletions
diff --git a/2015/20/.gitignore b/2015/20/.gitignore
new file mode 100644
index 0000000..60d075d
--- /dev/null
+++ b/2015/20/.gitignore
@@ -0,0 +1 @@
+puzzle-[12]
diff --git a/2015/20/Makefile b/2015/20/Makefile
new file mode 100644
index 0000000..8d1d1fa
--- /dev/null
+++ b/2015/20/Makefile
@@ -0,0 +1,12 @@
+all:
+ sed '/START PART 2/,/END PART 2/d' puzzles.go >tmp1.go
+ sed '/START PART 1/,/END PART 1/d' puzzles.go >tmp2.go
+ go build tmp1.go
+ go build tmp2.go
+ mv tmp1 puzzle-1
+ mv tmp2 puzzle-2
+ rm -f tmp[12].go
+
+.PHONY: clean
+clean:
+ rm -f puzzle-[12]
diff --git a/2015/20/input b/2015/20/input
new file mode 100644
index 0000000..282bc62
--- /dev/null
+++ b/2015/20/input
@@ -0,0 +1 @@
+33100000
diff --git a/2015/20/puzzles.go b/2015/20/puzzles.go
new file mode 100644
index 0000000..5f2d37f
--- /dev/null
+++ b/2015/20/puzzles.go
@@ -0,0 +1,58 @@
+package main
+
+import (
+ "fmt"
+ "math"
+ "os"
+)
+
+func calc(n int) int {
+ acc := 0
+ s := math.Sqrt(float64(n))
+
+ if s == math.Trunc(s) {
+ acc += int(s)
+ } else {
+ s = math.Ceil(s)
+ }
+
+ for i := 1; i < int(s); i++ {
+ if n % i == 0 {
+ /* START PART 2 */
+ ndi := n / i
+ if ndi <= 50 {
+ acc += i + ndi
+ } else if i <= 50 {
+ acc += ndi
+ }
+ /* END PART 2 START PART 1 */
+ acc += i + n / i
+ /* END PART 1 */
+ }
+ }
+
+ return acc
+}
+
+func main() {
+ file, err := os.Open("input")
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%s: %s\n", os.Args[0], err)
+ os.Exit(1)
+ }
+
+ var n int
+ fmt.Fscanf(file, "%d", &n)
+ /* START PART 2 */
+ sn := n / 11
+ /* END PART 2 START PART 1 */
+ sn := n / 10
+ /* END PART 1 */
+
+ for i := 1; i <= n; i++ {
+ if calc(i) >= sn {
+ fmt.Println(i)
+ break
+ }
+ }
+}