daily pastebin goal
49%
SHARE
TWEET

Untitled

a guest Feb 19th, 2019 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int bitset(int date, int number, int offset, int size) {
  6.     if (size == 1) {
  7.         return date |= number << offset;
  8.     }
  9.    
  10.     if (size == 2) {
  11.         switch(number) {
  12.             case 0:
  13.                 return date |= 0b00 << offset;
  14.             case 1:
  15.                 return date |= 0b01 << offset;
  16.             default:
  17.                 return date |= number << offset;
  18.         }
  19.     }
  20.    
  21.     if (size == 3) {
  22.         switch(number) {
  23.             case 0:
  24.                 return date |= 0b000 << offset;
  25.             case 1:
  26.                 return date |= 0b001 << offset;
  27.             case 2:
  28.                 return date |= 0b010 << offset;
  29.             case 3:
  30.                 return date |= 0b011 << offset;
  31.             default:
  32.                 return date |= number << offset;
  33.         }
  34.     }
  35.    
  36.     if (size == 4) {
  37.         switch(number) {
  38.             case 0:
  39.                 return date |= 0b0000 << offset;
  40.             case 1:
  41.                 return date |= 0b0001 << offset;
  42.             case 2:
  43.                 return date |= 0b0010 << offset;
  44.             case 3:
  45.                 return date |= 0b0011 << offset;
  46.             case 4:
  47.                 return date |= 0b0100 << offset;
  48.             case 5:
  49.                 return date |= 0b0101 << offset;
  50.             case 6:
  51.                 return date |= 0b0110 << offset;
  52.             case 7:
  53.                 return date |= 0b0111 << offset;
  54.             default:
  55.                 return date |= number << offset;
  56.         }
  57.     }
  58.    
  59.     return -1;
  60. }
  61.  
  62.  
  63. int isValidDate(char* date) {
  64.     int month = 10 * (date[0] - '0') + (date[1] - '0');
  65.     int day = 10 * (date[3] - '0') + (date[4] - '0');
  66.     int hour = 10 * (date[6] - '0') + (date[7] - '0');
  67.     int minute = 10 * (date[9] - '0') + (date[10] - '0');
  68.     int second = 10 * (date[12] - '0') + (date[13] - '0');
  69.    
  70.     if (month < 1 || month > 12)
  71.         return 0;
  72.     if ((month == 1 || month == 3 || month == 7 || month == 8 || month == 10 || month == 12) && (day < 1 || day > 31))
  73.         return 0;
  74.     if ((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30))
  75.         return 0;
  76.     if (month == 2 && (day < 1 || day > 29))
  77.         return 0;
  78.     if (hour < 0 || hour > 23)
  79.         return 0;
  80.     if (minute < 0 || minute > 59)
  81.         return 0;
  82.    
  83.     if (second < 0 || second > 59)
  84.         return 0;
  85.  
  86.     return 1;
  87. }
  88.  
  89. int main()
  90. {
  91.    
  92.     int total;
  93.    
  94.     printf("Hello. Please input the number of dates you'd like to convert.\n");
  95.     scanf("%i", &total);
  96.    
  97.     char dates[total][14];
  98.    
  99.     printf("Now, please input the calendar dates.\n");
  100.     int k;
  101.     for(k = 0; k < total; k++) {
  102.         fgets(dates[k], 14, stdin);
  103.     }
  104.    
  105.     int results[total];
  106.     memset(results, 0, total * sizeof(int));
  107.  
  108.     // loop through input array
  109.     int i;
  110.     for (i = 0; i < total; ++i) {
  111.        
  112.        
  113.         if (!isValidDate(dates[i])) {
  114.             results[i] = -1;
  115.             continue;
  116.         }
  117.        
  118.         // loop through string
  119.        
  120.         int j;
  121.         for (j = 0; j < strlen(dates[i]); ++j) {
  122.             int num = dates[i][j] - '0';
  123.  
  124.             // ignore non numbers
  125.             if (num < 0 || num > 9) {
  126.                 continue;
  127.             }
  128.  
  129.             if (j == 0)
  130.                 results[i] = bitset(results[i], num, 30, 1);
  131.                
  132.             else if (j == 1)
  133.                 results[i] = bitset(results[i], num, 26, 4);
  134.            
  135.             else if (j == 3)
  136.                 results[i] = bitset(results[i], num, 24, 2);
  137.            
  138.             else if (j == 4)
  139.                 results[i] = bitset(results[i], num, 20, 4);
  140.            
  141.             else if (j == 6)
  142.                 results[i] = bitset(results[i], num, 18, 2);
  143.            
  144.             else if (j == 7)
  145.                 results[i] = bitset(results[i], num, 14, 4);
  146.            
  147.             else if (j == 9)
  148.                 results[i] = bitset(results[i], num, 11, 3);
  149.            
  150.             else if (j == 10)
  151.                 results[i] = bitset(results[i], num, 7, 4);
  152.            
  153.             else if (j == 12)
  154.                 results[i] = bitset(results[i], num, 4, 3);
  155.            
  156.             else if (j == 13)
  157.                 results[i] = bitset(results[i], num, 0, 4);
  158.            
  159.             //printf("j: %i, val: %i\n", j, num);
  160.         }
  161.     }
  162.    
  163.     for (i = 0; i < total; ++i) {
  164.         if (results[i] == -1) {
  165.             printf("INVALID\n");
  166.         } else {
  167.             printf("%i\n", results[i]);
  168.         }
  169.     }
  170.     return 0;
  171. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top