aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Ferrone <zapwai@gmail.com>2024-08-26 12:15:59 -0400
committerDavid Ferrone <zapwai@gmail.com>2024-08-26 12:15:59 -0400
commit33fa14320318c8f5684f84b892f8b082e8cd018c (patch)
tree8dda531a440b07e9d263779766d6b111c666a0f9
parentb41f573bfd75d0bd374e8cb5fc390bbe5ce29e0b (diff)
downloadperlweeklychallenge-club-33fa14320318c8f5684f84b892f8b082e8cd018c.tar.gz
perlweeklychallenge-club-33fa14320318c8f5684f84b892f8b082e8cd018c.tar.bz2
perlweeklychallenge-club-33fa14320318c8f5684f84b892f8b082e8cd018c.zip
Week 284
-rw-r--r--challenge-284/zapwai/c/ch-1.c31
-rw-r--r--challenge-284/zapwai/c/ch-2.c57
-rw-r--r--challenge-284/zapwai/c/vec.h294
-rw-r--r--challenge-284/zapwai/javascript/ch-1.js29
-rw-r--r--challenge-284/zapwai/javascript/ch-2.js42
-rw-r--r--challenge-284/zapwai/perl/ch-1.pl27
-rw-r--r--challenge-284/zapwai/perl/ch-2.pl37
-rw-r--r--challenge-284/zapwai/python/ch-1.py20
-rw-r--r--challenge-284/zapwai/python/ch-2.py32
-rw-r--r--challenge-284/zapwai/r/ch-1.r24
-rw-r--r--challenge-284/zapwai/r/ch-2.r36
-rw-r--r--challenge-284/zapwai/rust/ch-1.rs25
-rw-r--r--challenge-284/zapwai/rust/ch-2.rs43
13 files changed, 697 insertions, 0 deletions
diff --git a/challenge-284/zapwai/c/ch-1.c b/challenge-284/zapwai/c/ch-1.c
new file mode 100644
index 0000000000..836a8cdf1b
--- /dev/null
+++ b/challenge-284/zapwai/c/ch-1.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+
+void proc(int ints[], int intslen) {
+ printf("Input: ints = { ");
+ int lucky = -1;
+ int max = 0;
+ for (int i = 0; i < intslen; i++) {
+ printf("%d ", ints[i]);
+ if (max < ints[i])
+ max = ints[i];
+ }
+ printf("}\n");
+ int freq[1 + max];
+ for (int i = 0; i < 1 + max; i++)
+ freq[i] = 0;
+ for (int i = 0; i < intslen; i++)
+ freq[ints[i]]++;
+ for (int i = 1; i < 1 + max; i++)
+ if (i == freq[i])
+ lucky = i;
+ printf("Output: %d\n", lucky);
+}
+
+int main() {
+ int ints[] = {2, 2, 3, 4};
+ proc(ints, sizeof(ints) / sizeof(int));
+ int ints2[] = {1, 2, 2, 3, 3, 3};
+ proc(ints2, sizeof(ints2) / sizeof(int));
+ int ints3[] = {1, 1, 1, 3};
+ proc(ints3, sizeof(ints3) / sizeof(int));
+}
diff --git a/challenge-284/zapwai/c/ch-2.c b/challenge-284/zapwai/c/ch-2.c
new file mode 100644
index 0000000000..b91f0c562e
--- /dev/null
+++ b/challenge-284/zapwai/c/ch-2.c
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include "vec.h"
+
+void proc(int l1[], int l2[], int l1len, int l2len) {
+ printf("Input: \n");
+ printf(" List1 = { ");
+ for (int i = 0; i < l1len; i++)
+ printf("%d ", l1[i]);
+ printf("}\n");
+ printf(" List2 = { ");
+ for (int i = 0; i < l2len; i++)
+ printf("%d ", l2[i]);
+ printf("}\n");
+ vec* tail = new_vec('i');
+ for (int i = 0; i < l1len; i++) {
+ int item = l1[i];
+ int elem_of_l2_flag = 0;
+ for (int j = 0; j < l2len; j++) {
+ int item2 = l2[j];
+ if (item == item2) {
+ elem_of_l2_flag = 1;
+ break;
+ }
+ }
+ if (elem_of_l2_flag == 0)
+ push(tail, &item);
+ }
+ vec* out = new_vec('i');
+ for (int j = 0; j < l2len; j++) {
+ int item2 = l2[j];
+ for (int i = 0; i < l1len; i++) {
+ int item = l1[i];
+ if (item == item2)
+ push(out, &item);
+ }
+ }
+ sort(tail);
+ for (int i = 0; i < tail->size; i++)
+ push(out, &tail->data[i]);
+ printf("Output: ");
+ display(out);
+ printf("\n");
+ destroy_vec(tail);
+ destroy_vec(out);
+}
+
+int main() {
+ int list1[] = {2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5};
+ int list2[] = {2, 1, 4, 3, 5, 6};
+ proc(list1, list2, sizeof(list1)/sizeof(int), sizeof(list2)/sizeof(int));
+ int alist1[] = {3, 3, 4, 6, 2, 4, 2, 1, 3};
+ int alist2[] = {1, 3, 2};
+ proc(alist1, alist2, sizeof(alist1)/sizeof(int), sizeof(alist2)/sizeof(int));
+ int blist1[] = {3, 0, 5, 0, 2, 1, 4, 1, 1};
+ int blist2[] = {1, 0, 3, 2};
+ proc(blist1, blist2, sizeof(blist1)/sizeof(int), sizeof(blist2)/sizeof(int));
+}
diff --git a/challenge-284/zapwai/c/vec.h b/challenge-284/zapwai/c/vec.h
new file mode 100644
index 0000000000..8a73798e45
--- /dev/null
+++ b/challenge-284/zapwai/c/vec.h
@@ -0,0 +1,294 @@
+#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);
+ int number_of_strings = (v->type == 's') ? v->cap : VECCAP;
+ for (int i = 0; i < number_of_strings; 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-284/zapwai/javascript/ch-1.js b/challenge-284/zapwai/javascript/ch-1.js
new file mode 100644
index 0000000000..ced6b0c439
--- /dev/null
+++ b/challenge-284/zapwai/javascript/ch-1.js
@@ -0,0 +1,29 @@
+let ints = [2, 2, 3, 4];
+proc(ints);
+ints = [1, 2, 2, 3, 3, 3];
+proc(ints);
+ints = [1, 1, 1, 3];
+proc(ints);
+function proc(ints) {
+ console.log("Input: ints =", ints);
+ let lucky = -1;
+ let max = 0;
+ for (let item of ints) {
+ if (max < item) {
+ max = item;
+ }
+ }
+ let freq = [];
+ for (let j = 0; j < 1 + max; j++) {
+ freq.push(0);
+ }
+ for (let item of ints) {
+ freq[item]++;
+ }
+ for (let i = 1; i < freq.length; i++) {
+ if (i == freq[i]) {
+ lucky = i;
+ }
+ }
+ console.log("Output:", lucky);
+}
diff --git a/challenge-284/zapwai/javascript/ch-2.js b/challenge-284/zapwai/javascript/ch-2.js
new file mode 100644
index 0000000000..0fd001cd0b
--- /dev/null
+++ b/challenge-284/zapwai/javascript/ch-2.js
@@ -0,0 +1,42 @@
+let list1 = [2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5];
+let list2 = [2, 1, 4, 3, 5, 6];
+proc(list1, list2);
+list1 = [3, 3, 4, 6, 2, 4, 2, 1, 3];
+list2 = [1, 3, 2];
+proc(list1, list2);
+list1 = [3, 0, 5, 0, 2, 1, 4, 1, 1];
+list2 = [1, 0, 3, 2];
+proc(list1, list2);
+
+function proc(l1, l2) {
+ console.log("Input:");
+ console.log(l1);
+ console.log(l2);
+ let tail = [];
+ for (let item of list1) {
+ let elem_of_l2_flag = 0;
+ for (let item2 of list2) {
+ if (item == item2) {
+ elem_of_l2_flag = 1;
+ break;
+ }
+ }
+ if (elem_of_l2_flag == 0) {
+ tail.push(item);
+ }
+ }
+ let pre = [];
+ for (let item2 of list2) {
+ for (let item of list1) {
+ if (item == item2) {
+ pre.push(item);
+ }
+ }
+ }
+ let sorted_tail = tail.sort();
+ let out = pre;
+ for (let t of sorted_tail) {
+ out.push(t);
+ }
+ console.log("Output:", out);
+}
diff --git a/challenge-284/zapwai/perl/ch-1.pl b/challenge-284/zapwai/perl/ch-1.pl
new file mode 100644
index 0000000000..303eaa97a4
--- /dev/null
+++ b/challenge-284/zapwai/perl/ch-1.pl
@@ -0,0 +1,27 @@
+use v5.38;
+my @ints = (2, 2, 3, 4);
+proc(@ints);
+@ints = (1, 2, 2, 3, 3, 3);
+proc(@ints);
+@ints = (1, 1, 1, 3);
+proc(@ints);
+sub proc(@ints) {
+ say "Input: \@ints = @ints";
+ my $lucky = -1;
+ my $max = 0;
+ for my $item (@ints) {
+ if ($max < $item) {
+ $max = $item;
+ }
+ }
+ my @freq = (0) x (1 + $max);
+ for my $item (@ints) {
+ $freq[$item]++;
+ }
+ for my $i (1 .. $#freq) {
+ if ($i == $freq[$i]) {
+ $lucky = $i;
+ }
+ }
+ say "Output: $lucky";
+}
diff --git a/challenge-284/zapwai/perl/ch-2.pl b/challenge-284/zapwai/perl/ch-2.pl
new file mode 100644
index 0000000000..893fa398be
--- /dev/null
+++ b/challenge-284/zapwai/perl/ch-2.pl
@@ -0,0 +1,37 @@
+use v5.38;
+my @list1 = (2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5);
+my @list2 = (2, 1, 4, 3, 5, 6);
+proc(\@list1, \@list2);
+@list1 = (3, 3, 4, 6, 2, 4, 2, 1, 3);
+@list2 = (1, 3, 2);
+proc(\@list1, \@list2);
+@list1 = (3, 0, 5, 0, 2, 1, 4, 1, 1);
+@list2 = (1, 0, 3, 2);
+proc(\@list1, \@list2);
+
+sub proc($l1, $l2) {
+ say "Input: \n \@list1 = @{$l1}\n \@list2 = @{$l2}";
+ my @tail;
+ for my $item (@list1) {
+ my $elem_of_l2_flag = 0;
+ for my $item2 (@list2) {
+ if ($item == $item2) {
+ $elem_of_l2_flag = 1;
+ last;
+ }
+ }
+ if ($elem_of_l2_flag == 0) {
+ push @tail, $item;
+ }
+ }
+ my @pre;
+ for my $item2 (@list2) {
+ for my $item (@list1) {
+ if ($item == $item2) {
+ push @pre, $item;
+ }
+ }
+ }
+ my @sorted_tail = sort { $a <=> $b } @tail;
+ say "Output: @pre @sorted_tail";
+}
diff --git a/challenge-284/zapwai/python/ch-1.py b/challenge-284/zapwai/python/ch-1.py
new file mode 100644
index 0000000000..16187e6da5
--- /dev/null
+++ b/challenge-284/zapwai/python/ch-1.py
@@ -0,0 +1,20 @@
+def proc(ints):
+ print("Input: ints =", ints)
+ lucky = -1
+ freq = []
+ for j in range(1 + max(ints)):
+ freq.append(0)
+ for item in ints:
+ freq[item] += 1
+
+ for i in range(1, len(freq)):
+ if i == freq[i]:
+ lucky = i
+ print("Output:", lucky)
+
+ints = [2, 2, 3, 4]
+proc(ints)
+ints = [1, 2, 2, 3, 3, 3]
+proc(ints)
+ints = [1, 1, 1, 3]
+proc(ints)
diff --git a/challenge-284/zapwai/python/ch-2.py b/challenge-284/zapwai/python/ch-2.py
new file mode 100644
index 0000000000..7e1c4bb38b
--- /dev/null
+++ b/challenge-284/zapwai/python/ch-2.py
@@ -0,0 +1,32 @@
+def proc(l1, l2):
+ print("Input: \n list1 =", l1, "\n list2 =", l2)
+ tail = []
+ for item in list1:
+ elem_of_l2_flag = 0
+ for item2 in list2:
+ if item == item2 :
+ elem_of_l2_flag = 1
+ break
+
+ if elem_of_l2_flag == 0 :
+ tail.append(item)
+ pre = []
+ for item2 in list2 :
+ for item in list1 :
+ if item == item2 :
+ pre.append(item)
+ tail.sort();
+ out = pre
+ for t in tail:
+ out.append(t)
+ print("Output:", out)
+
+list1 = [2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5]
+list2 = [2, 1, 4, 3, 5, 6]
+proc(list1, list2)
+list1 = [3, 3, 4, 6, 2, 4, 2, 1, 3]
+list2 = [1, 3, 2]
+proc(list1, list2)
+list1 = [3, 0, 5, 0, 2, 1, 4, 1, 1]
+list2 = [1, 0, 3, 2]
+proc(list1, list2)
diff --git a/challenge-284/zapwai/r/ch-1.r b/challenge-284/zapwai/r/ch-1.r
new file mode 100644
index 0000000000..217964d244
--- /dev/null
+++ b/challenge-284/zapwai/r/ch-1.r
@@ -0,0 +1,24 @@
+proc <- function(ints) {
+ cat("Input: ints = ")
+ cat(ints)
+ lucky = -1
+ freq = c(0)
+ for (i in 1:max(ints)) {
+ freq <- append(freq, 0)
+ }
+ for (item in ints) {
+ freq[item] <- freq[item] + 1
+ }
+ for (i in 1:length(freq)) {
+ if (i == freq[i]) {
+ lucky <- i
+ }
+ }
+ cat("\nOutput:", lucky, "\n")
+}
+ints = c(2, 2, 3, 4)
+proc(ints)
+ints = c(1, 2, 2, 3, 3, 3)
+proc(ints)
+ints = c(1, 1, 1, 3)
+proc(ints)
diff --git a/challenge-284/zapwai/r/ch-2.r b/challenge-284/zapwai/r/ch-2.r
new file mode 100644
index 0000000000..40d24840b5
--- /dev/null
+++ b/challenge-284/zapwai/r/ch-2.r
@@ -0,0 +1,36 @@
+proc <- function(l1, l2) {
+ cat( "Input: \n list1 = ", l1, "\n list2 = ", l2 )
+ tail = c()
+ for (item in list1) {
+ elem_of_l2_flag = 0
+ for (item2 in list2) {
+ if (item == item2) {
+ elem_of_l2_flag = 1
+ break
+ }
+ }
+ if (elem_of_l2_flag == 0) {
+ tail <- append(tail, item)
+ }
+ }
+ out = c()
+ for (item2 in list2) {
+ for (item in list1) {
+ if (item == item2) {
+ out <- append(out, item)
+ }
+ }
+ }
+ sorted_tail <- sort(tail)
+ cat( "\nOutput: ", out, sorted_tail, "\n" )
+}
+
+list1 = c(2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5)
+list2 = c(2, 1, 4, 3, 5, 6)
+proc(list1, list2)
+list1 = c(3, 3, 4, 6, 2, 4, 2, 1, 3)
+list2 = c(1, 3, 2)
+proc(list1, list2)
+list1 = c(3, 0, 5, 0, 2, 1, 4, 1, 1)
+list2 = c(1, 0, 3, 2)
+proc(list1, list2)
diff --git a/challenge-284/zapwai/rust/ch-1.rs b/challenge-284/zapwai/rust/ch-1.rs
new file mode 100644
index 0000000000..e6af4dfead
--- /dev/null
+++ b/challenge-284/zapwai/rust/ch-1.rs
@@ -0,0 +1,25 @@
+fn main() {
+ let ints = vec![2, 2, 3, 4];
+ proc(ints);
+ let ints2 = vec![1, 2, 2, 3, 3, 3];
+ proc(ints2);
+ let ints3 = vec![1, 1, 1, 3];
+ proc(ints3);
+}
+fn proc(ints :Vec<i32>) {
+ println!("Input: ints = {:?}", ints);
+ let mut lucky : i32 = -1;
+ let mut freq = vec![0];
+ for _j in 0 .. 1 + ints.iter().max().unwrap() {
+ freq.push(0);
+ }
+ for item in ints {
+ freq[item as usize] += 1;
+ }
+ for i in 1 .. freq.len() {
+ if i == freq[i] {
+ lucky = i as i32;
+ }
+ }
+ println!("Output: {lucky}");
+}
diff --git a/challenge-284/zapwai/rust/ch-2.rs b/challenge-284/zapwai/rust/ch-2.rs
new file mode 100644
index 0000000000..c211a740cd
--- /dev/null
+++ b/challenge-284/zapwai/rust/ch-2.rs
@@ -0,0 +1,43 @@
+fn main() {
+ let list1 = vec![2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5];
+ let list2 = vec![2, 1, 4, 3, 5, 6];
+ proc(list1, list2);
+ let alist1 = vec![3, 3, 4, 6, 2, 4, 2, 1, 3];
+ let alist2 = vec![1, 3, 2];
+ proc(alist1, alist2);
+ let blist1 = vec![3, 0, 5, 0, 2, 1, 4, 1, 1];
+ let blist2 = vec![1, 0, 3, 2];
+ proc(blist1, blist2);
+
+}
+fn proc(l1 :Vec<i32>, l2 :Vec<i32>) {
+ println!("Input: \n list1 = {:?}\n list2 = {:?}", l1, l2);
+ let mut tail : Vec<i32> = Vec::new();
+ for item in &l1 {
+ let mut elem_of_l2_flag = 0;
+ for item2 in &l2 {
+ if item == item2 {
+ elem_of_l2_flag = 1;
+ break;
+ }
+ }
+
+ if elem_of_l2_flag == 0 {
+ tail.push(*item);
+ }
+ }
+ let mut pre : Vec<i32> = Vec::new();
+ for item2 in &l2 {
+ for item in &l1 {
+ if item == item2 {
+ pre.push(*item);
+ }
+ }
+ }
+ tail.sort();
+ let mut out = pre;
+ for t in tail {
+ out.push(t);
+ }
+ println!("Output: {:?}", out);
+}