Crie uma calculadora Gematria bidirecional, para qualquer sequência de caracteres Unicode, como o alfabeto.
Gematri-O que?
Gematria é um sistema de atribuição de valores numéricos a símbolos, desenvolvido por gregos antigos e adotado por judeus antigos. É semelhante ao ASCII ou Unicode, é apenas não linear ... Consulte a tabela a seguir (a tabela completa está disponível no link acima):
Index Letter Letter name Value
--------------------------
0 א "Alef" 1
1 ב "Bet" 2
...
8 ט "Tet" 9
9 י "Yud" 10
10 כ "Kaf" 20
...
17 צ "Tsady" 90
18 ' "Kuf" 100
19 ר "Resh" 200
...
Os nomes das letras não são importantes, apenas seu índice na "Matriz" do alfabeto e o respectivo valor numérico. O alfabeto hebraico possui apenas 22 letras (não incluindo as letras "finais"), portanto, o valor máximo disponível é 400.
Se emprestarmos esse sistema para o alfabeto inglês (AZ), terminaremos com A = 1, B = 2 ... L = 30 ... U = 300 ... Z = 800.
Duas coisas que precisamos saber.
Uma das características mais importantes desse sistema é calcular o "valor da gematria" de uma palavra , resumindo os valores de suas letras. (Alguns dizem que há uma conexão mística entre palavras ou frases (quando o valor do espaço é zero) - que compartilham o mesmo valor da Gematria).
Qualquer número inteiro não negativo pode ser representado em símbolos. Por exemplo (e vamos ficar com o alfabeto inglês por enquanto) o valor de 32 é LB (L = 30 + B = 2). O valor de 1024 é ZTKD (800 + 200 + 20 + 4. Observe que ZSSKD também é 1024, mas isso não é uma representação legal, pois pode ser compactado).
O desafio
Escreva um trecho de programa / função / código no idioma de sua escolha, primeiro configurado com um alfabeto (consulte API abaixo) e, em seguida, aceite um argumento. Esse argumento pode ser um número inteiro ou uma palavra / frase. Se for um número inteiro - seu programa deve gerar / retornar sua representação nos símbolos do alfabeto - o mais compactado (veja (2) acima). Se for uma palavra ou frase, seu programa deve gerar / retornar o valor da Gematria (somando os valores dos símbolos, sem contar os espaços em branco, consulte (1) acima).
API
Seu programa / função deve aceitar 3 argumentos. Você pode obtê-los no STDIN ou, como argumentos da função, pode até assumir que são variáveis que foram inicializadas programaticamente antes da chamada da função.
- Primeiro argumento - o primeiro caractere (em Unicode) do alfabeto.
- Segundo argumento - o último caractere (em Unicode) do alfabeto.
- Terceiro argumento - Um número inteiro, a ser representado em símbolos, OU uma frase que é criada pelo alfabeto fornecido.
Valor de saída / retorno: dependendo do terceiro argumento, conforme explicado acima.
Premissas
- Os dois primeiros argumentos sempre terão um caractere cada, e o segundo sempre será maior do que o primeiro.
- A sequência (do primeiro ao último, inclusive) nunca incluirá nenhum dos valores 30-39 (que representam os dígitos 0-9); caso contrário, o terceiro argumento será ambíguo. EDIT: também não conterá espaço, pois nas frases os espaços são contados como zeros.
- O terceiro argumento, caso seja uma frase, pode conter apenas espaços e letras do alfabeto especificado. String vazia não é uma entrada válida (você pode assumir que não está vazia). Caso seja um número inteiro, você pode assumir que é um número inteiro positivo.
Exemplos
Input Output
A Z CODE GOLF 175
a s 512 sssssjb
A B 7 BBBA
≐ ⊐ ≤≫ ≥ 1700
Pontuação
Score = upvotes - length/100.0
Seu código deve ser curto, mas o mais importante é popular. Pontuações negativas também podem ser reproduzidas. O vencedor será a resposta com a pontuação mais alta em uma semana a partir de agora, 2014-11-29 19:20:00 UTC.