Transliterate English text using the Greek alphabet

From Rosetta Code
Revision as of 04:56, 18 June 2022 by Wherrera (talk | contribs) (shorten replacements again)
Transliterate English text using the Greek alphabet is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Rules

A rather silly little task intended as a bit of fun as well as a simple exercise in text substitution. So, if you're a Greek speaker or an expert in ancient Greek, please don't take it too seriously!

As there isn't a one-to-one correspondence between the English and Greek alphabets, we need some rules:

Greek letter Corresponding English letter(s)
alpha a
beta b or v
gamma g
delta d
epsilon e (but not ee)
zeta z
eta h or ee (but not ch, kh, ph, rh or th)
theta th
iota i or j
kappa c, k, q or ck (but not ch and kh)
lambda l
mu m
nu n
xi x
omicron o (but not oo)
pi p (but not ph or ps)
rho r or rh
sigma s (but not ps)
tau t (but not th)
upsilon u or y
phi f or ph
chi ch or kh
psi ps
omega w or oo

In the case of lower-case sigma, use ς when s is the final letter of an English word or σ otherwise.

Ignore Greek diacritics (accents and breathings) but use the same capitalization, spacing and punctuation as in the English text.

Example

English: The quick brown fox jumped over the lazy dog.

Greek: Θε κυικ βροων φοξ ιυμπεδ οβερ θε λαζυ δογ.

Task

Transliterate the following English text into Greek using the above rules:

I was looking at some rhododendrons in my back garden,
dressed in my khaki shorts, when the telephone rang.

As I answered it, I cheerfully glimpsed that the July sun
caused a fragment of black pine wax to ooze on the velvet quilt
laying in my patio.

If your language does not support the printing of non-ascii characters, then you can instead transliterate the following lower-case pangram:

sphinx of black quartz, judge my vow.

Just represent the Greek letters by their names in angle brackets. For example:

the dog => <theta><epsilon> <delta><omicron><gamma>
Reference


Other tasks related to string operations:
Metrics
Counting
Remove/replace
Anagrams/Derangements/shuffling
Find/Search/Determine
Formatting
Song lyrics/poems/Mad Libs/phrases
Tokenize
Sequences



Julia

<lang ruby>const texts = [ """The quick brown fox jumped over the lazy dog.""", """I was looking at some rhododendrons in my back garden, dressed in my khaki shorts, when the telephone rang.

As I answered it, I cheerfully glimpsed that the July sun caused a fragment of black pine wax to ooze on the velvet quilt laying in my patio.""", """sphinx of black quartz, judge my vow."""]

const replacements = [

   "ch" => "χ", "th" => "θ", "ps" => "ψ", "ph" => "f", r"s(\W)" => s"ς\1", "Ch" => "Χ",
   "Th" => "Θ", "Ps" => "Ψ", "Ph" => "F", "ee" => "h", "ck" => "κ", "rh" => "r", "kh" => "κ",
   "Kh" => "Κ", "oo" => "w", "a" => "α", "b" => "β", "c" => "κ", "d" => "δ", "e" => "ε",
   "f" => "φ", "g" => "γ", "h" => "η", "i" => "ι", "j" => "ι", "k" => "κ", "l" => "λ",
   "m" => "μ", "n" => "ν", "o" => "ο", "p" => "π", "q" => "κ", "r" => "ρ", "s" => "σ",
   "t" => "τ", "u" => "υ", "v" => "β", "w" => "ω", "x" => "ξ", "y" => "υ", "z" => "ζ",
   "D" => "Δ", "F" => "Φ", "G" => "Γ", "J" => "I", "L" => "Λ", "P" => "Π", "Q" => "Κ",
   "R" => "Ρ", "S" => "Σ", "Y" => "U", "W" => "Ω", "X" => "Ξ"]

for txt in texts

   println("$txt\n=>")
   for pair in replacements
       txt = replace(txt, pair)
   end
   println("$txt\n", "="^65)

end

</lang>

Output:
The quick brown fox jumped over the lazy dog.
=>
Θε κυικ βροων φοξ ιυμπεδ οβερ θε λαζυ δογ.
=================================================================
I was looking at some rhododendrons in my back garden,
dressed in my khaki shorts, when the telephone rang.

As I answered it, I cheerfully glimpsed that the July sun
caused a fragment of black pine wax to ooze on the velvet quilt
laying in my patio.
=>
Ι ωας λωκινγ ατ σομε ροδοδενδρονς ιν μυ βακ γαρδεν,
δρεσσεδ ιν μυ κακι σηορτς, ωηεν θε τελεφονε ρανγ.

Ας Ι ανσωερεδ ιτ, Ι χηρφυλλυ γλιμψεδ θατ θε Iυλυ συν
cαυσεδ α φραγμεντ οφ βλακ πινε ωαξ το ωζε ον θε βελβετ κυιλτ
λαυινγ ιν μυ πατιο.
=================================================================
sphinx of black quartz, judge my vow.
=>
σφινξ οφ βλακ κυαρτζ, ιυδγε μυ βοω.
=================================================================

Raku

<lang perl6>sub to-Greek (Str $string is copy) {

   my %pre = :Ph<F>, :ck<k>, :ee<h>, :J, :rh<r>,:oo<w>, :ph<f>, 's ' => 'ς ';
   my %post =
   :ch<χ>, :th<θ>, :ps<ψ>, :Ch<Χ>, :Th<Θ>, :Ps<Ψ>, :kh<χ>, :a<α>, :b<β>, :d<δ>,
   :e<ε>, :f<φ>, :g<γ>, :h<η>, :i<ι>, :j<ι>, :k<κ>, :l<λ>, :m<μ>, :n<ν>, :o<ο>,
   :p<π>, :q<κ>, :r<ρ>, :s<σ>, :t<τ>, :u<υ>, :v<β>, :w<ω>, :x<ξ>, :y<υ>, :z<ζ>,
   :A<Α>, :B<Β>, :D<Δ>, :E<Ε>, :F<Φ>, :G<Γ>, :H<Η>, :I<Ι>, :L<Λ>, :M<Μ>, :N<Ν>,
   :O<Ο>, :P<Π>, :Q<Κ>, :R<Ρ>, :S<Σ>, :T<Τ>, :U<Υ>, :W<Ω>, :X<Ξ>, :Z<Ζ>;
   $string.=subst(:g, .key, .value ) for flat %pre, %post;
   $string

}

my $text = chomp q:to/ENGLISH/;

   The quick brown fox jumped over the lazy dog.
   I was looking at some rhododendrons in my back garden,
   dressed in my khaki shorts, when the telephone rang.
   As I answered it, I cheerfully glimpsed that the July sun
   caused a fragment of black pine wax to ooze on the velvet quilt
   laying in my patio.
   sphinx of black quartz, judge my vow.
   ENGLISH

say "English:\n\n" ~ $text ~ "\n" ~ '=' x 80;

say "\"Greek\":\n\n" ~ $text.&to-Greek ~ "\n" ~ '=' x 80;

say "Or, to named characters:\n\n$_\n" ~

 .&to-Greek.comb.map({ .match(/\W/) ?? $_ !!
     '<' ~ .uniname.subst( /.+<?after LETTER\s>/).lc ~ '>'
 }).join
 given 'sphinx of black quartz, judge my vow.';</lang>
Output:
English:

The quick brown fox jumped over the lazy dog.

I was looking at some rhododendrons in my back garden,
dressed in my khaki shorts, when the telephone rang.

As I answered it, I cheerfully glimpsed that the July sun
caused a fragment of black pine wax to ooze on the velvet quilt
laying in my patio.

sphinx of black quartz, judge my vow.
================================================================================
"Greek":

Τηε κυικ βροων φοξ ιυμπεδ οβερ τηε λαζυ δογ.

Ι ωας λωκινγ ατ σομε ροδοδενδρονς ιν μυ βακ γαρδεν,
δρεσσεδ ιν μυ κηακι σηορτσ, ωηεν τηε τελεφονε ρανγ.

Ας Ι ανσωερεδ ιτ, Ι χηρφυλλυ γλιμπσεδ τηατ τηε Ιυλυ συν
cαυσεδ α φραγμεντ οφ βλακ πινε ωαξ το ωζε ον τηε βελβετ κυιλτ
λαυινγ ιν μυ πατιο.

σφινξ οφ βλακ κυαρτζ, ιυδγε μυ βοω.
================================================================================
Or, to named characters:

sphinx of black quartz, judge my vow.
<sigma><phi><iota><nu><xi> <omicron><phi> <beta><lamda><alpha><kappa> <kappa><upsilon><alpha><rho><tau><zeta>, <iota><upsilon><delta><gamma><epsilon> <mu><upsilon> <beta><omicron><omega>.

Wren

Library: Wren-str

<lang ecmascript>import "./str" for Char, Greek

var English2Greek = Fn.new { |text|

   // make appropriate substitutions using rarely used control characters
   // for Greek letters which have no single English letter equivalents
   var subs = [
       ["v", "b"],
       ["j", "i"],
       ["y", "u"],
       ["ch", "\x01"], // chi (l/c)
       ["kh", "\x01"], // chi (l/c)
       ["ph", "f"],
       ["rh", "r"],
       ["th", "\x02"], // theta (l/c)
       ["Ch", "\x04"], // chi (u/c)
       ["Kh", "\x04"], // chi (u/c)
       ["Ph", "F"],
       ["Rh", "R"],
       ["Th", "\x05"], // theta (u/c)
       ["ee", "h"],
       ["ck", "q"],
       ["c", "q"],
       ["k", "q"],
       ["oo", "w"],
       ["ps", "\x03"], // psi(l/c)
       ["Ps", "\x06"], // psi(u/c)
       ["V", "B"],
       ["J", "I"],
       ["Y", "U"],
       ["CH", "\x04"], // chi (u/c)
       ["KH", "\x04"], // chi (u/c)
       ["PH", "F"],
       ["RH", "R"],
       ["TH", "\x05"], // theta (u/c)
       ["EE", "H"],
       ["CK", "Q"],
       ["C", "Q"],
       ["K", "Q"],
       ["OO", "W"],
       ["PS", "\x06"], // psi(u/c)
   ]
   for (sub in subs) text = text.replace(sub[0], sub[1])
   // now look for final English lower case 's' and use 'DEL' to substitute for that
   var letters = text.toList
   for (i in 1...letters.count) {
       var c = letters[i]
       if ((Char.isWhitespace(c) || Char.isPunctuation(c)) && letters[i-1] == "s") {
           letters[i-1] = "\x7f"
       }
   }
   // finally substitute the remaining English 'letters' with Greek ones
   // note that some of them look the same but are different codepoints
   var e2g = {
       "a": "α", "b": "β", "d": "δ", "e": "ε", "f": "φ", "g": "γ", "h": "η", 
       "i": "ι", "l": "λ", "m": "μ", "n": "ν", "o": "ο", "p": "π", "q": "κ", 
       "r": "ρ", "s": "σ", "t": "τ", "u": "υ", "w": "ω", "x": "ξ", "z": "ζ", 
       "A": "Α", "B": "Β", "D": "Δ", "E": "Ε", "F": "Φ", "G": "Γ", "H": "Η", 
       "I": "Ι", "L": "Λ", "M": "Μ", "N": "Ν", "O": "Ο", "P": "Π", "Q": "Κ",
       "R": "Ρ", "S": "Σ", "T": "Τ", "U": "Υ", "W": "Ω", "X": "Ξ", "Z": "Ζ",
       "\x01": "χ", "\x02": "θ", "\x03": "ψ", "\x7f": "ς",
       "\x04": "Χ", "\x05": "Θ", "\x06": "Ψ"
   }
   var greek = List.filled(letters.count, null)
   for (i in 0...greek.count) {
       var c = letters[i]
       if (Char.isWhitespace(c) || Char.isPunctuation(c)) {
           greek[i] = c
       } else {
           greek[i] = e2g[letters[i]]
       }
   }
   return greek.join("")

}

var texts = [ "The quick brown fox jumped over the lazy dog.", """ I was looking at some rhododendrons in my back garden, dressed in my khaki shorts, when the telephone rang.

As I answered it, I cheerfully glimpsed that the July sun caused a fragment of black pine wax to ooze on the velvet quilt laying in my patio. """, "sphinx of black quartz, judge my vow." ] for (text in texts) {

   System.print(text)
   System.print()
   System.print(English2Greek.call(text))
   System.print("=" * 65)

} System.print("The last example using the names of the Greek letters instead:") var letters = Greek.names var alphabet = "αβγδεζηθικλμνξοπρςστυφχψω".codePoints.toList var e2gl = {} for (i in 0...alphabet.count) e2gl[String.fromCodePoint(alphabet[i])] = letters[i] var greek = English2Greek.call(texts[2]) var s = "" for (g in greek) {

   var c
   if (Char.isWhitespace(g) || Char.isPunctuation(g)) {
       c = g
   } else {
       c = "<" + e2gl[g] + ">"
   }
   s = s + c

} System.print(s)</lang>

Output:
The quick brown fox jumped over the lazy dog.

Θε κυικ βροων φοξ ιυμπεδ οβερ θε λαζυ δογ.
=================================================================
I was looking at some rhododendrons in my back garden,
dressed in my khaki shorts, when the telephone rang.

As I answered it, I cheerfully glimpsed that the July sun
caused a fragment of black pine wax to ooze on the velvet quilt
laying in my patio.

Ι ωας λωκινγ ατ σομε ροδοδενδρονς ιν μυ βακ γαρδεν,
δρεσσεδ ιν μυ χακι σηορτς, ωηεν θε τελεφονε ρανγ.

Ας Ι ανσωερεδ ιτ, Ι χηρφυλλυ γλιμψεδ θατ θε Ιυλυ συν
καυσεδ α φραγμεντ οφ βλακ πινε ωαξ το ωζε ον θε βελβετ κυιλτ
λαυινγ ιν μυ πατιο.
=================================================================
sphinx of black quartz, judge my vow.

σφινξ οφ βλακ κυαρτζ, ιυδγε μυ βοω.
=================================================================
The last example using the names of the Greek letters instead:
<sigma><phi><iota><nu><xi> <omicron><phi> <beta><lambda><alpha><kappa> <kappa><upsilon><alpha><rho><tau><zeta>, <iota><upsilon><delta><gamma><epsilon> <mu><upsilon> <beta><omicron><omega>.