この課題は、私が頻繁に使用するプログラミングブログに触発されました。ここで元の投稿を参照してください:プログラミングパズル
チャレンジ
すべての非ゼロ整数、およびが有理数のセットであるf:Q->Q
ような関数を定義します。f(f(n)) = -n
n
Q
詳細
あなたが好みの言語では、定義してください1つの機能やプログラムf
、パラメータとして受け入れる1の数n
を返すまたは出力1つの数をf(n)
。
入力は、言語に最も自然なメカニズム(関数引数、STDINからの読み取り、コマンドライン引数、スタック位置、音声入力、ギャングサインなど)を通じて提供されます。
出力は、関数/プログラムからの戻り値、またはSTDOUTに出力される必要があります。
プログラムの状態や、関数の外部から見えるグローバルメモリ/データを利用しない関数への回答を制限したいと思いますf
。たとえば、カウンターをf
そのカウントの外にf
置いて、何回呼び出されたかをカウントし、このカウントに基づいて否定を行うことは、誰にとってもそれほど難しくありません。決定f
は、f
の語彙範囲内のデータのみに依存する必要があります。
ただし、この制限は、一部のスタック指向言語またはこれらのタイプのデータまたはスコープを区別しない他のタイプの言語にはおそらく不適切です。この挑戦の精神を維持するために最善の判断をしてください。
得点
一般的なコードのゴルフ規則が適用されます。スコアはソースコードのバイト数です。
最小の答えは、ドメインと共同ドメインf
が合理の部分集合であることを必要としますQ
。あなたのドメインとの終域制限する場合はf
整数にしZ
、その後、あなたのスコアは、数の90%の天井であるバイトソースコードでは。
タイブレーク
同点の場合、以下が順番に使用されます。
- ソースコードに含まれる印刷可能な非空白記号の数が最も少ない
- 回答提出の最も早い日時
編集
任意のサイズの数値をサポートする必要はありません。セットZ
をQ
選択した言語のデータ型として解釈してください(通常、それぞれ整数と浮動小数点)。
ソリューションがデータ型の基礎となる構造またはビットパターンに完全に依存している場合、その制限とその使用方法を説明してください。
f:Q->Q
意味ですか?
f
は、Q
(有理数)のメンバーをの他のメンバー(おそらく同じ)にマッピングする関数であることを意味しQ
ます。en.wikipedia.org/wiki/Function_(mathematics)#Notationを