この課題のために、f∘gは厳密に減少する関数であり、g∘fは厳密に増加する関数であるように、整数に2つの関数fとgを実装する必要があります。つまり、任意の2つの整数a <bを取る場合、f(g(a))> f(g(b))およびg(f(a))<g(f(b))となります。fとgに個別に制限はありませんが、それぞれが1つの整数を別の整数にマッピングする必要があることを除きます。
fとgの簡単な説明と、それらに必要なプロパティがある理由の引数を含めてください。
クレジット:この課題は、2011年のルーマニアの数学修士大会(整数ではなく実数で求められます)の問題に触発されました。ネタバレが本当に必要な場合は、何を検索すればよいかがわかります。
ルール
この課題における「関数」という言葉は、1つの整数を別の整数にマッピングするという数学的な意味で解釈する必要があります。2つのプログラムまたは2つの関数を記述し、通常どおり入力を受け取り、出力を提供する標準的な方法を使用できます。実際の整数変数の代わりに整数の文字列表現を使用できますが、入力と出力のタイプは同一である必要があります。そのため、間にタイプを手動で変換することなく関数を構成できます。概念的には、fとgはまだonの関数である必要があるため、同じ数字またはそのようなものの2つの異なる文字列表現を使用して不正行為を行うことはできません。
ことを忘れないでください関数は無名のかもしれ彼らの名は、それ自体またはユーザーが定義する別の機能で必要とされていない限り、。関数の一方または両方に名前を付ける場合、それらが同じプログラムに存在すると仮定して、それらの実装(
def f(x): return -g(x)
Pythonなど)で相互に参照できるようにします。通常の整数オーバーフロールールが適用されます。ソリューションは、すべての整数がデフォルトで制限されていない仮想バージョン(または実際のバージョン)の任意の大きな整数で動作できる必要がありますが、実装によりプログラムが実際に失敗する場合それほど大きな整数をサポートしていなくても、ソリューションは無効になりません。
任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。
これはcode-golfであるため、スコアは両方の関数のバイト数の合計であり、最短の有効な回答が勝ちます。