cyrillic (russian) alphabet to english alphabet
python is the original and it is more accurate
input
Россия - священная наша держава,
Россия - любимая наша страна.
Могучая воля, великая слава -
Твое достоянье на все времена!
Славься, Отечество наше свободное,
Братских народов союз вековой,
Предками данная мудрость народная!
Славься, страна! Мы гордимся тобой!
От южных морей до полярного края
Раскинулись наши леса и поля.
Одна ты на свете! Одна ты такая -
Хранимая Богом родная земля!
Славься, Отечество наше свободное,
Братских народов союз вековой,
Предками данная мудрость народная!
Славься, страна! Мы гордимся тобой!
Широкий простор для мечты и для жизни
Грядущие нам открывают года.
Нам силу дает наша верность Отчизне.
Так было, так есть и так будет всегда!
Славься, Отечество наше свободное,
Братских народов союз вековой,
Предками данная мудрость народная!
Славься, страна! Мы гордимся тобой!
output
Rossiya - svyashchennаya nаshа derzhаvа,
Rossiya - lyubimаya nаshа strаnа.
Moguchаya volya, velikаya slаvа -
Tvoye dostoyan'ye nа vse vremenа!
Slаv'sya, Otechestvo nаshe svobodnoye,
Brаtskikh nаrodov soyuz vekovoy,
Predkаmi dаnnаya mudrost' nаrodnаya!
Slаv'sya, strаnа! My gordimsya toboy!
Ot yuzhnykh morey do polyarnogo krаya
Rаskinulis' nаshi lesа i polya.
Odnа ty nа svete! Odnа ty tаkаya -
Khrаnimаya Bogom rodnаya zemlya!
Slаv'sya, Otechestvo nаshe svobodnoye,
Brаtskikh nаrodov soyuz vekovoy,
Predkаmi dаnnаya mudrost' nаrodnаya!
Slаv'sya, strаnа! My gordimsya toboy!
Shirokiy prostor dlya mechty i dlya zhizni
Gryadushchiye nаm otkryvаyut godа.
Nаm silu dаyet nаshа vernost' Otchizne.
Tаk bylo, tаk yest' i tаk budet vsegdа!
Slаv'sya, Otechestvo nаshe svobodnoye,
Brаtskikh nаrodov soyuz vekovoy,
Predkаmi dаnnаya mudrost' nаrodnаya!
Slаv'sya, strаnа! My gordimsya toboy!
here's the program
key = {
"a" : "a",
"б" : "b",
"в" : "v",
"г" : "g",
"д" : "d",
"ё" : "yo",
"ж" : "zh",
"з" : "z",
"и" : "i",
"й" : "y",
"к" : "k",
"л" : "l",
"м" : "m",
"н" : "n",
"о" : "o",
"п" : "p",
"р" : "r",
"с" : "s",
"т" : "t",
"у" : "u",
"ф" : "f",
"х" : "kh",
"ц" : "ts",
"ч" : "ch",
"ш" : "sh",
"щ" : "shch",
"ъ" : '"',
"ы" : "y",
"ь" : "'",
"э" : "e",
"ю" : "yu",
"я" : "ya",
"А" : "A",
"Б" : "B",
"В" : "V",
"Г" : "G",
"Д" : "D",
"Ё" : "Yo",
"Ж" : "Zh",
"З" : "Z",
"И" : "I",
"Й" : "Y",
"К" : "K",
"Л" : "L",
"М" : "M",
"Н" : "N",
"О" : "O",
"П" : "P",
"Р" : "R",
"С" : "S",
"Т" : "T",
"У" : "U",
"Ф" : "F",
"Х" : "Kh",
"Ц" : "Ts",
"Ч" : "Ch",
"Ш" : "Sh",
"Щ" : "Shch",
"Ъ" : '"',
"Ы" : "Y",
"Ь" : "'",
"Э" : "E",
"Ю" : "Yu",
"Я" : "Ya",
}
inps = []
do = True
while do:
try:
inps.append(input())
except:
do = False
for line in range(len(inps)):
string = ""
ilist = inps[line]
for token in range(len(ilist)):
tok = ilist[token]
if tok == "е" or tok == "Е":
if token == 0:
string += "Ye"
else:
yelist = [
" ",
"а",
"у",
"о",
"ы",
"и",
"э",
"я",
"ю",
"ё",
"е",
"ь",
"ъ",
"А",
"У",
"О",
"Ы",
"И",
"Э",
"Я",
"Ю",
"Ё",
"Е",
"Ь",
"Ъ",
]
if ilist[token-1] in yelist:
if tok == tok.lower():
string += "ye"
else:
string += "Ye"
else:
string += "e"
else:
if ilist[token] in key:
string += key[ilist[token]]
else:
string += ilist[token]
print(string)
heres the version chatgpt translated to c++
#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>
#include <locale>
#include <codecvt> // for codec conversions
#include <algorithm>
int main() {
// Set up the environment to use UTF-8
std::locale::global(std::locale("en_US.UTF-8"));
std::wcin.imbue(std::locale());
std::wcout.imbue(std::locale());
// Transliteration map for wide characters
std::unordered_map<wchar_t, std::wstring> key = {
{L'а', L"a"}, {L'б', L"b"}, {L'в', L"v"}, {L'г', L"g"}, {L'д', L"d"},
{L'ё', L"yo"}, {L'ж', L"zh"}, {L'з', L"z"}, {L'и', L"i"}, {L'й', L"y"},
{L'к', L"k"}, {L'л', L"l"}, {L'м', L"m"}, {L'н', L"n"}, {L'о', L"o"},
{L'п', L"p"}, {L'р', L"r"}, {L'с', L"s"}, {L'т', L"t"}, {L'у', L"u"},
{L'ф', L"f"}, {L'х', L"kh"}, {L'ц', L"ts"}, {L'ч', L"ch"}, {L'ш', L"sh"},
{L'щ', L"shch"}, {L'ъ', L"\""}, {L'ы', L"y"}, {L'ь', L"'"}, {L'э', L"e"},
{L'ю', L"yu"}, {L'я', L"ya"},
{L'А', L"A"}, {L'Б', L"B"}, {L'В', L"V"}, {L'Г', L"G"}, {L'Д', L"D"},
{L'Ё', L"Yo"}, {L'Ж', L"Zh"}, {L'З', L"Z"}, {L'И', L"I"}, {L'Й', L"Y"},
{L'К', L"K"}, {L'Л', L"L"}, {L'М', L"M"}, {L'Н', L"N"}, {L'О', L"O"},
{L'П', L"P"}, {L'Р', L"R"}, {L'С', L"S"}, {L'Т', L"T"}, {L'У', L"U"},
{L'Ф', L"F"}, {L'Х', L"Kh"}, {L'Ц', L"Ts"}, {L'Ч', L"Ch"}, {L'Ш', L"Sh"},
{L'Щ', L"Shch"}, {L'Ъ', L"\""}, {L'Ы', L"Y"}, {L'Ь', L"'"}, {L'Э', L"E"},
{L'Ю', L"Yu"}, {L'Я', L"Ya"}
};
// Characters that precede 'е' and require "ye"
std::vector<wchar_t> yeList = {L' ', L'а', L'у', L'о', L'ы', L'и', L'э', L'я', L'ю', L'ё', L'е', L'ь', L'ъ'};
// Input reading
std::vector<std::wstring> inps;
std::wstring line;
// Actual input: read until EOF (Ctrl+D or Ctrl+Z)
while (std::getline(std::wcin, line)) {
inps.push_back(line);
}
// Process each line
for (const auto& ilist : inps) {
std::wstring result;
for (size_t i = 0; i < ilist.length(); ++i) {
wchar_t tok = ilist[i];
if (tok == L'е') {
if (i == 0) {
result += L"ye";
} else {
wchar_t prev_char = ilist[i - 1];
if (std::find(yeList.begin(), yeList.end(), prev_char) != yeList.end()) {
result += L"ye";
} else {
result += L"e";
}
}
} else {
if (key.find(tok) != key.end()) {
result += key[tok];
} else {
result += tok;
}
}
}
// Output the transliterated line
std::wcout << result << std::endl;
}
return 0;
}
heres the version chatgpt translated to c#
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Transliteration map for characters
Dictionary<char, string> key = new Dictionary<char, string>()
{
{'а', "a"}, {'б', "b"}, {'в', "v"}, {'г', "g"}, {'д', "d"},
{'ё', "yo"}, {'ж', "zh"}, {'з', "z"}, {'и', "i"}, {'й', "y"},
{'к', "k"}, {'л', "l"}, {'м', "m"}, {'н', "n"}, {'о', "o"},
{'п', "p"}, {'р', "r"}, {'с', "s"}, {'т', "t"}, {'у', "u"},
{'ф', "f"}, {'х', "kh"}, {'ц', "ts"}, {'ч', "ch"}, {'ш', "sh"},
{'щ', "shch"}, {'ъ', "\""}, {'ы', "y"}, {'ь', "'"}, {'э', "e"},
{'ю', "yu"}, {'я', "ya"},
{'А', "A"}, {'Б', "B"}, {'В', "V"}, {'Г', "G"}, {'Д', "D"},
{'Ё', "Yo"}, {'Ж', "Zh"}, {'З', "Z"}, {'И', "I"}, {'Й', "Y"},
{'К', "K"}, {'Л', "L"}, {'М', "M"}, {'Н', "N"}, {'О', "O"},
{'П', "P"}, {'Р', "R"}, {'С', "S"}, {'Т', "T"}, {'У', "U"},
{'Ф', "F"}, {'Х', "Kh"}, {'Ц', "Ts"}, {'Ч', "Ch"}, {'Ш', "Sh"},
{'Щ', "Shch"}, {'Ъ', "\""}, {'Ы', "Y"}, {'Ь', "'"}, {'Э', "E"},
{'Ю', "Yu"}, {'Я', "Ya"}
};
// Characters that precede 'е' and require "ye"
List<char> yeList = new List<char> { ' ', 'а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е', 'ь', 'ъ' };
// Input reading
List<string> inps = new List<string>();
string line;
// Read until EOF (Ctrl+D for Unix, Ctrl+Z for Windows)
while ((line = Console.ReadLine()) != null)
{
inps.Add(line);
}
// Process each line
foreach (var ilist in inps)
{
string result = "";
for (int i = 0; i < ilist.Length; i++)
{
char tok = ilist[i];
if (tok == 'е')
{
if (i == 0)
{
result += "ye";
}
else
{
char prev_char = ilist[i - 1];
if (yeList.Contains(prev_char))
{
result += "ye";
}
else
{
result += "e";
}
}
}
else
{
if (key.ContainsKey(tok))
{
result += key[tok];
}
else
{
result += tok;
}
}
}
// Output the transliterated line
Console.WriteLine(result);
}
}
}