aboutsummaryrefslogtreecommitdiff
path: root/entries/perryliao/fib.groovy
diff options
context:
space:
mode:
authorfunemy2022-10-25 07:14:52 +0000
committerfunemy2022-10-25 07:14:52 +0000
commit998ef837b43203319397f191036a97a5adc42220 (patch)
tree920558bd60d282c663fd2da1cd4144cac1849a1d /entries/perryliao/fib.groovy
parentfdac6c60e115297a58f5b81da0c4b7f18ac758f2 (diff)
parentce7544a6db594f7d3dfad0d7dc65d01515e57ad6 (diff)
Merge branch 'main' of github.com:braxtonhall/fib
Diffstat (limited to 'entries/perryliao/fib.groovy')
-rw-r--r--entries/perryliao/fib.groovy50
1 files changed, 50 insertions, 0 deletions
diff --git a/entries/perryliao/fib.groovy b/entries/perryliao/fib.groovy
new file mode 100644
index 0000000..d625d68
--- /dev/null
+++ b/entries/perryliao/fib.groovy
@@ -0,0 +1,50 @@
+pipeline {
+ agent any
+
+ parameters {
+ string defaultValue: '2', description: 'Number to compute in the Fibonacci Sequence', name: 'num', trim: true
+ }
+
+ stages {
+ stage('Validate Parameter') {
+ steps {
+ script {
+ assert params.num.isInteger()
+ }
+ }
+ }
+ stage('Create Cache') {
+ steps {
+ script {
+ if (!fileExists("fibCache")) {
+ sh 'echo "0\n1" > fibCache'
+ }
+ }
+ }
+ }
+ stage('Get Fibbonacci') {
+ steps {
+ script {
+ nComputed = sh(returnStdout: true, script: "wc -l < fibCache").trim().toInteger()
+ result = fib(params.num.toInteger())
+ println("The result is F(${params.num}) = ${result}")
+ }
+ }
+ }
+ }
+}
+
+def nComputed
+
+int fib(int n, cache = 'fibCache') {
+ if (n >= nComputed) {
+ // Need to do more recursion
+ result = fib(n - 2, cache) + fib(n - 1, cache)
+ nComputed++
+ sh "echo '${result}' >> ${cache}"
+ return result
+ } else {
+ // Already have what we need, so read from cache
+ return sh(returnStdout: true, script: "sed -n '${n + 1}p' ${cache}").toInteger()
+ }
+}