OneCompiler

cyrillic (russian) alphabet to english alphabet

2036

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);
        }
    }
}