Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdbool.h>
- int main (void) {
- int totalCharacters = 0;
- int totalStrings = 0;
- int i;
- int finger;
- bool onlyRight = true;
- bool wasChar = false;
- bool onlyLeft = true;
- bool alreadyFound = false;
- int leftPinkyCount = 0;
- int leftRingCount = 0;
- int leftMiddleCount = 0;
- int leftPointerCount = 0;
- int rightPinkyCount = 0;
- int rightRingCount = 0;
- int rightMiddleCount = 0;
- int rightPointerCount = 0;
- int totalKeyStrokes = 0;
- int onlyRightCount = 0;
- int onlyLeftCount = 0;
- /* left hand */
- char leftPinky[] = {'`', '1', 'q', 'a', 'z' , '\0'};
- char shiftLeftPinky[] = {'~', '!', 'Q', 'A', 'Z' , '\0'};
- char leftRing[] = {'2', 'w', 's', 'x' , '\0'};
- char shiftLeftRing[] = {'@', 'W', 'S', 'X' , '\0'};
- char leftMiddle[] = {'3', 'e', 'd', 'c' , '\0'};
- char shiftLeftMiddle[] = {'#', 'E', 'D', 'C' , '\0'};
- char leftPointer[] = {'4', 'r', 'f', 'v', '5', 't', 'g', 'b' , '\0'};
- char shiftLeftPointer[] = {'$', 'R', 'F', 'V', '%', 'T', 'G', 'B' , '\0'};
- /* right hand */
- char rightPinky[] = {'/', '\'', ';', ']', '[', '\\', 'p', '0', '-', '=' , '\0'};
- char shiftRightPinky[] = {'?', '\"', ':', '{', '}', '|', 'P', ')', '_', '+' , '\0'};
- char rightRing[] = {'9', 'o', 'l', '.' , '\0'};
- char shiftRightRing[] = {'(', 'O', 'L', '>' , '\0'};
- char rightMiddle[] = {'8', 'i', 'k', ',' , '\0'};
- char shiftRightMiddle[] = {'*', 'I', 'K', '<' , '\0'};
- char rightPointer[] = {'6', '7', 'y', 'u', 'h', 'j', 'n', 'm' , '\0'};
- char shiftRightPointer[] = {'^', '&', 'Y', 'U', 'H', 'J', 'N', 'M' , '\0'};
- char currentChar;
- while (! feof(stdin)){
- alreadyFound = false;
- scanf("%c", ¤tChar);
- if ( isalnum(currentChar) || ispunct(currentChar) ){
- /* ---------------- SEARCH LEFT HAND --------------*/
- //left pinky
- for (i=0; i < strlen(leftPinky) && !alreadyFound; i++){
- if (currentChar == leftPinky[i]){
- leftPinkyCount++;
- alreadyFound = true;
- onlyRight = false;
- }
- if (currentChar == shiftLeftPinky[i]){
- leftPinkyCount++;
- rightPinkyCount++;
- alreadyFound = true;
- onlyRight = false;
- onlyLeft = false;
- }
- }
- //left ring
- for (i=0; i < strlen(leftRing) && !alreadyFound; i++){
- if (currentChar == leftRing[i]){
- leftRingCount++;
- alreadyFound = true;
- onlyRight = false;
- }
- if (currentChar == shiftLeftRing[i]){
- leftRingCount++;
- rightPinkyCount++;
- alreadyFound = true;
- onlyRight = false;
- onlyLeft = false;
- }
- }
- //left middle
- for (i=0; i < strlen(leftMiddle) && !alreadyFound; i++){
- if (currentChar == leftMiddle[i]){
- leftMiddleCount++;
- alreadyFound = true;
- onlyRight = false;
- }
- if (currentChar == shiftLeftMiddle[i]){
- leftMiddleCount++;
- rightPinkyCount++;
- alreadyFound = true;
- onlyRight = false;
- onlyLeft = false;
- }
- }
- //left index
- for (i=0; i < strlen(leftPointer) && !alreadyFound; i++){
- if (currentChar == leftPointer[i]){
- leftPointerCount++;
- alreadyFound = true;
- onlyRight = false;
- }
- if (currentChar == shiftLeftPointer[i]){
- leftPointerCount++;
- rightPinkyCount++;
- alreadyFound = true;
- onlyRight = false;
- onlyLeft = false;
- }
- }
- /* ---------------- SEARCH RIGHT HAND --------------*/
- //right pinky
- for (i=0; i < strlen(rightPinky) && !alreadyFound; i++){
- if (currentChar == rightPinky[i]){
- rightPinkyCount++;
- alreadyFound = true;
- onlyLeft = false;
- }
- if (currentChar == shiftRightPinky[i]){
- rightPinkyCount++;
- leftPinkyCount++;
- alreadyFound = true;
- onlyLeft = false;
- onlyRight = false;
- }
- }
- //right ring
- for (i=0; i < strlen(rightRing) && !alreadyFound; i++){
- if (currentChar == rightRing[i]){
- rightRingCount++;
- alreadyFound = true;
- onlyLeft = false;
- }
- if (currentChar == shiftRightRing[i]){
- rightRingCount++;
- leftPinkyCount++;
- alreadyFound = true;
- onlyLeft = false;
- onlyRight = false;
- }
- }
- //right middle
- for (i=0; i < strlen(rightMiddle) && !alreadyFound; i++){
- if (currentChar == rightMiddle[i]){
- rightMiddleCount++;
- alreadyFound = true;
- onlyLeft = false;
- }
- if (currentChar == shiftRightMiddle[i]){
- rightMiddleCount++;
- leftPinkyCount++;
- alreadyFound = true;
- onlyLeft = false;
- onlyRight = false;
- }
- }
- //right pointer
- for (i=0; i < strlen(rightPointer) && !alreadyFound; i++){
- if (currentChar == rightPointer[i]){
- rightPointerCount++;
- alreadyFound = true;
- onlyLeft = false;
- }
- if (currentChar == shiftRightPointer[i]){
- rightPointerCount++;
- leftPinkyCount++;
- alreadyFound = true;
- onlyLeft = false;
- onlyRight = false;
- }
- }
- wasChar = true;
- totalCharacters++;
- }
- else if ( isspace(currentChar) && wasChar){
- if (onlyLeft){
- onlyLeftCount++;
- }
- if (onlyRight){
- onlyRightCount++;
- }
- totalStrings++;
- onlyRight = true;
- onlyLeft = true;
- wasChar = false;
- }
- }
- scanf(" %s ", string);
- int leftHand = leftPinkyCount + leftRingCount + leftMiddleCount + leftPointerCount;
- int rightHand = rightPinkyCount + rightRingCount + rightMiddleCount + rightPointerCount;
- totalKeyStrokes = leftHand + rightHand;
- printf("%d strings entered, %d total characters\n", totalStrings, totalCharacters);
- printf("\t %d typed using only the left hand\n", onlyLeftCount);
- printf("\t %d typed using only the right hand\n", onlyRightCount);
- printf("%d total keystrokes\n", totalKeyStrokes);
- printf("\t %d - Left index\n", leftPointerCount);
- printf("\t %d - Left middle\n", leftMiddleCount);
- printf("\t %d - Left ring\n", leftRingCount);
- printf("\t %d - Left pinky\n", leftPinkyCount);
- printf("\t %d - Right index\n", rightPointerCount);
- printf("\t %d - Right middle\n", rightMiddleCount);
- printf("\t %d - Right ring\n", rightRingCount);
- printf("\t %d - Right pinky\n", rightPinkyCount);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement