aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Ferrone <zapwai@gmail.com>2024-04-09 10:57:36 -0400
committerGitHub <noreply@github.com>2024-04-09 10:57:36 -0400
commit12724a5efda7d9d03ae7aee71bffd1ad09fc0aba (patch)
tree0c6b4ccad4885aea324788f6597c477683884c44
parent7c9376c8016da8b5bb31794b07fe08632b84d9df (diff)
downloadperlweeklychallenge-club-12724a5efda7d9d03ae7aee71bffd1ad09fc0aba.tar.gz
perlweeklychallenge-club-12724a5efda7d9d03ae7aee71bffd1ad09fc0aba.tar.bz2
perlweeklychallenge-club-12724a5efda7d9d03ae7aee71bffd1ad09fc0aba.zip
C update
-rw-r--r--challenge-264/zapwai/c/ch-2.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/challenge-264/zapwai/c/ch-2.c b/challenge-264/zapwai/c/ch-2.c
index 86096faa72..f4ae6d9082 100644
--- a/challenge-264/zapwai/c/ch-2.c
+++ b/challenge-264/zapwai/c/ch-2.c
@@ -16,31 +16,37 @@ void proc(int source[], int indices[], int slen) {
int current_length = 0;
for (int i = 0; i < slen; i++) {
- /* target[current_length] = ; */
-
+ int *post = malloc((slen - indices[i] - 1) * sizeof(int));
int *pre = malloc(current_length * sizeof(int));
for (int j = 0; j < current_length; j++)
pre[j] = target[j];
+ for (int j = 0; j < slen - indices[i] - 1; j++)
+ post[j] = target[indices[i] + j];
- int *post = malloc((slen - indices[i]) * sizeof(int));
- for (int j = 0; j < slen - indices[i]; j++)
- post[j] = target[j];
-
- /* Work in progress... */
+ int skip = 0; /* 0, or 1 if replacement occurs */
+ int current_value = NIL; /* gets replaced */
+ if (current_length > indices[i]) {
+ current_value = target[indices[i]];
+ skip = 1;
+ }
+ target[indices[i]] = source[i];
+ if (current_value != NIL)
+ target[indices[i] + 1] = current_value;
+
+ if (current_length > indices[i]) {
+ for (int j = 0; j < slen - indices[i] - 1; j++)
+ target[indices[i] + j + skip] = post[j];
+ }
+
free(pre);
free(post);
current_length++;
-
- /* chunk = splice @target, indices[i]; */
- /* target[indices[i]] = source[i]; */
- /* push @target, @chunk; */
- }
+ }
printf("Output: { ");
for (int i = 0; i < slen; i++)
printf("%d ", target[i]);
printf("}\n");
-
}
int main() {
@@ -55,4 +61,4 @@ int main() {
int source3[] = {1};
int indices3[] = {0};
proc(source3, indices3, sizeof(source3) / sizeof(int));
-}
+} \ No newline at end of file