Skip to content

Instantly share code, notes, and snippets.

@CuriousLearner
Created March 11, 2025 21:45
Show Gist options
  • Save CuriousLearner/b0c3ab32c9151b52474eddee44debf77 to your computer and use it in GitHub Desktop.
Save CuriousLearner/b0c3ab32c9151b52474eddee44debf77 to your computer and use it in GitHub Desktop.
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