Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int bitset(int date, int number, int offset, int size) {
- if (size == 1) {
- return date |= number << offset;
- }
- if (size == 2) {
- switch(number) {
- case 0:
- return date |= 0b00 << offset;
- case 1:
- return date |= 0b01 << offset;
- default:
- return date |= number << offset;
- }
- }
- if (size == 3) {
- switch(number) {
- case 0:
- return date |= 0b000 << offset;
- case 1:
- return date |= 0b001 << offset;
- case 2:
- return date |= 0b010 << offset;
- case 3:
- return date |= 0b011 << offset;
- default:
- return date |= number << offset;
- }
- }
- if (size == 4) {
- switch(number) {
- case 0:
- return date |= 0b0000 << offset;
- case 1:
- return date |= 0b0001 << offset;
- case 2:
- return date |= 0b0010 << offset;
- case 3:
- return date |= 0b0011 << offset;
- case 4:
- return date |= 0b0100 << offset;
- case 5:
- return date |= 0b0101 << offset;
- case 6:
- return date |= 0b0110 << offset;
- case 7:
- return date |= 0b0111 << offset;
- default:
- return date |= number << offset;
- }
- }
- return -1;
- }
- int isValidDate(char* date) {
- int month = 10 * (date[0] - '0') + (date[1] - '0');
- int day = 10 * (date[3] - '0') + (date[4] - '0');
- int hour = 10 * (date[6] - '0') + (date[7] - '0');
- int minute = 10 * (date[9] - '0') + (date[10] - '0');
- int second = 10 * (date[12] - '0') + (date[13] - '0');
- if (month < 1 || month > 12)
- return 0;
- if ((month == 1 || month == 3 || month == 7 || month == 8 || month == 10 || month == 12) && (day < 1 || day > 31))
- return 0;
- if ((month == 4 || month == 6 || month == 9 || month == 11) && (day < 1 || day > 30))
- return 0;
- if (month == 2 && (day < 1 || day > 29))
- return 0;
- if (hour < 0 || hour > 23)
- return 0;
- if (minute < 0 || minute > 59)
- return 0;
- if (second < 0 || second > 59)
- return 0;
- return 1;
- }
- int main()
- {
- int total;
- printf("Hello. Please input the number of dates you'd like to convert.\n");
- scanf("%i", &total);
- char dates[total][14];
- printf("Now, please input the calendar dates.\n");
- int k;
- for(k = 0; k < total; k++) {
- fgets(dates[k], 14, stdin);
- }
- int results[total];
- memset(results, 0, total * sizeof(int));
- // loop through input array
- int i;
- for (i = 0; i < total; ++i) {
- if (!isValidDate(dates[i])) {
- results[i] = -1;
- continue;
- }
- // loop through string
- int j;
- for (j = 0; j < strlen(dates[i]); ++j) {
- int num = dates[i][j] - '0';
- // ignore non numbers
- if (num < 0 || num > 9) {
- continue;
- }
- if (j == 0)
- results[i] = bitset(results[i], num, 30, 1);
- else if (j == 1)
- results[i] = bitset(results[i], num, 26, 4);
- else if (j == 3)
- results[i] = bitset(results[i], num, 24, 2);
- else if (j == 4)
- results[i] = bitset(results[i], num, 20, 4);
- else if (j == 6)
- results[i] = bitset(results[i], num, 18, 2);
- else if (j == 7)
- results[i] = bitset(results[i], num, 14, 4);
- else if (j == 9)
- results[i] = bitset(results[i], num, 11, 3);
- else if (j == 10)
- results[i] = bitset(results[i], num, 7, 4);
- else if (j == 12)
- results[i] = bitset(results[i], num, 4, 3);
- else if (j == 13)
- results[i] = bitset(results[i], num, 0, 4);
- //printf("j: %i, val: %i\n", j, num);
- }
- }
- for (i = 0; i < total; ++i) {
- if (results[i] == -1) {
- printf("INVALID\n");
- } else {
- printf("%i\n", results[i]);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement