Membalikkan Golf Konversi Yunani


8

pengantar

Anda harus membuat fungsi untuk mengubah angka Yunani menjadi angka Arab. Masukan akan berupa angka Yunani kurang dari 1000dan lebih dari 0. Ini kebalikan dari tantangan saya sebelumnya .

Algoritma

  1. Berpisah masukan ke dalam huruf (misalnya ΡΚΓ-> Ρ, Κ, Γ)
  2. Ambil setiap huruf, dan perubahan karakter yang ditemukan di tabel di bawah ini, untuk surat simbol, (misalnya ΡΚΓ-> Ρ, Κ, Γ-> 100, 20, 3).
  3. Tambah (misalnya ΡΚΓ-> Ρ, Κ, Γ-> 100, 20, 3-> 123)

Spesifikasi

  • Tidak ada konversi sistem angka bawaan
  • Input akan dikapitalisasi seperti dalam contoh.
  • Keluaran harus dalam basis 10.
  • ΡΡΡΡtidak akan pernah terjadi. Itu akan terjadi Υ.

Uji Kasus

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

Meja

Α = 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

Akankah kita memiliki input seperti ΡΡΡΡ? Jika demikian, apa hasilnya?
— Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Tidak. Itu akan menjadi Upsilon.
— NoOneIsHere

Oh, saya salah paham pertanyaannya, haha.
— Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Saya baru saja mengedit spec itu. Anda tidak melewatkannya.
— NoOneIsHere

1
Saya pikir kasus pengujian Anda harus mencakup semua pola nol yang mungkin, jadi setidaknya tambahkan sesuatu seperti 180, 42dan 50.
— Martin Ender

Jawaban:


2

Jelly , 47 45 byte

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

Cobalah online! atau verifikasi semua kasus uji .


Pengkodean apa yang Anda gunakan? Try It Online mengatakan ukurannya 47 byte. Sepertinya Anda melewatkan satu <newline>Ç€di akhir.
— NoOneIsHere

3
Jelly memiliki penyandian sendiri ( tautan byte di header). The memverifikasi semua kasus uji Link termasuk tambahan ǀyang berlaku fungsi untuk semua kasus uji. Tautan pertama menunjukkan ke program aktual, yang panjangnya 44 byte.
— Dennis

Ini tampaknya yang terpendek sejauh ini ...
— NoOneIsHere

4

Python 3, 112

Disimpan 4 byte berkat vaultah.

Booyah, mengalahkan JS!

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

Dengan uji kasus:

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

Loop melalui string dan menggunakan indeksnya dalam daftar karakter potensial untuk menghitung berapa nilainya.


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 byte

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

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

Cari nilai huruf yunani dari daftar pasangan (letter, value)dan jumlah. Daftar nilai dibangun oleh (*)<$>[1,10,100]<*>[1..9], di mana (*)<$>[1,10,100]membangun daftar fungsi [(*1),(*10),(*100)](dikalikan dengan 1, 10 dan 100) yang diterapkan secara terpisah ke elemen[1..9] dan digabungkan menjadi satu daftar.

Sunting: 3 byte dengan terima kasih kepada @xnor.


Lebih singkat untuk menganggap produk sebagai (*)<$>[1,10,100]<*>[1..9].
— xnor

@ xnor: <*>dalam konteks daftar, lagi. Saya tidak pernah memikirkannya sendiri. Terima kasih!
— nimi

Saya tidak akan memikirkannya, saya mendapatkannya dari sini .
— xnor


2

JavaScript (ES6), 116 byte

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

Hanya 1 byte lebih lama dari ES7!


Saya tidak terbiasa dengan JavaScript, apa fungsinya +"e"?
— Morgan Thrapp

Rangkaian string @MorganThrapp. Misalnya, dengan Ϡ Anda akan mendapatkan 9+"e"+2dan kemudian +("9e2")menjadi 900.
— Neil

1
Ah, itu aneh sekali. Javascript selalu berhasil --- menakutkan --- mengejutkan saya.
— 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

Cobalah! (Termasuk test case)


Anda dapat menyimpan 25 byte dengan memadatkannya menjadi 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

Retina , 72 byte

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

Cobalah online.

Penjelasan

Pada dasarnya - ganti setiap simbol Yunani dengan angka yang diwakilinya, lalu kembalikan jumlah semua angka yang dihasilkan:

10Digit transliterate ke Arab dan 100digit ke alfabet Latin ( 0- 9=> a- j):

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

Tambahkan "aa" ke 100digit apa saja :

[a-j]
$0aa 

Tambahkan "0" ke 10angka apa saja :

\d
$&0 

1Digit Transliterate dan alfabet Latin ke Bahasa Arab:

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

Ubah semua angka desimal yang dipisahkan oleh ruang menjadi unary:

\d+
$*

Hitung jumlah total unary 1s:

1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.