initial commit
commit
7b54f3713e
@ -0,0 +1,62 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
// NICHT FÜR MULTITHREADING GEEIGNET :(
|
||||
|
||||
func main() {
|
||||
fmt.Printf("%d", findNumberByBouncyPercentage(0.99))
|
||||
|
||||
}
|
||||
|
||||
func returnDigit(num, place int) int {
|
||||
r := num % int(math.Pow(10, float64(place)))
|
||||
return r / int(math.Pow(10, float64(place-1)))
|
||||
}
|
||||
|
||||
func countDigits(num int) (count int) {
|
||||
for num != 0 {
|
||||
num /= 10
|
||||
count = count + 1
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func isBouncy(num int) bool {
|
||||
var isIncreasing = true
|
||||
var isDecreasing = true
|
||||
for i := countDigits(num); i > 1; i-- {
|
||||
if returnDigit(num, i) < returnDigit(num, i-1) {
|
||||
isDecreasing = false
|
||||
} else {
|
||||
if returnDigit(num, i) > returnDigit(num, i-1) {
|
||||
isIncreasing = false
|
||||
}
|
||||
}
|
||||
if !(isIncreasing || isDecreasing) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func findNumberByBouncyPercentage(percentage float64) (num int) {
|
||||
num = 1
|
||||
var bouncyCount = 0
|
||||
for {
|
||||
if isBouncy(num) {
|
||||
bouncyCount++
|
||||
}
|
||||
var proportion = float64(bouncyCount) / float64(num)
|
||||
if proportion == percentage {
|
||||
return num
|
||||
} else if proportion > percentage || percentage >= 1 {
|
||||
fmt.Printf("no number at which the bouncy proportion is exactly %d could be found", percentage)
|
||||
return num
|
||||
}
|
||||
num++
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue