Advertisement
Guest User

advent of code 2020 day 23

a guest
Dec 23rd, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. static int n = 1000000;
  5. static int m = 10000000;
  6.  
  7. int inArray (int x, int* arr) {
  8.   for (int i = 0; i < 3; i++) {
  9.     if (x == arr[i]) return 1;
  10.   }
  11.   return 0;
  12. }
  13.  
  14. int findDest (int x, int selected[]) {
  15.   if (x < 0) x = n - 1;
  16.   while (inArray(x, selected)) x--;
  17.  
  18.   return x;
  19. }
  20.  
  21. int* part1 (int* nums) {
  22.   int curr = nums[0];
  23.   int selected[3];
  24.  
  25.   int i = 0;
  26.   while (i < m) {
  27.     selected[0] = nums[curr];
  28.     selected[1] = nums[selected[0]];
  29.     selected[2] = nums[selected[1]];
  30.  
  31.     int dest = findDest(curr - 1, selected);
  32.     int temp = nums[dest];
  33.  
  34.     nums[dest] = selected[0];
  35.     nums[curr] = nums[selected[2]];
  36.     nums[selected[2]] = temp;
  37.  
  38.     curr = nums[curr];
  39.  
  40.     i++;
  41.   }
  42.  
  43.   return nums;
  44. }
  45.  
  46. int main () {
  47.   int i;
  48.  
  49.   int* nums = calloc (n, sizeof(int));
  50.  
  51.   nums[0] = 1;
  52.   nums[1] = 2;
  53.   nums[2] = 3;
  54.   nums[3] = 4;
  55.   nums[4] = 8;
  56.   nums[8] = 7;
  57.   nums[7] = 5;
  58.   nums[5] = 9;
  59.   nums[9] = 6;
  60.   nums[6] = 10;
  61.   nums[n - 1] = 0;
  62.  
  63.   for (i = 10; i < n - 1; i++) {
  64.     nums[i] = i + 1;
  65.   }
  66.  
  67.   int* seq = part1(nums);
  68.  
  69.   printf("%d * %d = %ld\n", seq[1], seq[seq[1]], (long)seq[1] * (long)seq[seq[1]]);
  70.  
  71.   return 0;
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement