diff options
| author | David Ferrone <zapwai@gmail.com> | 2024-08-12 11:15:42 -0400 |
|---|---|---|
| committer | David Ferrone <zapwai@gmail.com> | 2024-08-12 11:15:42 -0400 |
| commit | 3d7e1e51bd247bdda504f5e0fc4263cf0f830ddc (patch) | |
| tree | d8509d091985d6c1815492c36c1d58274f12f55a | |
| parent | d00deb4fc0f9c8f599bd80cf1b2e7ac56fa2d065 (diff) | |
| download | perlweeklychallenge-club-3d7e1e51bd247bdda504f5e0fc4263cf0f830ddc.tar.gz perlweeklychallenge-club-3d7e1e51bd247bdda504f5e0fc4263cf0f830ddc.tar.bz2 perlweeklychallenge-club-3d7e1e51bd247bdda504f5e0fc4263cf0f830ddc.zip | |
Week 282
| -rw-r--r-- | challenge-282/zapwai/c/ch-1.c | 41 | ||||
| -rw-r--r-- | challenge-282/zapwai/c/ch-2.c | 28 | ||||
| -rw-r--r-- | challenge-282/zapwai/c/vec.h | 293 | ||||
| -rw-r--r-- | challenge-282/zapwai/javascript/ch-1.js | 36 | ||||
| -rw-r--r-- | challenge-282/zapwai/javascript/ch-2.js | 21 | ||||
| -rw-r--r-- | challenge-282/zapwai/perl/ch-1.pl | 30 | ||||
| -rw-r--r-- | challenge-282/zapwai/perl/ch-2.pl | 20 | ||||
| -rw-r--r-- | challenge-282/zapwai/python/ch-1.py | 31 | ||||
| -rw-r--r-- | challenge-282/zapwai/python/ch-2.py | 19 | ||||
| -rw-r--r-- | challenge-282/zapwai/r/ch-1.r | 27 | ||||
| -rw-r--r-- | challenge-282/zapwai/r/ch-2.r | 19 | ||||
| -rw-r--r-- | challenge-282/zapwai/rust/ch-1.rs | 36 | ||||
| -rw-r--r-- | challenge-282/zapwai/rust/ch-2.rs | 23 |
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}"); +} |
