Usando o módulo para simplificar a entrada
Pode ser uma dica muito simples, então, se for, eu a substituirei ou a excluirei.
Digamos que você queira inserir dois caracteres, "a" e "b" e retornar 1 e 2 para cada um, respectivamente. Você provavelmente usaria condicionais para isso, uma vez que faz mais sentido, e usarei uma forma mais condensada para este exemplo específico.
i:"a")+1+n
Isso verifica se a entrada é maior que "a" e adiciona 1. Como "a" retornará 0 e "b" 1, isso fornecerá 1 e 2. Isso faz o trabalho muito bem, mas no caso do nosso insumos, poderíamos ir ainda mais longe.
i:3%n
No mod 3, 97, que é o equivalente numérico de "a", se torna 1 e 98, que é "b", se torna 2. Para dois números diferentes, é garantido um mod que fornece resultados únicos para ambos. Por mais de dois, existe um mod que fornece resultados únicos, mas não tenho a capacidade matemática de encontrar o menor de uma maneira simples (por exemplo, se você tiver o conjunto {100,101,102,103}, o mod 104 daria resultados exclusivos para cada valor, mas não de uma maneira muito útil). No entanto, na maioria dos casos, com a entrada sendo restrita a alguns caracteres alfabéticos, geralmente é possível encontrar um mod que funcione.
Para encontrar o menor módulo que produz resultados exclusivos para dois números, a e eb, faça o seguinte. Pegue o valor absoluto da diferença de aeb ( |a - b|
) e encontre o menor número, n, que não o divide. por exemplo, para 97 e 98, |98 - 97| = 1
e, portanto, 2 seria o menor mod (mas para o nosso programa de teste, isso fornece 1 para 97 e 0 para 98, portanto, o mod 3 é melhor).