Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdbool.h>
  5.  
  6.  
  7. int main (void) {
  8.    int totalCharacters = 0;
  9.    int totalStrings = 0;
  10.    int i;
  11.    int finger;
  12.  
  13.    bool onlyRight = true;
  14.    bool wasChar = false;
  15.    bool onlyLeft = true;
  16.    bool alreadyFound = false;
  17.  
  18.  
  19.    int leftPinkyCount = 0;
  20.    int leftRingCount = 0;
  21.    int leftMiddleCount = 0;
  22.    int leftPointerCount = 0;
  23.  
  24.    int rightPinkyCount = 0;
  25.    int rightRingCount = 0;
  26.    int rightMiddleCount = 0;
  27.    int rightPointerCount = 0;
  28.  
  29.    int totalKeyStrokes = 0;
  30.    int onlyRightCount = 0;
  31.    int onlyLeftCount = 0;
  32.  
  33.  
  34.    /* left hand */
  35.    char leftPinky[] = {'`', '1', 'q', 'a', 'z' , '\0'};
  36.    char shiftLeftPinky[] = {'~', '!', 'Q', 'A', 'Z' , '\0'};
  37.    char leftRing[] = {'2', 'w', 's', 'x' , '\0'};
  38.    char shiftLeftRing[] = {'@', 'W', 'S', 'X' , '\0'};
  39.    char leftMiddle[] = {'3', 'e', 'd', 'c' , '\0'};
  40.    char shiftLeftMiddle[] = {'#', 'E', 'D', 'C' , '\0'};
  41.    char leftPointer[] = {'4', 'r', 'f', 'v', '5', 't', 'g', 'b' , '\0'};
  42.    char shiftLeftPointer[] = {'$', 'R', 'F', 'V', '%', 'T', 'G', 'B' , '\0'};
  43.  
  44.  
  45.    /* right hand */
  46.    char rightPinky[] = {'/', '\'', ';', ']', '[', '\\', 'p', '0', '-', '=' , '\0'};
  47.    char shiftRightPinky[] = {'?', '\"', ':', '{', '}', '|', 'P', ')', '_', '+' , '\0'};
  48.    char rightRing[] = {'9', 'o', 'l', '.' , '\0'};
  49.    char shiftRightRing[] = {'(', 'O', 'L', '>' , '\0'};
  50.    char rightMiddle[] = {'8', 'i', 'k', ',' , '\0'};
  51.    char shiftRightMiddle[] = {'*', 'I', 'K', '<' , '\0'};
  52.    char rightPointer[] = {'6', '7', 'y', 'u', 'h', 'j', 'n', 'm' , '\0'};
  53.    char shiftRightPointer[] = {'^', '&', 'Y', 'U', 'H', 'J', 'N', 'M' , '\0'};
  54.  
  55.    char currentChar;
  56.    while (! feof(stdin)){
  57.       alreadyFound = false;
  58.       scanf("%c", &currentChar);
  59.       if ( isalnum(currentChar) || ispunct(currentChar) ){
  60.  
  61.          /* ---------------- SEARCH LEFT HAND --------------*/
  62.          //left pinky
  63.          for (i=0; i < strlen(leftPinky) && !alreadyFound; i++){
  64.             if (currentChar == leftPinky[i]){
  65.                leftPinkyCount++;
  66.                alreadyFound = true;
  67.                onlyRight = false;
  68.             }
  69.             if (currentChar == shiftLeftPinky[i]){
  70.                leftPinkyCount++;
  71.                rightPinkyCount++;
  72.                alreadyFound = true;
  73.                onlyRight = false;
  74.                onlyLeft = false;
  75.             }
  76.          }
  77.          //left ring
  78.          for (i=0; i < strlen(leftRing) && !alreadyFound; i++){
  79.             if (currentChar == leftRing[i]){
  80.                leftRingCount++;
  81.                alreadyFound = true;
  82.                onlyRight = false;
  83.             }
  84.             if (currentChar == shiftLeftRing[i]){
  85.                leftRingCount++;
  86.                rightPinkyCount++;
  87.                alreadyFound = true;
  88.                onlyRight = false;
  89.                onlyLeft = false;
  90.             }
  91.          }
  92.          //left middle
  93.          for (i=0; i < strlen(leftMiddle) && !alreadyFound; i++){
  94.             if (currentChar == leftMiddle[i]){
  95.                leftMiddleCount++;
  96.                alreadyFound = true;
  97.                onlyRight = false;
  98.             }
  99.             if (currentChar == shiftLeftMiddle[i]){
  100.                leftMiddleCount++;
  101.                rightPinkyCount++;
  102.                alreadyFound = true;
  103.                onlyRight = false;
  104.                onlyLeft = false;
  105.             }
  106.          }
  107.          //left index
  108.          for (i=0; i < strlen(leftPointer) && !alreadyFound; i++){
  109.             if (currentChar == leftPointer[i]){
  110.                leftPointerCount++;
  111.                alreadyFound = true;
  112.                onlyRight = false;
  113.             }
  114.             if (currentChar == shiftLeftPointer[i]){
  115.                leftPointerCount++;
  116.                rightPinkyCount++;
  117.                alreadyFound = true;
  118.                onlyRight = false;
  119.                onlyLeft = false;
  120.             }
  121.          }
  122.  
  123.          /* ---------------- SEARCH RIGHT HAND --------------*/
  124.          //right pinky
  125.          for (i=0; i < strlen(rightPinky) && !alreadyFound; i++){
  126.             if (currentChar == rightPinky[i]){
  127.                rightPinkyCount++;
  128.                alreadyFound = true;
  129.                onlyLeft = false;
  130.             }
  131.             if (currentChar == shiftRightPinky[i]){
  132.                rightPinkyCount++;
  133.                leftPinkyCount++;
  134.                alreadyFound = true;
  135.                onlyLeft = false;
  136.                onlyRight = false;
  137.             }
  138.          }
  139.          //right ring
  140.          for (i=0; i < strlen(rightRing) && !alreadyFound; i++){
  141.             if (currentChar == rightRing[i]){
  142.                rightRingCount++;
  143.                alreadyFound = true;
  144.                onlyLeft = false;
  145.             }
  146.             if (currentChar == shiftRightRing[i]){
  147.                rightRingCount++;
  148.                leftPinkyCount++;
  149.                alreadyFound = true;
  150.                onlyLeft = false;
  151.                onlyRight = false;
  152.             }
  153.          }
  154.          //right middle
  155.          for (i=0; i < strlen(rightMiddle) && !alreadyFound; i++){
  156.             if (currentChar == rightMiddle[i]){
  157.                rightMiddleCount++;
  158.                alreadyFound = true;
  159.                onlyLeft = false;
  160.             }
  161.             if (currentChar == shiftRightMiddle[i]){
  162.                rightMiddleCount++;
  163.                leftPinkyCount++;
  164.                alreadyFound = true;
  165.                onlyLeft = false;
  166.                onlyRight = false;
  167.             }
  168.          }
  169.          //right pointer
  170.          for (i=0; i < strlen(rightPointer) && !alreadyFound; i++){
  171.             if (currentChar == rightPointer[i]){
  172.                rightPointerCount++;
  173.                alreadyFound = true;
  174.                onlyLeft = false;
  175.             }
  176.             if (currentChar == shiftRightPointer[i]){
  177.                rightPointerCount++;
  178.                leftPinkyCount++;
  179.                alreadyFound = true;
  180.                onlyLeft = false;
  181.                onlyRight = false;
  182.             }
  183.          }
  184.          wasChar = true;
  185.          totalCharacters++;
  186.       }
  187.       else if ( isspace(currentChar) && wasChar){
  188.          if (onlyLeft){
  189.             onlyLeftCount++;
  190.          }
  191.          if (onlyRight){
  192.             onlyRightCount++;
  193.          }
  194.          totalStrings++;
  195.          onlyRight = true;
  196.          onlyLeft = true;
  197.          wasChar = false;
  198.       }
  199.    }
  200.  
  201.  
  202.    scanf(" %s ", string);
  203.  
  204.    int leftHand = leftPinkyCount + leftRingCount + leftMiddleCount + leftPointerCount;
  205.    int rightHand = rightPinkyCount + rightRingCount + rightMiddleCount + rightPointerCount;
  206.    totalKeyStrokes = leftHand + rightHand;
  207.  
  208.    printf("%d strings entered, %d total characters\n", totalStrings, totalCharacters);
  209.       printf("\t %d typed using only the left hand\n", onlyLeftCount);
  210.       printf("\t %d typed using only the right hand\n", onlyRightCount);
  211.    printf("%d total keystrokes\n", totalKeyStrokes);
  212.       printf("\t %d - Left index\n", leftPointerCount);
  213.       printf("\t %d - Left middle\n", leftMiddleCount);
  214.       printf("\t %d - Left ring\n", leftRingCount);
  215.       printf("\t %d - Left pinky\n", leftPinkyCount);
  216.  
  217.       printf("\t %d - Right index\n", rightPointerCount);
  218.       printf("\t %d - Right middle\n", rightMiddleCount);
  219.       printf("\t %d - Right ring\n", rightRingCount);
  220.       printf("\t %d - Right pinky\n", rightPinkyCount);
  221.  
  222.  
  223.    return 0;
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement