Anda telah menemukan sebuah naskah kuno India, yang menggambarkan gundukan harta terpendam. Naskah itu juga memberi tahu Anda lokasi harta karun itu, kecuali bahwa beberapa angka penting telah disandikan secara tidak langsung ke dalam teks. Anda mengetahui bahwa teks menggunakan sistem 'Kaadi', subset terbatas dari sistem 'Katapayadi' yang lebih umum.
(Sistem Katapayadi adalah sistem India kuno untuk menyandikan angka sebagai huruf, sering digunakan sebagai mnemonik untuk mengingat angka panjang.)
Tugas Anda di sini adalah mendekodekan teks yang disandikan dalam sistem Kaadi dan mencetak nilai numeriknya.
Detail
Masukkan karakter
Sistem Kaadi didasarkan pada aturan sistem Katapayadi , tetapi hanya menggunakan baris konsonan pertama. Teks Anda di sini telah ditransliterasi ke alfabet Latin, dan hanya diketahui mengandung:
- vokal 'a', 'e', 'i', 'o', 'u'
- konsonan 'g', 'k', 'c', 'j', dan bentuk modal mereka (untuk mewakili bentuk aspirasi dari konsonan tersebut), dan 'ṅ' dan 'ñ'.
(Anda dapat memilih untuk menerima dan menangani 'ṅ' sebagai 'ng' dan 'ñ' sebagai 'ny' jika itu lebih nyaman dalam bahasa Anda.)
Penugasan nilai
Dalam sistem ini,
setiap konsonan ketika diikuti oleh vokal memiliki angka yang terkait dengannya. Ini adalah:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Namun perlu dicatat, bahwa nilai-nilai ini hanya berlaku ketika konsonan ini diikuti oleh vokal. kacCi
memiliki nilai yang sama dengan kaCi
( ka
, Ci
= (1,7)) karena c tengah tidak ditemani oleh vokal.
Selain itu, sebuah vokal awal atau urutan dua vokal merupakan 0.
aikaCi
akan menjadi:ai
,ka
,Ci
= (0,1,7)Vokal ekstra di mana pun di tengah teks tidak memiliki nilai:
kauCia
sama dengankaCi
, vokal tambahan dapat diabaikan.
Nilai numerik akhir
Setelah nilai-nilai digit dari huruf-huruf telah diketahui, nilai numerik akhir diperoleh sebagai urutan kebalikan dari angka-angka itu yaitu digit pertama dari teks adalah digit paling tidak signifikan dalam nilai akhir.
Misalnya.
GucCi
memiliki Gu
dan Ci
, jadi (4, 7), sehingga nilai akhirnya adalah 74.
kakakaGo
adalah (1,1,1,4), jadi jawabannya adalah 4111.
guṅKo
adalah (3,2), jadi mengkodekan 23. ( gungKo
jika menggunakan ASCII - Setara.)
Memasukkan
- Sebuah string yang berisi teks yang dikodekan Kaadi
- hanya akan berisi vokal dan konsonan di atas
- vokal selalu dalam huruf kecil dan muncul dalam kelompok yang tidak lebih dari 2
- Anda dapat memilih untuk menerima huruf untuk 5 dan 0 baik sebagai karakter Unicode mereka 'ṅ' dan 'ñ' atau sebagai padanan ASCII mereka 'ng' dan 'ny' (mereka dalam huruf kecil dalam bentuk apa pun)
- Anda mungkin menganggap tidak ada spasi atau tanda baca
Keluaran
- Nilai numerik teks, seperti yang diberikan oleh aturan di atas
- untuk input kosong, output kosong atau output false-y dalam bahasa pilihan Anda dapat diterima, selain 0
- untuk input yang tidak valid (input dengan selain vokal dan konsonan di atas), output tidak terdefinisi - apapun berjalan
Uji kasus
"GucCi"
=> 74
"kakakaGo"
=> 4111
"aiKaCiigukoJe"
=> 913720
""
=> 0 //OR empty/falsey output
"a"
=> 0
"ukkiKagijeCaGaacoJiiKka"
=> 1964783210
"kegJugjugKeg"
=> 2891
"guṅKo"
=> 23
"Guñaaka"
=> 104
"juñiKoṅe"
=>5208
(yang terakhir dapat:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
jika Anda lebih suka.)
Aturan standar untuk I / O dan celah berlaku. Semoga pegolf terbaik menang!
aiaKaci
diinput? (3 vokal terkemuka)ord(c)%47%10
memberikan indeks unik[0..9]
untuk setiap konsonan. (Denganord("ṅ")=7749
danord("ñ")=241
.)Jawaban:
JavaScript (ES6), 83 byte
Cobalah online!
Bagaimana?
Kami menggunakan ekspresi reguler berikut untuk mencocokkan awal string atau salah satu konsonan Kaadi, diikuti oleh vokal:
Untuk setiap kecocokan dalam string input, kami menjalankan fungsi panggilan balik berikut yang mengambil konten c dari grup penangkap sebagai parameter:
Kami menemukan nilai konsonan dengan mencari posisinya dalam ekspresi reguler (dipaksa ke string dengan menambahkannya ke dirinya sendiri).
Konsonan disusun sedemikian rupa sehingga nilainya sama dengan posisi modulo 10 mereka :
Ketika kita mencocokkan awal string dengan konsonan, c adalah string kosong yang posisinya dalam ekspresi reguler adalah 0 - yang, dengan mudah, adalah hasil yang diharapkan dalam kasus tersebut.
Akhirnya, kami memasukkan digit ini di awal string keluaran o .
sumber
Retina , 41 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Menerjemahkan konsonan yang diikuti oleh vokal.
Tangani vokal terkemuka.
Hapus yang lainnya.
Balikkan hasilnya.
sumber
Python 2 , 93 byte
Fungsi yang tidak disebutkan namanya menerima string Unicode yang mengembalikan representasi string dari hasil sepuluh basis.
Cobalah online!
sumber
Java 8,
136126 byteCobalah online.
Penjelasan:
sumber
Jelly , 27 byte
Cobalah online!
Jelly memiliki built-in untuk ... 1-byte
ṅ
.Penjelasan
sumber
O%47%10
memberikan indeks unik[0...9]
untuk setiap konsonan. (Yang berarti bahwaO%47
dengan modulo implisitị
akan memungkinkan untuk mengambil nilai yang benar dalam array 10 entri.)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
tetapi juga 27 kecuali bisa golf.Python 2 , 101 byte
Cobalah online!
Python 3 ,
104102 byteCobalah online!
Diselamatkan
sumber
JavaScript (Node.js) , 126 byte
Cobalah online!
sumber
x=[..."ñkKgGṅcCjJ"]
hanyax="ñkKgGṅcCjJ"
karenaindexOf
karya-karya dengan Strings terlalu0
, jadi gagal uji kasus 3 dan 6 (seperti dapat dilihat pada Output pada TIO).Merah ,
152143 byteCobalah online!
Dapat dibaca:
sumber
MATL ,
484745 byteCobalah online!
('b' bukannya 'd' untuk menyimpan byte)
(-2 byte terima kasih kepada Luis Mendo)
MATLAB (dan karenanya MATL) memperlakukan string sebagai serangkaian byte bodoh membuat porting solusi Python @ TFeld lebih sulit daripada yang saya bayangkan (mungkin solusi loop lurus akan lebih mudah di sini?). Akhirnya menggunakan alternatif
'ng'
,'ny'
metode input, dan mengganting
denganb
di awal untuk diproses lebih mudah.Penjelasan:
sumber
unicode2native
, tapi saya pikir itu yang Anda inginkan. Saya setuju, dukungan Unicode di MATLAB bukan yang terbaik. Dan jangan mulai saya dengan Octave :-D Adapun MATL, itu dirancang sebelum tipe data string yang baru ada di MATLAB (dan saya tidak terlalu menyukainya), jadi dalam MATL "string" adalah sama seperti dulu dalam versi MATLAB lama: vektor baris karakter. Saya telah membuat catatan untuk mengklarifikasi bahwa dalam dokumentasi, terima kasih telah memperhatikan!Stax , 27 byte
Jalankan dan debug itu
sumber