Você encontrou um antigo manuscrito indiano, que descreve montes de tesouros enterrados. O manuscrito também informa a localização do tesouro, exceto que alguns números cruciais foram codificados indiretamente no texto. Você descobre que o texto usa um sistema 'Kaadi', um subconjunto restrito do sistema 'Katapayadi' mais comum.
(O sistema Katapayadi é um sistema indiano antigo para codificar números como letras, frequentemente usado como mnemônica para lembrar números longos.)
Sua tarefa aqui é decodificar o texto codificado no sistema Kaadi e imprimir o valor numérico.
Detalhes
Caracteres de entrada
O sistema Kaadi é baseado nas regras do sistema Katapayadi , mas usa apenas a primeira linha de consoantes. Seu texto aqui foi transliterado para o alfabeto latino e é conhecido por conter apenas:
- vogais 'a', 'e', 'i', 'o', 'u'
- consoantes 'g', 'k', 'c', 'j' e suas formas de capital (para representar a forma aspirada dessas consoantes) e 'ṅ' e 'ñ'.
(Você pode optar por receber e manipular 'ṅ' como 'ng' e 'ñ' como 'ny' se for mais conveniente no seu idioma.)
Atribuição de valor
Neste sistema,
cada consoante quando seguida por uma vogal tem um dígito associado a ela. Esses são:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Observe, no entanto, que esses valores se aplicam somente quando essas consoantes são seguidas por uma vogal. kacCi
tem o mesmo valor que kaCi
( ka
, Ci
= (1,7)), pois o meio c não é acompanhado por uma vogal.
Além disso, uma vogal inicial ou sequência de duas vogais representa um 0.
aikaCi
seria:ai
,ka
,Ci
= (0,1,7)Vogais extras em qualquer outro lugar no meio do texto não têm valor:
kauCia
é o mesmo quekaCi
, as vogais extras podem ser ignoradas.
Valor numérico final
Uma vez calculados os valores dos dígitos das letras, o valor numérico final é obtido na ordem inversa desses dígitos, ou seja, o primeiro dígito do texto é o dígito menos significativo no valor final.
Por exemplo.
GucCi
tem Gu
e Ci
, então (4, 7), então o valor final é 74.
kakakaGo
é (1,1,1,4), então a resposta é 4111.
guṅKo
é (3,2), então codifica 23. ( gungKo
se estiver usando ASCII -equivalente.)
Entrada
- Uma sequência que contém um texto codificado por Kaadi
- conterá apenas vogais e as consoantes acima
- as vogais estão sempre em minúsculas e ocorrem em grupos de no máximo 2
- você pode aceitar as letras 5 e 0 como caracteres Unicode 'ṅ' e 'ñ' ou como seus equivalentes ASCII 'ng' e 'ny' (eles estão em minúsculas nos dois formatos)
- você pode assumir que não há espaços ou pontuações
Resultado
- O valor numérico do texto, conforme determinado pelas regras acima
- para entrada vazia, é aceitável uma saída vazia ou qualquer saída falsa no idioma de sua escolha, além de 0
- para entrada inválida (entrada com outra coisa que não vogais e consoantes acima), a saída é indefinida - tudo acontece
Casos de teste
"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
(os últimos podem ser:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
se você preferir.)
Aplicam-se regras padrão para E / S e brechas . Que ganhe o melhor jogador de golfe!
aiaKaci
ser inserido? (3 vogais principais)ord(c)%47%10
fornece um índice exclusivo[0..9]
para cada consoante. (Comord("ṅ")=7749
eord("ñ")=241
.)Respostas:
JavaScript (ES6), 83 bytes
Experimente online!
Quão?
Usamos a seguinte expressão regular para corresponder ao início da string ou a uma consoante Kaadi, seguida por uma vogal:
Para cada correspondência na sequência de entrada, chamamos a seguinte função de retorno de chamada que usa o conteúdo c do grupo de captura como parâmetro:
Encontramos o valor da consoante procurando sua posição na expressão regular (forçada a uma cadeia de caracteres adicionando-a a ela mesma).
As consoantes são ordenadas de forma que seu valor seja igual ao seu módulo de posição 10 :
Quando combinamos o início da string em vez de uma consoante, c é uma string vazia cuja posição na expressão regular é 0 - o que, convenientemente, é o resultado esperado nesse caso.
Finalmente, inserimos esse dígito no início da string de saída o .
fonte
Retina , 41 bytes
Experimente online! O link inclui casos de teste. Explicação:
Traduza as consoantes que são seguidas por vogais.
Manuseie uma vogal principal.
Exclua todo o resto.
Inverta o resultado.
fonte
Python 2 , 93 bytes
Uma função sem nome que aceita uma string Unicode que retorna uma representação de string do resultado da base dez.
Experimente online!
fonte
Java 8,
136126 bytesExperimente online.
Explicação:
fonte
Gelatina , 27 bytes
Experimente online!
A geléia foi incorporada para ... 1 byte
ṅ
.Explicação
fonte
O%47%10
fornece um índice exclusivo[0...9]
para cada consoante. (O que significa queO%47
com o módulo implícita deị
que permitiria a pegar o valor correcto em uma matriz de 10 entradas.)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
mas também 27, a menos que possa jogar golfe .Python 2 , 101 bytes
Experimente online!
Python 3 ,
104102 bytesExperimente online!
Salvou
fonte
JavaScript (Node.js) , 126 bytes
Experimente online!
fonte
x=[..."ñkKgGṅcCjJ"]
apenasx="ñkKgGṅcCjJ"
desdeindexOf
obras com cordas demasiado0
, portanto, falha nos casos de teste 3 e 6 (como pode ser visto na Saída no TIO).Vermelho ,
152143 bytesExperimente online!
Legível:
fonte
MATL ,
484745 bytesExperimente online!
('b' em vez de 'd' para salvar um byte)
(-2 bytes graças a Luis Mendo)
O MATLAB (e, portanto, o MATL) tratando as strings como uma série de bytes idiotas tornou mais difícil a portabilidade da solução Python do @ TFeld do que eu imaginava (talvez uma solução de loop direto fosse mais fácil aqui?). Terminou-se com a alternativa
'ng'
,'ny'
o método de entrada, e substituindong
comb
no início para um processamento mais fácil.Explicação:
fonte
unicode2native
, mas acho que agora é isso que você deseja. Eu concordo, o suporte a Unicode no MATLAB não é o melhor. E não me inicie com o Octave :-D Quanto ao MATL, ele foi projetado antes que o novo tipo de dados de string existisse no MATLAB (e eu não gosto muito assim), portanto, no MATL, uma "string" é a mesma como costumava ser nas versões antigas do MATLAB: um vetor de linha de caracteres. Fiz uma anotação para esclarecer que, na documentação, obrigado por perceber!Stax , 27 bytes
Execute e depure
fonte