Usando el módulo para simplificar la entrada
Esto puede ser un consejo demasiado simple, así que si lo es, lo reemplazaré o lo eliminaré.
Digamos que desea ingresar dos caracteres, "a" y "b" y devolver 1 y 2 para cada uno, respectivamente. Probablemente usarías condicionales para esto, ya que tiene más sentido, y usaré una forma más condensada para este ejemplo específico.
i:"a")+1+n
Esto verifica si la entrada es mayor que "a" y agrega 1. Como "a" devolverá 0 y "b" 1, esto dará 1 y 2. Esto hace el trabajo bastante bien, pero en el caso de nuestro entradas, podríamos ir aún más lejos.
i:3%n
En el mod 3, 97, que es el equivalente numérico de "a", se convierte en 1, y 98, que es "b", se convierte en 2. Para dos números diferentes, se garantiza un mod que proporciona resultados únicos para ambos. Para más de dos, hay un mod que da resultados únicos, pero no tengo la habilidad matemática para encontrar el más pequeño de una manera simple (por ejemplo, si tiene el conjunto {100,101,102,103}, el mod 104 daría resultados únicos para cada valor en él, pero no de una manera muy útil). Sin embargo, en la mayoría de los casos, con la entrada restringida a un par de caracteres alfabéticos, a menudo puede encontrar un mod que funcione.
Para encontrar el módulo más pequeño que produce resultados únicos para dos números, a, y, b, haga lo siguiente. Tome el valor absoluto de la diferencia de a y b ( |a - b|
) y encuentre el número más pequeño, n, que no lo divide. por ejemplo, para 97 y 98, |98 - 97| = 1
y entonces 2 sería el mod más pequeño (pero para nuestro programa de prueba, esto da 1 para 97 y 0 para 98, por lo que el mod 3 es mejor).