En Cairo, uno de los conceptos fundamentales que encontrarás es el tipo felt252, también conocido como elemento de campo.
Este tipo representa números enteros dentro de un rango específico definido por un número primo grande $P$.
En este ejercicio, trabajarás exclusivamente con el tipo felt252, que es una parte esencial de la programación en Cairo.
El tipo felt252 en Cairo es un tipo escalar que se usa para representar números enteros desde 0 hasta $P - 1$, donde $P$ es un número primo grande que actualmente está definido como $( 2^{251} + 17 \cdot 2^{192} + 1 )$.
Este tipo garantiza que todas las operaciones aritméticas se realicen módulo $P$, lo que lo hace distinto de los tipos de enteros estándar que puedes encontrar en otros lenguajes de programación.
Cairo ofrece soporte para operaciones aritméticas básicas con valores felt252:
+): suma dos valores felt252.
Si el resultado supera $P$, se reduce módulo $P$.-): resta un valor felt252 de otro.
Si el resultado es negativo, se ajusta para mantenerse dentro del rango sumando un múltiplo de $P$.*): multiplica dos valores felt252, y el resultado se calcula módulo $P$./): divide un valor felt252 entre otro, asegurando que el resultado cumple la ecuación $( \frac{x}{y} \cdot y = x \mod P)$.En este ejercicio, ayudarás a un criptógrafo a gestionar y verificar un sistema de comunicación seguro.
El sistema depende en gran medida de los elementos de campo, específicamente del tipo felt252 de Cairo, para asegurar que todas las operaciones aritméticas permanezcan dentro de un rango definido.
Dos mensajes cifrados, cada uno representado como un felt252, deben sumarse para crear un mensaje combinado.
Sin embargo, debido al cifrado, cualquier resultado que supere el valor máximo $P - 1$ debe ajustarse usando el módulo $P$.
Implementa una función que reciba dos valores felt252 y devuelva su suma, asegurándote de que el resultado permanezca dentro del rango válido:
add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789
Nota: El valor de retorno debe ser un
felt252.
A veces, es necesario restar mensajes para recuperar los datos originales.
Si el resultado de la resta es negativo, el sistema ajusta automáticamente el resultado sumando $P$ para volver a situarlo dentro del rango de un valor felt252 válido.
Implementa una función que reciba dos valores felt252 y devuelva su diferencia, asegurándote de que el resultado permanezca dentro del rango válido:
subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949
Nota: El valor de retorno debe ser un
felt252.
Para garantizar la integridad de los datos cifrados, el sistema criptográfico a menudo multiplica dos mensajes (felt252) para que su producto permanezca dentro de un rango válido.
El resultado debe calcularse con el módulo $P$ para asegurar que permanezca dentro del rango válido.
Implementa una función que reciba dos valores felt252 y devuelva su producto, asegurándote de que el resultado permanezca dentro del rango válido:
multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789
Nota: El valor de retorno debe ser un
felt252.
Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.