Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement