From 2bae1659ba8eb742f737ccb31d9ad7f25f9599f7 Mon Sep 17 00:00:00 2001 From: ache Date: Wed, 5 Sep 2018 00:56:09 +0200 Subject: Init commit --- p71/p_71.cpp | 20 ++++++++++ p71/p_71.go | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 p71/p_71.cpp create mode 100644 p71/p_71.go (limited to 'p71') diff --git a/p71/p_71.cpp b/p71/p_71.cpp new file mode 100644 index 0000000..a2d3693 --- /dev/null +++ b/p71/p_71.cpp @@ -0,0 +1,20 @@ +#include + +const int digitToFact[] = { + [0] = 1, + [1] = 1, + [2] = 2, + [3] = 6, + [4] = 24, + [5] = 120, + [6] = 720, + [7] = 5040, + [8] = 40320, + [9] = 362880 +}; + +int main() { + + + return EXIT_SUCCESS; +} diff --git a/p71/p_71.go b/p71/p_71.go new file mode 100644 index 0000000..941989d --- /dev/null +++ b/p71/p_71.go @@ -0,0 +1,118 @@ +package main + +import ( + "fmt" + "math/big" +) + + +var digitToFact= map[rune]*big.Int{ + '0' : big.NewInt(1), + '1' : big.NewInt(1), + '2' : big.NewInt(2), + '3' : big.NewInt(6), + '4' : big.NewInt(24), + '5' : big.NewInt(120), + '6' : big.NewInt(720), + '7' : big.NewInt(5040), + '8' : big.NewInt(40320), + '9' : big.NewInt(362880), +} + +func sliceIndexOfUint64( slice[]uint64, x uint64) int { + for i,e := range slice { + if e == x { + return i; + } + } + return -1 +} + + + +func main() { + + number := [1000000]int{}; + + for init_int := uint64(0) ; init_int < 1000000 ; init_int++ { + init := big.NewInt(0); + tmp := big.NewInt(0); + init.SetUint64(init_int) + tmp.SetUint64(init_int) + + cmp := 0; + + pile := make([]uint64, 0, 61); + + + isKnow := func ( e *big.Int ) bool { + if e.IsUint64() { + v := e.Uint64(); + + if sliceIndexOfUint64(pile, v) >= 0 { + return true; + } + + if v < 1000000 { + return number[v] != 0; + } + } + return false; + } + + for b := true ; b ; b = !isKnow( tmp ) && cmp < 60 { + + if tmp.IsUint64() { + pile = append(pile, tmp.Uint64()); + } + + tmp2 := big.NewInt(0); + + for _,c := range tmp.String() { + tmp2 = tmp2.Add(tmp2, digitToFact[c]); + } + + cmp += 1; + tmp = tmp2; + } + + if isKnow( tmp ) { + + v := tmp.Uint64() + i := sliceIndexOfUint64(pile, v) + + if sliceIndexOfUint64([]uint64{169, 871, 872, 69, 145, 540, 78}, init_int) >= 0 { + } + + if( i >= 0 ) { + + for index := i ; index < len(pile) ; index++ { + number[ pile[index] ] = len(pile) - i; + } + for index := i - 1 ; index >= 0 ; index-- { + number[ pile[index] ] = i - index + number[ pile[i] ]; + } + } else if v < 1000000 && number[v] != 0 { + cmp += number[v]; + for i,e := range pile { + if e < 1000000 { + if number[e] == 0 { + number[ e ] = cmp - i; + } + } + } + } + } + + if number[init_int] == 60 { + fmt.Printf("#%d %d\n", number[init_int], init_int); + } + + + } + + +} + + + -- cgit v1.2.3