Te has encontrado con un viejo manuscrito indio, uno que describe montones de tesoros enterrados. El manuscrito también le dice la ubicación del tesoro, excepto que algunos números cruciales se han codificado indirectamente en el texto. Usted se da cuenta de que el texto usa un sistema 'Kaadi', un subconjunto restringido del sistema más común 'Katapayadi'.
(El sistema Katapayadi es un antiguo sistema indio para codificar números como letras, a menudo utilizado como mnemotecnia para recordar números largos).
Su tarea aquí es decodificar texto codificado en el sistema Kaadi e imprimir el valor numérico.
Detalles
Caracteres de entrada
El sistema Kaadi se basa en las reglas del sistema Katapayadi , pero usa solo la primera fila de consonantes. Su texto aquí se ha transcrito al alfabeto latino y se sabe que contiene solo:
- vocales 'a', 'e', 'i', 'o', 'u'
- consonantes 'g', 'k', 'c', 'j' y sus formas capitales (para representar la forma aspirada de esas consonantes), y 'ṅ' y 'ñ'.
(Puede elegir recibir y manejar 'ṅ' como 'ng' y 'ñ' como 'ny' si eso es más conveniente en su idioma).
Asignación de valor
En este sistema
cada consonante cuando es seguida por una vocal tiene un dígito asociado. Estos son:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Sin embargo, tenga en cuenta que estos valores se aplican solo cuando estas consonantes son seguidas por una vocal. kacCi
tiene el mismo valor que kaCi
( ka
, Ci
= (1,7)) ya que el medio c no está acompañado por una vocal.
Además, un vocal inicial o la secuencia de dos vocales representa un 0.
aikaCi
ser sería:ai
,ka
,Ci
= (0,1,7)Las vocales adicionales en cualquier otro lugar en el medio del texto no tienen valor:
kauCia
es lo mismokaCi
, las vocales adicionales pueden ignorarse.
Valor numérico final
Una vez que se han calculado los valores de los dígitos de las letras, el valor numérico final se obtiene como el orden inverso de esos dígitos, es decir, el primer dígito del texto es el dígito menos significativo en el valor final.
P.ej.
GucCi
tiene Gu
y Ci
, entonces (4, 7), entonces el valor final es 74.
kakakaGo
es (1,1,1,4), entonces la respuesta es 4111.
guṅKo
es (3,2), entonces codifica 23. ( gungKo
si usa ASCII -equivalente.)
Entrada
- Una cadena que contiene un texto codificado en Kaadi
- contendrá solo vocales y las consonantes anteriores
- las vocales siempre están en minúsculas y ocurren en grupos de no más de 2
- puede elegir aceptar las letras para 5 y 0 como sus caracteres Unicode 'ṅ' y 'ñ' o como sus equivalentes ASCII 'ng' y 'ny' (están en minúsculas en cualquier forma)
- puede suponer que no hay espacios ni signos de puntuación
Salida
- El valor numérico del texto, dado por las reglas anteriores.
- para entradas vacías, una salida vacía o cualquier salida falsa y en su idioma de elección es aceptable, además de 0
- para la entrada no válida (entrada con cualquier otra cosa que no sean vocales y las consonantes anteriores), la salida no está definida: todo vale
Casos de prueba
"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
(los últimos pueden ser:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
si prefieres eso)
Se aplican reglas estándar para E / S y lagunas . ¡Que gane el mejor golfista!
aiaKaci
puede ingresar? (3 vocales principales)ord(c)%47%10
proporciona un índice único[0..9]
para cada consonante. (Conord("ṅ")=7749
yord("ñ")=241
.)Respuestas:
JavaScript (ES6), 83 bytes
Pruébalo en línea!
¿Cómo?
Usamos la siguiente expresión regular para unir el comienzo de la cuerda o una de las consonantes de Kaadi, seguido de una vocal:
Para cada coincidencia en la cadena de entrada, invocamos la siguiente función de devolución de llamada que toma el contenido c del grupo de captura como parámetro:
Encontramos el valor de la consonante buscando su posición en la expresión regular (coaccionada a una cadena al agregarla a sí misma).
Las consonantes están ordenadas de tal manera que su valor es igual a su posición módulo 10 :
Cuando hacemos coincidir el comienzo de la cadena en lugar de una consonante, c es una cadena vacía cuya posición en la expresión regular es 0 , que, convenientemente, es el resultado esperado en ese caso.
Finalmente, insertamos este dígito al comienzo de la cadena de salida o .
fuente
Retina , 41 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explantación
Traduce las consonantes que siguen las vocales.
Maneja una vocal principal.
Eliminar todo lo demás.
Invierte el resultado.
fuente
Python 2 , 93 bytes
Una función sin nombre que acepta una cadena Unicode que devuelve una representación de cadena del resultado base diez.
Pruébalo en línea!
fuente
Java 8,
136126bytesPruébalo en línea.
Explicación:
fuente
Jalea , 27 bytes
Pruébalo en línea!
Jelly se ha incorporado para ... 1 byte
ṅ
.Explicación
fuente
O%47%10
da un índice único[0...9]
para cada consonante. (Lo que significa queO%47
con el módulo implícito deị
permitiría recoger el valor correcto en una matriz de 10 entradas.)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
pero también 27 a menos que pueda jugar al golf.Python 2 , 101 bytes
Pruébalo en línea!
Python 3 ,
104102 bytesPruébalo en línea!
Salvado
fuente
JavaScript (Node.js) , 126 bytes
Pruébalo en línea!
fuente
x=[..."ñkKgGṅcCjJ"]
a solox="ñkKgGṅcCjJ"
porque tambiénindexOf
funciona con Strings0
, por lo que falla los casos de prueba 3 y 6 (como se puede ver en la Salida en TIO).Rojo ,
152143 bytesPruébalo en línea!
Legible:
fuente
MATL ,
484745 bytesPruébalo en línea!
('b' en lugar de 'd' para guardar un byte)
(-2 bytes gracias a Luis Mendo)
MATLAB (y, por lo tanto, MATL) tratar las cadenas como una serie tonta de bytes hizo que portar la solución Python de @ TFeld fuera más difícil de lo que imaginaba (¿tal vez una solución de bucle directo hubiera sido más fácil aquí?). Terminamos utilizando la alternativa
'ng'
,'ny'
el método de entrada, y la sustituciónng
conb
al comienzo para el procesamiento más fácil.Explicación:
fuente
unicode2native
, pero creo que eso es lo que quieres ahora. Estoy de acuerdo, el soporte Unicode en MATLAB no es el mejor. Y no me hagas comenzar con Octave :-D En cuanto a MATL, fue diseñado antes de que existiera el nuevo tipo de datos de cadena en MATLAB (y de todos modos no me gusta mucho), así que en MATL una "cadena" es lo mismo como solía ser en versiones antiguas de MATLAB: un vector de fila de caracteres. He hecho una nota para aclarar eso en la documentación, ¡gracias por notarlo!Stax , 27 bytes
Ejecutar y depurarlo
fuente