Đảo ngược Hy Lạp Golf


8

Giới thiệu

Bạn phải tạo một hàm để chuyển đổi các chữ số Hy Lạp thành chữ số Ả Rập. Đầu vào sẽ là một chữ số Hy Lạp ít hơn 1000và nhiều hơn 0. Đây là mặt trái của thử thách trước đây của tôi .

Thuật toán

  1. Chia đầu vào thành chữ (ví dụ ΡΚΓ-> Ρ, Κ, Γ)
  2. Hãy mỗi chữ cái, và thay đổi nhân vật được tìm thấy trong bảng dưới đây, để biểu tượng chữ cái, (ví dụ ΡΚΓ-> Ρ, Κ, Γ-> 100, 20, 3).
  3. Thêm (ví dụ ΡΚΓ-> Ρ, Κ, Γ-> 100, 20, 3-> 123)

Thông số kỹ thuật

  • Không có chuyển đổi hệ thống số tích hợp
  • Đầu vào sẽ được viết hoa như trong ví dụ.
  • Đầu ra phải ở cơ sở 10.
  • ΡΡΡΡsẽ không bao giờ xảy ra. Nó sẽ được Υ.

Các trường hợp thử nghiệm

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

Bàn

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

Chúng ta sẽ bao giờ có đầu vào như thế ΡΡΡΡnào? Nếu vậy, kết quả sẽ là gì?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Không. Đó sẽ là Upsilon.
NoOneIsHere

Ồ, tôi đã hiểu nhầm câu hỏi, haha.
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ Tôi vừa mới chỉnh sửa thông số đó. Bạn đã không bỏ lỡ nó.
NoOneIsHere

1
Tôi nghĩ rằng các trường hợp thử nghiệm của bạn nên bao gồm tất cả các mẫu số có thể có, vì vậy ít nhất hãy thêm một số thứ như 180, 4250.
Martin Ender

Câu trả lời:


2

Thạch , 47 45 byte

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

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .


Bạn đang sử dụng mã hóa nào? Dùng thử trực tuyến cho biết nó là 47 byte. Bạn dường như đang thiếu một <newline>Ç€ở cuối.
NoOneIsHere

3
Jelly có mã hóa riêng ( liên kết byte trong tiêu đề). Liên kết xác minh tất cả các trường hợp kiểm thử bao gồm một phần bổ sung Ç€áp dụng chức năng cho tất cả các trường hợp kiểm thử. Liên kết đầu tiên hiển thị cho chương trình thực tế, dài 44 byte.
Dennis

Đây dường như là ngắn nhất cho đến nay ...
NoOneIsHãy là

4

Trăn 3, 112

Đã lưu 4 byte nhờ vaultah.

Booyah, đánh bại JS!

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

Với các trường hợp thử nghiệm:

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

Vòng lặp thông qua chuỗi và sử dụng chỉ mục của nó trong danh sách các ký tự tiềm năng để tính toán giá trị của nó.


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]

Ví dụ sử dụng: map f ["ΡΚΓ","Η","ΨΟΖ","Ρ","ΧϜ","ΡϘ","ΜΒ","Ν"]-> [123,8,777,100,606,190,42,50].

Tra cứu giá trị của chữ cái Hy Lạp từ danh sách các cặp (letter, value)và tổng. Danh sách các giá trị được xây dựng theo (*)<$>[1,10,100]<*>[1..9], trong đó (*)<$>[1,10,100]xây dựng một danh sách các hàm [(*1),(*10),(*100)](nhân với 1, 10 và 100) được áp dụng riêng cho các phần tử [1..9]và được nối vào một danh sách.

Chỉnh sửa: 3 byte nhờ @xnor.


Nó ngắn hơn để lấy sản phẩm như (*)<$>[1,10,100]<*>[1..9].
xnor

@xnor: <*>trong bối cảnh danh sách, một lần nữa. Tôi không bao giờ nghĩ về nó bản thân mình. Cảm ơn!
nimi

Tôi cũng không nghĩ về nó, tôi đã nhận nó từ đây .
xnor


2

JavaScript (ES6), 116 byte

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

Chỉ dài hơn 1 byte so với ES7!


Tôi không quen thuộc với JavaScript, +"e"phải làm gì?
Morgan Thrapp

@MorganThrapp Nối chuỗi. Ví dụ: với bạn sẽ nhận được 9+"e"+2và sau đó +("9e2")trở thành 900.
Neil

1
Ah, điều đó thực sự kỳ lạ. Javascript luôn quản lý để --- kinh hoàng --- làm tôi ngạc nhiên.
Morgan Thrapp

1

Python 3, 188 byte

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

Hãy thử nó! (Bao gồm các trường hợp thử nghiệm)


Bạn có thể lưu 25 byte bằng cách ngưng tụ nó xuống 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

Võng mạc , 72 byte

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

Hãy thử trực tuyến.

Giải trình

Về cơ bản - thay thế mọi ký hiệu Hy Lạp bằng số mà nó đại diện, sau đó trả về tổng của tất cả các số kết quả:

Chuyển 10các chữ số s sang tiếng Ả Rập và 100chữ số s sang bảng chữ cái Latinh ( 0- 9=> a- j):

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

Nối "aa" vào bất kỳ 100chữ số nào:

[a-j]
$0aa 

Nối "0" vào bất kỳ 10chữ số nào:

\d
$&0 

Chữ 1số của chữ và chữ cái Latinh sang tiếng Ả Rập:

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

Chuyển đổi tất cả các số thập phân được phân tách bằng dấu cách thành đơn vị:

\d+
$*

Đếm tổng số đơn vị 1s:

1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.