From 0ddda6ea5835204fa371dd84fad17b11d2454be4 Mon Sep 17 00:00:00 2001
From: "raphael.bach" <raphael.bach@etu.hesge.ch>
Date: Sat, 2 Jul 2022 19:16:08 +0200
Subject: [PATCH] Add sequential `rule_110.c`

---
 benchmarks/seq/rule_110.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 benchmarks/seq/rule_110.c

diff --git a/benchmarks/seq/rule_110.c b/benchmarks/seq/rule_110.c
new file mode 100644
index 0000000..69aa6b0
--- /dev/null
+++ b/benchmarks/seq/rule_110.c
@@ -0,0 +1,28 @@
+#include <stdint.h> // uint8_t
+#include <stdlib.h> // EXIT_SUCCESS, size_t
+#include <string.h> // memcpy()
+
+#define T uint8_t
+#define STEP_CNT 16
+
+int main(void)
+{
+    T in[] = {
+        1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1
+    };
+    #define size (sizeof(in)/sizeof(T))
+    T out[size];
+    for(size_t step = 0; step < STEP_CNT; step++) {
+        for(size_t i = 0; i < size; i++) {
+            if(i == 0) {
+                out[i] = (in[i] == 1) || (in[(i+1)] == 1);
+            } else if(i == (size-1)) {
+                out[i] = (in[i] == 1);
+            } else {
+                out[i] = (in[i] != in[(i+1)]) || ((in[(i-1)] == 0) && (in[i] == 1));
+            }
+        }
+        memcpy(in, out, size);
+    }
+    return EXIT_SUCCESS;
+}
-- 
GitLab