aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-282/zapwai/c/ch-1.c41
-rw-r--r--challenge-282/zapwai/c/ch-2.c28
-rw-r--r--challenge-282/zapwai/c/vec.h293
-rw-r--r--challenge-282/zapwai/javascript/ch-1.js36
-rw-r--r--challenge-282/zapwai/javascript/ch-2.js21
-rw-r--r--challenge-282/zapwai/perl/ch-1.pl30
-rw-r--r--challenge-282/zapwai/perl/ch-2.pl20
-rw-r--r--challenge-282/zapwai/python/ch-1.py31
-rw-r--r--challenge-282/zapwai/python/ch-2.py19
-rw-r--r--challenge-282/zapwai/r/ch-1.r27
-rw-r--r--challenge-282/zapwai/r/ch-2.r19
-rw-r--r--challenge-282/zapwai/rust/ch-1.rs36
-rw-r--r--challenge-282/zapwai/rust/ch-2.rs23
13 files changed, 624 insertions, 0 deletions
diff --git a/challenge-282/zapwai/c/ch-1.c b/challenge-282/zapwai/c/ch-1.c
new file mode 100644
index 0000000000..6221825a02
--- /dev/null
+++ b/challenge-282/zapwai/c/ch-1.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include "vec.h"
+
+void proc(int myint) {
+ printf("Input: %d\n", myint);
+ int numb = -1;
+ int current = 0;
+ int prev = 0;
+ int cnt = 0;
+ vec *num = new_vec('i');
+ int t = myint;
+ while (t != 0) {
+ int val = t % 10;
+ push(num, &val);
+ t = t / 10;
+ }
+ for (int i = 0; i < num->size; i++) {
+ prev = current;
+ current = num->data[i];
+ if (prev == current) {
+ cnt++;
+ } else {
+ if (cnt == 2) {
+ numb = prev;
+ break;
+ } else {
+ cnt = 0;
+ }
+ }
+ }
+ printf("Output: %d\n", numb);
+}
+
+int main() {
+ int mynum= 123444567;
+ proc(mynum);
+ int mynum2 = 1233334;
+ proc(mynum2);
+ int mynum3 = 10020003;
+ proc(mynum3);
+}
diff --git a/challenge-282/zapwai/c/ch-2.c b/challenge-282/zapwai/c/ch-2.c
new file mode 100644
index 0000000000..e1f35a5f14
--- /dev/null
+++ b/challenge-282/zapwai/c/ch-2.c
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+char lc(char c) {
+ return tolower(c);
+}
+void proc(char* str) {
+ printf( "Input: %s\n", str);
+ char* let = str;
+ char prev = '0';
+ char curr;
+ int cnt = -1;
+ for (int i = 0; i < strlen(str); i++) {
+ curr = let[i];
+ if (lc(prev) != lc(curr))
+ cnt++;
+ prev = curr;
+ }
+ printf("Output: %d\n", cnt);
+}
+int main() {
+ char* str = "pPeERrLl";
+ proc(str);
+ char* str2 = "rRr";
+ proc(str2);
+ char* str3 = "GoO";
+ proc(str3);
+}
diff --git a/challenge-282/zapwai/c/vec.h b/challenge-282/zapwai/c/vec.h
new file mode 100644
index 0000000000..ead044082e
--- /dev/null
+++ b/challenge-282/zapwai/c/vec.h
@@ -0,0 +1,293 @@
+#ifndef VEC_H
+#define VEC_H
+#include <stdlib.h>
+#include <string.h>
+#define VECMAXSTRLEN 50
+#define VECCAP 10
+typedef struct vector {
+ size_t cap; /* actual size allocated (reduces calls to realloc)*/
+ size_t size; /* size of data */
+ int* data; /* integer data */
+ char* datac; /* char data */
+ char** datas; /* string data */
+ char type; /* i, c, or s */
+} vec;
+
+vec* new_vec(char t) {
+ struct vector* v = malloc(sizeof(vec));
+ if ( t != 'c' && t != 'i' && t != 's') {
+ exit(1);
+ }
+ v->type = t;
+ v->size = 0;
+ v->cap = VECCAP;
+ v->data = malloc(v->cap * sizeof(int));
+ v->datac = malloc(v->cap * sizeof(char));
+ v->datas = malloc(v->cap * sizeof(char*));
+ for (int i = 0; i < v->cap; i++)
+ v->datas[i] = malloc(VECMAXSTRLEN);
+ return v;
+}
+
+void destroy_vec(struct vector* v) {
+ free (v->data); /* good habit */
+ free (v->datac);
+ for (int i = 0; i < v->cap; i++)
+ free(v->datas[i]);
+ free (v->datas);
+ free(v);
+}
+
+/* If a vector needs more memory, add VECCAP (e.g. 10) slots */
+void stretch_vec(struct vector* v) {
+ if (v->size == v->cap) {
+ v->cap += VECCAP;
+ switch(v->type) {
+ case 'i':
+ v->data = realloc(v->data, sizeof(int) * v->cap);
+ break;
+ case 'c':
+ v->datac = realloc(v->datac, sizeof(char) * v->cap);
+ break;
+ case 's':
+ v->datas = realloc(v->datas, sizeof(char*) * v->cap);
+ for (int i = v->size; i < v->cap; i++)
+ v->datas[i] = malloc(VECMAXSTRLEN);
+ break;
+ }
+ }
+}
+
+void push(struct vector* v, void* value) {
+ v->size++;
+ stretch_vec(v);
+ switch(v->type) {
+ case 'i':
+ v->data[v->size - 1] = *(int *) value;
+ break;
+ case 'c':
+ v->datac[v->size - 1] = *(char *) value;
+ break;
+ case 's':
+ strcpy(v->datas[v->size - 1], (char *) value);
+ break;
+ }
+}
+
+
+void unshift(struct vector* v, void* value) {
+ v->size++;
+ stretch_vec(v);
+ switch(v->type) {
+ case 'i':
+ for (int i = v->size - 1; i > 0; i--)
+ v->data[i] = v->data[i - 1];
+ v->data[0] = * (int*) value;
+ break;
+ case 'c':
+ for (int i = v->size - 1; i > 0; i--)
+ v->datac[i] = v->datac[i - 1];
+ v->datac[0] = * (char*) value;
+ break;
+ case 's':
+ for (int i = v->size - 1; i > 0; i--)
+ strcpy(v->datas[i], v->datas[i - 1]);
+ strcpy(v->datas[0], (char*) value);
+ break;
+ }
+}
+
+void* shift(struct vector* v) {
+ void *x = NULL;
+ if (v->size == 0) return NULL;
+ v->size--;
+ switch(v->type) {
+ case 'i':
+ x = malloc(sizeof(int));
+ if (x == NULL) return NULL;
+ *(int*)x = v->data[0];
+ for (int i = 0; i < v->size; i++)
+ v->data[i] = v->data[i + 1];
+ v->data[v->size] = 0;
+ break;
+ case 'c':
+ x = malloc(sizeof(char));
+ if (x == NULL) return NULL;
+ *(char *)x = v->datac[0];
+ for (int i = 0; i < v->size; i++)
+ v->datac[i] = v->datac[i + 1];
+ v->datac[v->size] = '\0';
+ break;
+ case 's':
+ x = malloc(VECMAXSTRLEN);
+ if (x == NULL) return NULL;
+ strcpy(x, v->datas[0]);
+ for (int i = 0; i < v->size; i++)
+ strcpy(v->datas[i], v->datas[i + 1]);
+ strcpy(v->datas[v->size], "");
+ break;
+ }
+ return x;
+}
+
+void* pop(struct vector* v) {
+ void *x = NULL;
+ if (v->size == 0) return NULL;
+ v->size--;
+ switch(v->type) {
+ case 'i':
+ x = malloc(sizeof(int));
+ *(int*)x = v->data[v->size];
+ v->data[v->size] = 0;
+ break;
+ case 'c':
+ x = malloc(sizeof(char));
+ *(char*)x = v->datac[v->size];
+ v->datac[v->size] = '\0';
+ break;
+ case 's':
+ x = malloc(VECMAXSTRLEN);
+ strcpy(x, v->datas[v->size]);
+ strcpy(v->datas[v->size], " ");
+ break;
+ }
+ return x;
+}
+
+void push_list(struct vector* v, void* list, int listlen) {
+ for (int i = 0; i < listlen; i++)
+ switch(v->type) {
+ case 'i':
+ push(v, &((int*)list)[i]);
+ break;
+ case 'c':
+ push(v, &((char*)list)[i]);
+ break;
+ case 's':
+ push(v, ((char**)list)[i]);
+ break;
+ }
+}
+
+void sort(struct vector* v) {
+ int cnt;
+ do {
+ cnt = 0;
+ for (int i = 0; i < v->size - 1; i++) {
+ switch(v->type) {
+ case 'i':
+ if (v->data[i] > v->data[i + 1]) {
+ cnt++;
+ int tmp = v->data[i];
+ v->data[i] = v->data[i+1];
+ v->data[i+1] = tmp;
+ }
+ break;
+ case 'c':
+ if (v->datac[i] > v->datac[i + 1]) {
+ cnt++;
+ char tmp = v->datac[i];
+ v->datac[i] = v->datac[i+1];
+ v->datac[i+1] = tmp;
+ }
+ break;
+ case 's':
+ if (strcmp(v->datas[i], v->datas[i + 1]) > 0) {
+ cnt++;
+ char* tmp = v->datas[i];
+ v->datas[i] = v->datas[i+1];
+ v->datas[i+1] = tmp;
+ }
+ break;
+ }
+ }
+ } while(cnt > 0);
+}
+
+void reverse(struct vector* v) {
+ if (v->size == 1) return;
+ int k = v->size / 2;
+ for (int i = 0; i < k; i++) {
+ int idx = (v->size % 2 == 0) ? k+i : k+1+i;
+ int idy = k - i - 1;
+ switch(v->type) {
+ case 'i':
+ {
+ int x = v->data[idy];
+ v->data[idy] = v->data[idx];
+ v->data[idx] = x;
+ }
+ break;
+ case 'c':
+ {
+ char x = v->datac[k-1-i];
+ v->datac[idy] = v->datac[idx];
+ v->datac[idx] = x;
+ }
+ break;
+ case 's':
+ {
+ char* x = v->datas[k-1-i];
+ v->datas[idy] = v->datas[idx];
+ v->datas[idx] = x;
+ }
+ break;
+ }
+ }
+}
+
+void display(struct vector* v) {
+ printf("[");
+ if (v->size > 0){
+ switch(v->type) {
+ case 'i':
+ for (int i = 0; i < v->size - 1; i++) printf("%d, ", v->data[i]);
+ printf("%d", v->data[v->size-1]);
+ break;
+ case 'c':
+ for (int i = 0; i < v->size - 1; i++) printf("%c, ", v->datac[i]);
+ printf("%c", v->datac[v->size-1]);
+ break;
+ case 's':
+ for (int i = 0; i < v->size - 1; i++) printf("%s, ", v->datas[i]);
+ printf("%s", v->datas[v->size-1]);
+ break;
+ }
+ }
+ printf("]");
+}
+
+void* get(struct vector* v, int k) {
+ void* x = NULL;
+ switch(v->type) {
+ case 'i':
+ x = malloc(sizeof(int));
+ *(int*) x = v->data[k];
+ break;
+ case 'c':
+ x = malloc(sizeof(char));
+ *(char*) x = v->datac[k];
+ break;
+ case 's':
+ x = malloc(VECMAXSTRLEN);
+ strcpy(x, v->datas[k]);
+ break;
+ }
+ return x;
+}
+
+void set(struct vector* v, int k, void* value) {
+ switch(v->type) {
+ case 'i':
+ v->data[k] = *(int*) value;
+ break;
+ case 'c':
+ v->datac[k] = *(char*) value;
+ break;
+ case 's':
+ strcpy(v->datas[k], (char*) value);
+ break;
+ }
+
+}
+#endif
diff --git a/challenge-282/zapwai/javascript/ch-1.js b/challenge-282/zapwai/javascript/ch-1.js
new file mode 100644
index 0000000000..42c3090274
--- /dev/null
+++ b/challenge-282/zapwai/javascript/ch-1.js
@@ -0,0 +1,36 @@
+let myint = 123444567;
+proc(myint);
+myint = 1233334;
+proc(myint);
+myint = 10020003;
+proc(myint);
+
+function proc(myint) {
+ console.log( "Input:", myint);
+ let numb = -1;
+ let current = 0;
+ let prev = 0;
+ let cnt = 0;
+ let num = [];
+ t = myint;
+ while (t != 0) {
+ num.push(t % 10);
+ t = Math.floor(t / 10);
+ }
+ num.reverse();
+ for (let i = 0; i < num.length; i++) {
+ prev = current;
+ current = num[i];
+ if (prev == current) {
+ cnt++;
+ } else {
+ if (cnt == 2) {
+ numb = prev;
+ break;
+ } else {
+ cnt = 0;
+ }
+ }
+ }
+ console.log( "Output:", numb);
+}
diff --git a/challenge-282/zapwai/javascript/ch-2.js b/challenge-282/zapwai/javascript/ch-2.js
new file mode 100644
index 0000000000..b70de88392
--- /dev/null
+++ b/challenge-282/zapwai/javascript/ch-2.js
@@ -0,0 +1,21 @@
+mystr = "pPeERrLl";
+proc(mystr);
+mystr = "rRr";
+proc(mystr);
+mystr = "GoO";
+proc(mystr);
+function proc(mystr) {
+ console.log("Input:", mystr);
+ lets = mystr.split("");
+ let prev = "0";
+ let curr = "";
+ let cnt = -1;
+ for (let i = 0; i < mystr.length; i++) {
+ curr = lets[i];
+ if (prev.toLowerCase() != curr.toLowerCase()) {
+ cnt++;
+ }
+ prev = curr;
+ }
+ console.log("Output:", cnt);
+}
diff --git a/challenge-282/zapwai/perl/ch-1.pl b/challenge-282/zapwai/perl/ch-1.pl
new file mode 100644
index 0000000000..42acc9d614
--- /dev/null
+++ b/challenge-282/zapwai/perl/ch-1.pl
@@ -0,0 +1,30 @@
+use v5.38;
+my $int = 123444567;
+proc($int);
+$int = 1233334;
+proc($int);
+$int = 10020003;
+proc($int);
+sub proc($int) {
+ say "Input: $int";
+ my $num = -1;
+ my $current = 0;
+ my $prev = 0;
+ my $cnt = 0;
+ my @num = split "", $int;
+ for my $i (0 .. -1 + length $int) {
+ $prev = $current;
+ $current = $num[$i];
+ if ($prev == $current) {
+ $cnt++;
+ } else {
+ if ($cnt == 2) {
+ $num = $prev;
+ last;
+ } else {
+ $cnt = 0;
+ }
+ }
+ }
+ say "Output: $num";
+}
diff --git a/challenge-282/zapwai/perl/ch-2.pl b/challenge-282/zapwai/perl/ch-2.pl
new file mode 100644
index 0000000000..9f84f4bf9c
--- /dev/null
+++ b/challenge-282/zapwai/perl/ch-2.pl
@@ -0,0 +1,20 @@
+use v5.38;
+my $str = "pPeERrLl";
+proc($str);
+$str = "rRr";
+proc($str);
+$str = "GoO";
+proc($str);
+sub proc($str) {
+ say "Input: $str";
+ my @let = split "", $str;
+ my $prev = "0";
+ my $curr;
+ my $cnt = -1;
+ for my $i (0 .. -1 + length $str) {
+ $curr = $let[$i];
+ $cnt++ unless (lc $prev eq lc $curr);
+ $prev = $curr;
+ }
+ say "Output: $cnt";
+}
diff --git a/challenge-282/zapwai/python/ch-1.py b/challenge-282/zapwai/python/ch-1.py
new file mode 100644
index 0000000000..5bf9dc0f47
--- /dev/null
+++ b/challenge-282/zapwai/python/ch-1.py
@@ -0,0 +1,31 @@
+def proc(my_int):
+ print("Input:", my_int)
+ numb = -1
+ current = 0
+ prev = 0
+ cnt = 0
+ num = []
+ t = my_int
+ while t != 0:
+ num.append(t % 10)
+ t = int(t/10);
+ num.reverse()
+ for i in range(len(num)):
+ prev = current
+ current = num[i]
+ if prev == current:
+ cnt += 1
+ else:
+ if cnt == 2:
+ numb = prev
+ break
+ else:
+ cnt = 0
+ print("Output:", numb)
+
+my_int = 123444567
+proc(my_int)
+my_int = 1233334
+proc(my_int)
+my_int = 10020003
+proc(my_int)
diff --git a/challenge-282/zapwai/python/ch-2.py b/challenge-282/zapwai/python/ch-2.py
new file mode 100644
index 0000000000..2d8f20fa4b
--- /dev/null
+++ b/challenge-282/zapwai/python/ch-2.py
@@ -0,0 +1,19 @@
+def proc(mystr):
+ print("Input:", mystr)
+ let = list(mystr)
+ prev = "0"
+ curr = ""
+ cnt = -1
+ for i in range(-1 + len(mystr)):
+ curr = let[i]
+ if prev.lower() != curr.lower():
+ cnt += 1
+ prev = curr
+ print("Output:", cnt)
+
+mystr = "pPeERrLl"
+proc(mystr)
+mystr = "rRr"
+proc(mystr)
+mystr = "GoO"
+proc(mystr)
diff --git a/challenge-282/zapwai/r/ch-1.r b/challenge-282/zapwai/r/ch-1.r
new file mode 100644
index 0000000000..f17b1d0ff6
--- /dev/null
+++ b/challenge-282/zapwai/r/ch-1.r
@@ -0,0 +1,27 @@
+proc <- function(int) {
+ print(paste("Input:", int))
+ num <- -1
+ curr <- 0
+ prev <- 0
+ cnt <- 0
+ L <- strsplit(int, "")
+ Q <- L[[1]]
+ for (i in 1:nchar(int)) {
+ prev <- curr
+ curr <- Q[i]
+ if (prev == curr) {
+ cnt <- cnt + 1
+ } else {
+ if (cnt == 2) {
+ num <- prev
+ break;
+ } else {
+ cnt <- 0
+ }
+ }
+ }
+ print(paste("Output", num))
+}
+proc("123444567")
+proc("1233334")
+proc("10020003")
diff --git a/challenge-282/zapwai/r/ch-2.r b/challenge-282/zapwai/r/ch-2.r
new file mode 100644
index 0000000000..c9907c8c67
--- /dev/null
+++ b/challenge-282/zapwai/r/ch-2.r
@@ -0,0 +1,19 @@
+proc <- function(str) {
+ print(paste("Input:", str))
+ Let <- strsplit(str, "")
+ let <- Let[[1]]
+ prev <- "0"
+ curr <- ""
+ cnt <- -1
+ for (i in 1: nchar(str)) {
+ curr = let[i]
+ if (tolower(prev) != tolower(curr)) {
+ cnt <- cnt + 1
+ }
+ prev <- curr
+ }
+ print(paste("Output:", cnt))
+}
+proc("pPeERrLl")
+proc("rRr")
+proc("GoO")
diff --git a/challenge-282/zapwai/rust/ch-1.rs b/challenge-282/zapwai/rust/ch-1.rs
new file mode 100644
index 0000000000..f122b0bb4d
--- /dev/null
+++ b/challenge-282/zapwai/rust/ch-1.rs
@@ -0,0 +1,36 @@
+fn main() {
+ let int = 123444567;
+ proc(int);
+ let int2 = 1233334;
+ proc(int2);
+ let int3 = 10020003;
+ proc(int3);
+}
+fn proc(int :i32) {
+ println!( "Input: {int}");
+ let mut numb = -1;
+ let mut current = 0;
+ let mut prev = 0;
+ let mut cnt = 0;
+ let mut num :Vec<i32>= Vec::new();
+ let mut t = int;
+ while t != 0 {
+ num.push(t % 10);
+ t = t / 10;
+ }
+ for i in 0 .. num.len() {
+ prev = current;
+ current = num[i];
+ if prev == current {
+ cnt += 1;
+ } else {
+ if cnt == 2 {
+ numb = prev;
+ break;
+ } else {
+ cnt = 0;
+ }
+ }
+ }
+ println!( "Output: {}", numb);
+}
diff --git a/challenge-282/zapwai/rust/ch-2.rs b/challenge-282/zapwai/rust/ch-2.rs
new file mode 100644
index 0000000000..58cf9c8327
--- /dev/null
+++ b/challenge-282/zapwai/rust/ch-2.rs
@@ -0,0 +1,23 @@
+fn main() {
+ let mystr = "pPeERrLl";
+ proc(mystr);
+ let mystr2 = "rRr";
+ proc(mystr2);
+ let mystr3 = "GoO";
+ proc(mystr3);
+}
+fn proc(mystr: &str) {
+ println!( "Input: {mystr}");
+ let lets :Vec<char> = mystr.to_lowercase().chars().collect();
+ let mut prev = '0';
+ let mut curr;
+ let mut cnt = -1;
+ for i in 0 .. lets.len() {
+ curr = lets[i];
+ if prev != curr {
+ cnt += 1
+ }
+ prev = curr;
+ }
+ println!( "Output: {cnt}");
+}