Reverse Greek Conversion Golf


8

Einführung

Sie müssen eine Funktion erstellen, um griechische Ziffern in arabische Ziffern umzuwandeln. Die Eingabe ist eine griechische Zahl, die kleiner 1000und größer als ist 0. Dies ist die Umkehrung meiner vorherigen Herausforderung .

Algorithmus

  1. Split Eingang in Buchstaben (zB ΡΚΓ-> Ρ, Κ, Γ)
  2. Nehmen Sie jeden Buchstaben und Änderung Charakter gefunden unten in der Tabelle, für Briefsymbol (zB ΡΚΓ-> Ρ, Κ, Γ-> 100, 20, 3).
  3. In (zB ΡΚΓ-> Ρ, Κ, Γ-> 100, 20, 3-> 123)

Spezifikationen

  • Keine eingebaute Konvertierung des Zahlensystems
  • Die Eingabe wird wie im Beispiel aktiviert.
  • Die Ausgabe muss in Basis 10 erfolgen.
  • ΡΡΡΡWird nie passieren. Es wird sein Υ.

Testfälle

ΡΚΓ -> 123
Η -> 8
ΨΟΖ -> 777
Ρ -> 100
ΧϜ -> 606
ΡϘ -> 190
ΜΒ -> 42
Ν -> 50

Tabelle

Α = 1 = Alpha = 913 UTF-8
Β = 2 = Beta = 914 UTF-8
Γ = 3 = Gamma = 915 UTF-8
Δ = 4 = Delta = 916 UTF-8
Ε = 5 = Epsilon = 917 UTF-8
Ϝ = 6 = DiGamma = 988 UTF-8
Ζ = 7 = Zeta = 918 UTF-8
Η = 8 = Eta = 919 UTF-8
Θ = 9 = Theta = 920 UTF-8

Ι = 10 = Iota = 921 UTF-8
Κ = 20 = Kappa = 922 UTF-8
Λ = 30 = Lambda = 923 UTF-8
Μ = 40 = Mu = 924 UTF-8
Ν = 50 = Nu = 925 UTF-8
Ξ = 60 = Xi = 926 UTF-8
Ο = 70 = Omicron = 927 UTF-8
Π = 80 = Pi = 928 UTF-8
Ϙ = 90 = Koppa = 984 UTF-8

Ρ = 100 = Rho = 929 UTF-8   
Σ = 200 = Sigma = 931 UTF-8
Τ = 300 = Tau = 932 UTF-8
Υ = 400 = Upsilon = 933 UTF-8
Φ = 500 = Phi = 934 UTF-8
Χ = 600 = Chi = 935 UTF-8
Ψ = 700 = Psi = 936 UTF-8
Ω = 800 = Omega = 937 UTF-8
Ϡ = 900 = SamPi = 992 UTF-8

Werden wir jemals gerne Input haben ΡΡΡΡ? Wenn ja, was wäre das Ergebnis?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Nein. Das wäre Upsilon.
NoOneIsHere

Oh, ich habe die Frage falsch verstanden, haha.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ich habe diese Spezifikation gerade bearbeitet. Du hast es nicht vermisst.
NoOneIsHere

1
Ich denke , Ihre Testfälle sollten alle möglichen Muster von Nullen abdecken, so dass zumindest Add etwas wie 180, 42und 50.
Martin Ender

Antworten:


2

Gelee , 47 45 Bytes

⁵*ב}
“#'nn(2jj33556;r”Or2/F+878Ọ
¢iЀ’d9ñ/€S

Probieren Sie es online aus! oder überprüfen Sie alle Testfälle .


Welche Codierung verwenden Sie? Try It Online sagt, es sind 47 Bytes. Sie scheinen <newline>Ç€am Ende ein zu vermissen .
NoOneIsHere

3
Jelly hat eine eigene Codierung ( Byte- Link im Header). Der Link Alle Testfälle überprüfen enthält ein Extra Ç€, das die Funktion auf alle Testfälle anwendet. Der erste Link zeigt das eigentliche Programm, das 44 Bytes lang ist.
Dennis

Dies scheint der bisher kürzeste zu sein ...
NoOneIsHere

4

Python 3, 112

4 Bytes dank Vaultah gespeichert.

Booyah schlägt JS!

lambda x,z="ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϘΡΣΤΥΦΧΨΩϠ".find:sum((z(c)%9+1)*10**(z(c)//9)for c in x)

Mit Testfällen:

assert(f("ΡΚΓ")==123)
assert(f("Η")==8)
assert(f("ΨΟΖ")==777)
assert(f("Ρ")==100)
assert(f("ΧϜ")==606)

Durchläuft die Zeichenfolge und berechnet anhand ihres Index in der Liste der potenziellen Zeichen, wie viel sie wert ist.


3

JavaScript (ES7), 115 Byte

s=>[...s].map(c=>n+=((i="ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϘΡΣΤΥΦΧΨΩϠ".search(c))%9+1)*10**(i/9|0),n=0)|n

3

Haskell, 116 113 Bytes

f x=sum[v|d<-x,(l,v)<-zip"ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϘΡΣΤΥΦΧΨΩϠ"$(*)<$>[1,10,100]<*>[1..9],d==l]

Anwendungsbeispiel: map f ["ΡΚΓ","Η","ΨΟΖ","Ρ","ΧϜ","ΡϘ","ΜΒ","Ν"]-> [123,8,777,100,606,190,42,50].

Suchen Sie den Wert des griechischen Buchstabens aus einer Liste von Paaren (letter, value)und Summen. Die Liste der Werte wird von erstellt (*)<$>[1,10,100]<*>[1..9], wobei (*)<$>[1,10,100]eine Liste von Funktionen [(*1),(*10),(*100)](multipliziert mit 1, 10 und 100) erstellt wird, die separat auf die Elemente [1..9]einer einzelnen Liste angewendet und zu einer einzigen Liste verkettet werden.

Edit: 3 Bytes dank @xnor.


Es ist kürzer, das Produkt als zu nehmen (*)<$>[1,10,100]<*>[1..9].
xnor

@xnor: wieder <*>im Listenkontext . Ich denke selbst nie daran. Vielen Dank!
Nimi

Ich würde auch nicht daran denken, ich habe es von hier bekommen .
xnor


2

JavaScript (ES6), 116 Byte

s=>[...s].map(c=>n+=+((i="ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϘΡΣΤΥΦΧΨΩϠ".search(c))%9+1+"e"+(i/9|0)),n=0)|n

Nur 1 Byte länger als ES7!


Ich bin nicht mit JavaScript vertraut. Was macht das +"e"?
Morgan Thrapp

@MorganThrapp String-Verkettung. Zum Beispiel mit Ϡ würden Sie bekommen 9+"e"+2und dann +("9e2")wird das 900.
Neil

1
Ah, das ist wirklich komisch. Javascript schafft es immer, mich zu überraschen.
Morgan Thrapp

1

Python 3, 188 Bytes

def f(x,l=list,z=0):
 r=l(range(1,10));R=[a*10for a in r]
 for a,b in l(zip(l("ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϘΡΣΤΥΦΧΨΩϠ"),r+R+[a*10for a in R])):
  z+=(0,b)[a in x]
 return z

Versuch es! (Testfälle enthalten)


Sie können 25 Bytes sparen, indem Sie es auf reduzieren def f(x):r=list(range(1,10));R=[a*10for a in r];return sum(b*(a in x)for a,b in zip("ΑΒΓΔΕϜΖΗΘΙΚΛΜΝΞΟΠϘΡΣΤΥΦΧΨΩϠ",r+R+[a*10for a in R])).
Morgan Thrapp

1

Netzhaut , 72 Bytes

T`_Ι-ΠϘ0ΡΣ-ΩϠ`dl
[a-j]
$0aa 
\d
$&0 
T`_Α-ΕϜΖ-Θl`dd
\d+
$*
1

Probieren Sie es online aus.

Erläuterung

Grundsätzlich - ersetzen Sie jedes griechische Symbol durch die Zahl, die es darstellt, und geben Sie dann die Summe aller resultierenden Zahlen zurück:

Transliterate 10s Ziffern ins Arabische und 100s Ziffern ins lateinische Alphabet ( 0- 9=> a- j):

T`_Ι-ΠϘ0ΡΣ-ΩϠ`dl

Fügen Sie "aa" an beliebige 100Ziffern an:

[a-j]
$0aa 

Fügen Sie "0" an alle 10Ziffern an:

\d
$&0 

Transliterate 1's Ziffern und lateinisches Alphabet ins Arabische:

T`_Α-ΕϜΖ-Θl`dd

Konvertieren Sie alle durch Leerzeichen getrennten Dezimalzahlen in unäre:

\d+
$*

Zählen Sie die Gesamtzahl der unären 1s:

1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.