Per questa sfida è necessario implementare due funzioni, f e g , sugli interi, in modo tale che f ∘ g sia una funzione strettamente decrescente mentre g ∘ f sia una funzione strettamente crescente. In altre parole, se prendi due numeri interi a <b , allora f (g (a))> f (g (b)) e g (f (a)) <g (f (b)) . Non ci sono restrizioni sul f e g individualmente, salvo che essi devono ogni mappa un intero ad un altro numero intero.
Si prega di includere una breve descrizione di f e g e un argomento per il motivo per cui hanno la proprietà richiesta.
Ringraziamento: questa sfida è stata ispirata da un problema nel concorso di Master of Mathematics rumeno del 2011 (che chiede la stessa cosa ma sui numeri reali, anziché sui numeri interi). Se vuoi davvero spoiler, ora sai cosa cercare.
Regole
La parola "funzione" in questa sfida dovrebbe essere presa nel senso matematico di mappare un intero a un altro: puoi scrivere due programmi o due funzioni e usare uno dei metodi standard per ricevere input e fornire output, come al solito. È possibile utilizzare rappresentazioni di stringhe di numeri interi anziché variabili intere effettive, ma i tipi di input e output devono essere identici, in modo che le funzioni possano essere composte senza convertire manualmente i tipi tra. Ricordate che concettualmente, f e g ancora bisogno di essere funzioni ℤ, quindi non si può barare utilizzando due diverse rappresentazioni di stringa dello stesso numero o qualcosa di simile.
Ricorda che le funzioni possono essere senza nome , purché il loro nome non sia necessario da solo o da un'altra funzione definita. Se si nominano una o entrambe le funzioni, si può presumere che esistano nello stesso programma, in modo che possano fare riferimento l'uno all'altro nella loro implementazione (ad esempio
def f(x): return -g(x)
in Python).Si applicano le solite regole di overflow dei numeri interi: la soluzione deve essere in grado di funzionare per numeri interi arbitrariamente grandi in una versione ipotetica (o forse reale) della lingua in cui tutti i numeri interi non sono associati per impostazione predefinita, ma se il programma non riesce in pratica a causa dell'implementazione non supportando numeri interi così grandi, ciò non invalida la soluzione.
È possibile utilizzare qualsiasi linguaggio di programmazione , ma si noti che queste scappatoie sono vietate per impostazione predefinita.
Questo è code-golf , quindi il tuo punteggio è la somma del numero di byte di entrambe le funzioni e vince la risposta valida più breve.