Questa sfida è stata ispirata da un blog di programmazione che frequento. Si prega di consultare il post originale qui: Un puzzle di programmazione
Sfida
Definire una funzione f:Q->Q
tale che f(f(n)) = -n
per tutti gli interi diversi da zero n
e dove si Q
trova l'insieme dei numeri razionali.
Dettagli
Nella lingua che preferisci, definisci una funzione o un programma f
che accetta come parametro un numero n
e restituisce o genera un numero f(n)
.
L'input può essere fornito attraverso qualsiasi meccanismo più naturale per la tua lingua: argomento della funzione, lettura da STDIN, argomento della riga di comando, posizione dello stack, input vocale, segni di gang, ecc.
L'output deve essere un valore di ritorno da una funzione / programma o stampato su STDOUT.
Vorrei limitare le risposte alle funzioni che non sfruttano lo stato del programma o la memoria / i dati globali visibili dall'esterno della funzione f
. Ad esempio, tenere un contatore fuori da f
quello conta quante volte è f
stato chiamato e semplicemente fare una negazione basata su questo conteggio non è molto stimolante o interessante per nessuno. Le decisioni f
da prendere dovrebbero basarsi solo sui dati nell'ambito di f
applicazione lessicale.
Tuttavia, questa limitazione è probabilmente inappropriata per alcune lingue orientate allo stack o altri tipi di lingue che non distinguono questi tipi di dati o ambiti. Ti preghiamo di usare il tuo miglior giudizio per mantenere lo spirito di questa sfida.
punteggio
Si applicano le regole comuni per il golf del codice: il tuo punteggio è il numero di byte nel codice sorgente.
La risposta minima richiede che il dominio e il codice di f
essere un sottoinsieme dei razionali Q
. Se limiti il tuo dominio e il tuo codice f
agli interi Z
, il tuo punteggio è il limite del 90% del numero di byte nel tuo codice sorgente.
Tie-break
In caso di pareggio, nell'ordine verrà utilizzato quanto segue:
- Il minor numero di simboli stampabili non di spazi bianchi nel codice sorgente
- Prima data e ora di invio della risposta
modificare
Non è necessario supportare numeri di dimensioni arbitrarie. Si prega di interpretare gli insiemi Z
e Q
come tipi di dati nella lingua prescelta (in genere rispettivamente numeri interi e virgola mobile).
Se la tua soluzione si basa interamente sulla struttura sottostante o sullo schema di bit di un tipo di dati, descrivi i suoi limiti e il modo in cui viene utilizzata.
f:Q->Q
significa?
f
è una funzione che associa i membri di Q
(numeri razionali) ad altri membri (forse lo stesso) di Q
. vedi en.wikipedia.org/wiki/Function_(mathematics)#Notation