Created
March 11, 2025 21:45
-
-
Save CuriousLearner/b0c3ab32c9151b52474eddee44debf77 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"bufio" | |
"fmt" | |
"os" | |
"strings" | |
) | |
// Mapping from QWERTY to Dvorak | |
var qwertyToDvorak = map[rune]rune{ | |
'`': '`', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', '0': '0', '-': '[', '=': ']', | |
'q': '\'', 'w': ',', 'e': '.', 'r': 'p', 't': 'y', 'y': 'f', 'u': 'g', 'i': 'c', 'o': 'r', 'p': 'l', '[': '/', ']': '=', '\\': '\\', | |
'a': 'a', 's': 'o', 'd': 'e', 'f': 'u', 'g': 'i', 'h': 'd', 'j': 'h', 'k': 't', 'l': 'n', ';': 's', '\'': '-', | |
'z': ';', 'x': 'q', 'c': 'j', 'v': 'k', 'b': 'x', 'n': 'b', 'm': 'm', ',': 'w', '.': 'v', '/': 'z', | |
// Uppercase letters | |
'Q': '"', 'W': '<', 'E': '>', 'R': 'P', 'T': 'Y', 'Y': 'F', 'U': 'G', 'I': 'C', 'O': 'R', 'P': 'L', '{': '?', '}': '+', '|': '|', | |
'A': 'A', 'S': 'O', 'D': 'E', 'F': 'U', 'G': 'I', 'H': 'D', 'J': 'H', 'K': 'T', 'L': 'N', ':': 'S', // Removed duplicate mapping of single quote | |
'Z': ':', 'X': 'Q', 'C': 'J', 'V': 'K', 'B': 'X', 'N': 'B', 'M': 'M', '<': 'W', '>': 'V', '?': 'Z', | |
} | |
// Reverse Mapping from Dvorak to QWERTY | |
var dvorakToQwerty = make(map[rune]rune) | |
func init() { | |
for qwertyChar, dvorakChar := range qwertyToDvorak { | |
dvorakToQwerty[dvorakChar] = qwertyChar | |
} | |
} | |
func convertText(input string, mapping map[rune]rune) string { | |
var result strings.Builder | |
for _, char := range input { | |
if mappedChar, found := mapping[char]; found { | |
result.WriteRune(mappedChar) | |
} else { | |
result.WriteRune(char) | |
} | |
} | |
return result.String() | |
} | |
func main() { | |
reader := bufio.NewReader(os.Stdin) | |
fmt.Println("Choose conversion mode:") | |
fmt.Println("1: QWERTY to Dvorak") | |
fmt.Println("2: Dvorak to QWERTY") | |
fmt.Print("Enter choice: ") | |
choice, _ := reader.ReadString('\n') | |
choice = strings.TrimSpace(choice) | |
var mapping map[rune]rune | |
if choice == "1" { | |
mapping = qwertyToDvorak | |
fmt.Println("Selected: QWERTY to Dvorak") | |
} else if choice == "2" { | |
mapping = dvorakToQwerty | |
fmt.Println("Selected: Dvorak to QWERTY") | |
} else { | |
fmt.Println("Invalid choice, exiting.") | |
return | |
} | |
for { | |
fmt.Print("Enter text (or type 'exit' to quit): ") | |
input, _ := reader.ReadString('\n') | |
input = strings.TrimSpace(input) | |
if input == "exit" { | |
fmt.Println("Exiting...") | |
break | |
} | |
converted := convertText(input, mapping) | |
fmt.Println("Converted Output:", converted) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment