1function nextTriangle(prev::Array{BigInt})2 next = ones(BigInt, length(prev)+1)3 for k in 2:(length(next)-1)4 next[k] = prev[k-1] + prev[k];5 end67 return next;8end910function nthIterateTriangle(n::Int)11 curr = [BigInt(1)]12 for i in 1:n13 curr = nextTriangle(curr)14 end1516 return curr17end1819function nthClosedTriangle(n::Int)20 row = zeros(BigInt, n+1)21 for i in 0:n22 row[i+1] = binomial(big(n), big(i))23 end2425 return row26end2728function numOdd(row::Array{BigInt})29 numOdd = 030 for num in row31 if num % 2 == 132 numOdd += 133 end34 end3536 return big(numOdd)37end3839function closedNumOdd(n::Int)40 row = nthClosedTriangle(n)4142 numOdd = 043 for num in row44 if num % 2 == 145 numOdd += 146 end47 end4849 return big(numOdd)50end5152function closedFracOdd(n::Int)53 odd = zeros(BigInt, Threads.nthreads())54 Threads.@threads for i in 0:n55 odd[Threads.threadid()] += closedNumOdd(i)56 end5758 total = reduce(+, odd)59 num = big(n+1)60 totalNums = num*(num+1)//26162 return total // totalNums63end6465function fracOdd(n::Int)66 curr = [big(1)]67 odd = numOdd(curr)68 for i in 1:n69 curr = nextTriangle(curr)70 odd += numOdd(curr)71 end7273 num = big(n+1)74 totalNums = num*(num+1)//27576 return odd // totalNums77end7879println(fracOdd(127))