Este desafío fue inspirado por un blog de programación que frecuente. Vea la publicación original aquí: Un rompecabezas de programación
Reto
Defina una función f:Q->Q
tal que f(f(n)) = -n
para todos los enteros distintos de cero n
, y dónde Q
está el conjunto de números racionales.
Detalles
En el idioma que prefiera, defina una función o programa f
que acepte como parámetro un número n
y devuelva o genere un número f(n)
.
La entrada se puede proporcionar a través del mecanismo más natural para su idioma: argumento de función, lectura de STDIN, argumento de línea de comando, posición de pila, entrada de voz, signos de pandillas, etc.
La salida debe ser un valor de retorno de una función / programa o impreso en STDOUT.
Me gustaría restringir las respuestas a las funciones que no aprovechan el estado del programa o la memoria / datos globales que son visibles desde el exterior de la función f
. Por ejemplo, mantener un contador fuera de f
eso cuenta cuántas veces f
se llamó y simplemente hacer una negación basada en este conteo no es muy desafiante o interesante para nadie. Las decisiones f
que se tomen deben basarse únicamente en datos dentro f
del alcance léxico.
Sin embargo, esta restricción es probablemente inapropiada para algunos lenguajes orientados a la pila u otros tipos de idiomas que no distinguen estos tipos de datos o ámbitos. Utiliza tu mejor criterio para seguir con el espíritu de este desafío.
Tanteo
Se aplican reglas comunes de golf de código: su puntaje es el número de bytes en su código fuente.
La respuesta mínima requiere que el dominio y el codominio f
sean un subconjunto de los racionales Q
. Si restringe su dominio y codominio f
a los enteros Z
, su puntaje es el límite del 90% del número de bytes en su código fuente.
Desempate
En caso de empate, se utilizará lo siguiente en orden:
- Poca cantidad de símbolos imprimibles que no sean espacios en blanco en su código fuente
- Fecha y hora más tempranas de envío de respuestas
Editar
No está obligado a admitir números de tamaño arbitrario. Interprete los conjuntos Z
y los Q
tipos de datos en el idioma elegido (normalmente, entero y coma flotante, respectivamente).
Si su solución se basa completamente en la estructura subyacente o el patrón de bits de un tipo de datos, describa sus limitaciones y cómo se está utilizando.
f:Q->Q
significa?
f
es una función que asigna miembros de Q
(números racionales) a otros miembros (posiblemente los mismos) de Q
. ver en.wikipedia.org/wiki/Function_(mathematics)#Notation