Cree una calculadora bidireccional Gematria, para cualquier secuencia dada de caracteres Unicode como el alfabeto.
Gematri-Qué?
Gematria es un sistema de asignación de valores numéricos a símbolos, desarrollado por antiguos griegos y adoptado por antiguos judíos. Es similar a ASCII o Unicode, es simplemente no lineal ... Consulte la siguiente tabla (la tabla completa está disponible en el enlace de arriba):
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
...
Los nombres de las letras no son importantes, solo su índice en la "matriz" del alfabeto y el valor numérico respectivo. El alfabeto hebreo solo tiene 22 letras (sin incluir letras "finales"), por lo que el valor máximo disponible es 400.
Si tomamos prestado este sistema al alfabeto inglés (AZ), terminaremos con A = 1, B = 2 ... L = 30 ... U = 300 ... Z = 800.
Dos cosas que necesitamos saber.
Una de las características más importantes de este sistema es calcular el "Valor Gematria" de una palabra , resumiendo los valores de sus letras. (Algunos dicen que existe una conexión mística entre palabras o frases (cuando el valor del espacio es cero), que comparten el mismo valor de Gematria).
Cualquier número entero no negativo se puede representar en símbolos. Por ejemplo (y quedémonos con el alfabeto inglés por ahora) el valor de 32 es LB (L = 30 + B = 2). El valor de 1024 es ZTKD (800 + 200 + 20 + 4. Tenga en cuenta que ZSSKD también es 1024, pero eso no es una representación legal, ya que se puede compactar).
El reto
Escriba un programa / una función / un fragmento de código en su idioma de elección, que primero se configura con un alfabeto (consulte la API a continuación) y luego acepte un argumento. Ese argumento puede ser un entero, o una palabra / frase. Si es un número entero, su programa debería generar / devolver su representación en los símbolos del alfabeto, el más compactado (consulte (2) más arriba). Si es una palabra o una frase, su programa debería generar / devolver el valor de Gematria (sumando los valores de los símbolos, sin contar espacios en blanco, consulte (1) más arriba).
API
Su programa / función debe aceptar 3 argumentos. Puede obtenerlos de STDIN, o como argumentos de función, incluso puede suponer que son variables que se inicializaron programáticamente antes de la invocación de su función.
- Primer argumento: el primer carácter (en Unicode) del alfabeto.
- Segundo argumento: el último carácter (en Unicode) del alfabeto.
- Tercer argumento: un número entero, que se representará en símbolos, O una frase creada por el alfabeto dado.
Valor de salida / retorno: Dependiendo del tercer argumento, como se explicó anteriormente.
Supuestos
- Los dos primeros argumentos siempre tendrán un carácter de longitud cada uno, y el segundo siempre será mejor que el primero.
- La secuencia (primero hasta el último, inclusive) nunca incluirá ninguno de los valores 30-39 (que representan los dígitos 0-9), de lo contrario hará que el tercer argumento sea ambiguo. EDITAR: no contendrá espacio también, ya que en las frases los espacios se cuentan como ceros.
- El tercer argumento, en caso de que sea una frase, solo puede contener espacios y letras del alfabeto dado. La cadena vacía no es una entrada válida (puede suponer que no está vacía). En caso de que sea un entero, puede asumir que es un entero positivo.
Ejemplos
Input Output
A Z CODE GOLF 175
a s 512 sssssjb
A B 7 BBBA
≐ ⊐ ≤≫ ≥ 1700
Puntuación
Score = upvotes - length/100.0
Su código debe ser breve, pero lo más importante, popular. Los puntajes negativos también pueden acompañar. El ganador será la respuesta con el puntaje más alto en una semana a partir de ahora, 29/11/2014 19:20:00 UTC.
Respuestas:
CJam,
807570 bytes, votos a favor - 0.7Pruébalo aquí.
Este es un programa completo, que toma información de STDIN e imprime el resultado en STDOUT.
No estoy realmente seguro de cómo se supone que voy a ganar popularidad aquí, así que simplemente estoy jugando al golf, con la esperanza de obtener un tamaño de código razonablemente impresionante. ;)
Creo que la conversión de int a string todavía se puede mejorar, pero no la veo en este momento.
Gracias a Optimizer por recordarme sobre la intersección establecida y que las matrices vacías son falsas.
En el segundo caso, el resultado se deja en la pila, que se imprime automáticamente al final del programa.
fuente
Java 7, Puntuación = Votos a favor - 3.97
¡¡¡Hurra!!! ¡¡¡Java!!! El idioma de golf favorito del mundo en el mundo. ¿Qué, realmente puedes jugar al golf en Java? Bueno, es como usar una excavadora para putt.
a
se espera que contenga el primer caracter.b
se espera que contenga el último caracter.c
se espera que tenga la cadena de entrada.Aquí está la función de golf:
Aquí está sangrado con código de estructura:
Aquí está completamente expandido:
fuente
APL (votos a favor - 1.05)
Esta es una función que toma los dos caracteres a la izquierda y el argumento a convertir a la derecha:
Versión sin golf:
fuente
Haskell, 188 bytes; Votos a favor - 1.88
Este es un programa completo de STDIN a STDOUT, muy golfizado. EDITAR: ¡Ahora en menos de 200 bytes! EDIT2: guardado un byte con la sugerencia de @ proudhaskeller.
Construye la lista infinita de valores
x = [1,2,3,4,5,6,7,8,9,10,20,30,..]
en la primera línea y realiza E / S en la tercera línea. El valor de una letrac
, dado el rango[a..b]
, es entonces el valor en la posiciónlength [a..c] - 1
dex
. En la segunda línea, nos ramificamos en la primera letrau
del tercer argumento, y sumamos sus valores de gematria (siu
no es un dígito), o construimos codiciosamente una palabra con el valor dado (siu
es un dígito).Versión sin golf con nombres de variables más legibles:
fuente
{}
cláusula where para obtener una ganancia de un byteCJam, 70 bytes, #Votos a favor - 0.7
Esto supone que se pasará una entrada válida. Toma información de STDIN como dice la especificación API e imprime el resultado en STDOUT.
Ejemplos:
Pruébalo en línea aquí
Explicación sabia del bloque :
fuente