aboutsummaryrefslogtreecommitdiff
path: root/entries/perryliao
diff options
context:
space:
mode:
authorJames Yoo2022-10-24 23:47:51 +0000
committerJames Yoo2022-10-24 23:47:51 +0000
commit03315f012514bdcc5a4f654056f0103abe11eb83 (patch)
tree2b7c6e9233ecb503e7be0d8354483691f9a1e16c /entries/perryliao
parent0921d8222bb883ea86d51c7200a865a5e4dbc469 (diff)
parent7ed13a92711a35a9c263c1f53e33e308653ae727 (diff)
Merging local with remote main
Diffstat (limited to 'entries/perryliao')
-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()
+ }
+}