aboutsummaryrefslogtreecommitdiff
path: root/entries/perryliao/fib.groovy
diff options
context:
space:
mode:
authorBraxton Hall2022-10-24 03:39:32 +0000
committerGitHub2022-10-24 03:39:32 +0000
commit9d4f90f35e10269e64b7329460cef728bf0cd7d9 (patch)
tree6c872e6969224ac4189ef9ce17b0c965d6006331 /entries/perryliao/fib.groovy
parent40317f6d4228ad435c699d17a9b4545041c0f3ee (diff)
parent5a918f5a59e0e3b3af1ef75b5251b9f7ae7a15e8 (diff)
Merge pull request #14 from perryliao/main
lemme see your groovy
Diffstat (limited to 'entries/perryliao/fib.groovy')
-rw-r--r--entries/perryliao/fib.groovy48
1 files changed, 48 insertions, 0 deletions
diff --git a/entries/perryliao/fib.groovy b/entries/perryliao/fib.groovy
new file mode 100644
index 0000000..af1c4df
--- /dev/null
+++ b/entries/perryliao/fib.groovy
@@ -0,0 +1,48 @@
+pipeline {
+ agent any
+
+ parameters {
+ string defaultValue: '2', description: 'Number to compute in the Fibonacci Sequence', name: 'num', trim: true
+ }
+
+ stages {
+ stage('Create Cache') {
+ steps {
+ script {
+ if (!fileExists("fibbonacciCache")) {
+ sh 'echo "0\n1" > fibbonacciCache'
+ }
+ }
+ }
+ }
+ stage('Validate Parameter') {
+ steps {
+ script {
+ assert params.num.isInteger()
+ }
+ }
+ }
+ stage('Get Fibbonacci') {
+ steps {
+ script {
+ result = fib(params.num.toInteger())
+ println("The result is F(${params.num}) = ${result}")
+ }
+ }
+ }
+ }
+}
+
+int fib(int n, cache = 'fibbonacciCache') {
+ nComputed = sh(returnStdout: true, script: "wc -l < ${cache}").trim().toInteger()
+ if (n >= nComputed) {
+ // Need to do more recursion
+ result = fib(n - 2, cache) + fib(n - 1, cache)
+ 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}").trim().toInteger()
+ }
+}
+