1
0
Fork 0

Day 23: Added a C version of the vector version of the Racket solution. It doesn't work.

This commit is contained in:
Jonathan Chan 2020-12-23 17:51:09 -08:00 committed by Jonathan Chan
parent 0ae16b5856
commit 91427ebd83
1 changed files with 51 additions and 0 deletions

51
src/23-array.c Normal file
View File

@ -0,0 +1,51 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
unsigned long CUPS = 1000000;
unsigned long MOVES = 10000000;
// Precondition: 1 <= cup <= CUPS
unsigned long prevCup(unsigned long cup) {
if (cup == 1) {
return CUPS;
} else {
return cup - 1;
}
}
unsigned long play(unsigned long* cups, unsigned long cup) {
unsigned long first = cups[cup];
unsigned long second = cups[first];
unsigned long third = cups[second];
unsigned long fourth = cups[third];
unsigned long dest = prevCup(cup);
while (dest == first || dest == second || dest == third) {
dest = prevCup(dest);
}
cups[cup] = fourth;
cups[third] = cups[dest];
cups[dest] = first;
return fourth;
}
int main() {
int input[9] = {3, 6, 2, 9, 8, 1, 7, 5, 4};
int arr[9] = {7, 9, 6, 10, 4, 2, 5, 1, 8};
unsigned long* cups = malloc((CUPS + 1) * sizeof(*cups));
unsigned long i;
unsigned long cup = 3;
cups[0] = 0;
for (i = 1; i <= 9; i++) {
cups[i] = arr[i - 1];
}
for (i = 10; i <= CUPS; i++) {
cups[i] = i + 1;
}
for (i = 0; i < MOVES; i++) {
cup = play(cups, cup);
}
unsigned long first = cups[1];
unsigned long second = cups[first];
printf("Product of two cups after cup 1 is %lu * %lu = %lu\n", first, second, first * second);
}