強力なDarboux関数を実装する


12

ウィキペディアによると、強力なダルブー関数は

すべての(空ではない)オープン間隔のイメージが実ライン全体であるもの

言い換えれば、関数fは、3つの任意の実数ab、およびy与えられた場合に強くDarboux であり、f x = yであるような(別個の)abの間のxを常に見つけることができます。abf(x)=y

この課題の目的のために、代わりに有理数よりも強力にダルブー関数を検討します。

あなたの課題は、次のようなプログラムまたは関数を作成することです。

  • 有理数入力ごとに有理数を出力として与えます。
  • 与えられた入力に対して常に同じ出力を与える
  • 強くDarbouxプロパティを持っています。

入力と出力は次のいずれかです。

  • 言語に1つ(またはGMPなどの1つのライブラリー)がある場合、任意精度の数値型。
  • 数字の文字列表現。常に小数点と両側に少なくとも1桁の数字が含まれると想定できます。これは、任意のベースであってもよく、b2が、入力と出力が同じ塩基でなければなりません。数字と小数点には任意の文字セットを使用できます(ただし、入力と出力の間で一貫している必要があります)。

入力には常に終端b展開があります。機能の選択に応じて、理論的には終了しないbase b展開を持つ出力については、次のいずれかを選択できます。

  • 数字を永久に出力します。
  • 少なくともその数の数字を入力および出力として追加の整数を取ります。
  • 入力と少なくとも同じ桁数を出力します(末尾にゼロが含まれる場合があります)。

この課題の性質によって、ことが慣例そのノート番号は、標準的な数の種類によって表現可能であると仮定することができるがないではない上記のオプション2で説明した第2の入力を除いて、適用します。

非終端の有理数でのみ定義される関数の抜け穴を避けるために、実際には、サブミットは目的の値近い任意の出力を生成できる必要があります。正式には、有理数与えられ、BY、およびε、合理的な数が存在しなければならxは、選択したベースでの終了は、そのことを< X < B| f x y | < εabyεxa<x<b|f(x)y|<ε


いくつかのアイデアを提供するために、Conwayベース13機能の説明を以下に示します

  • 変換xを基数13に、小数点を削除します。
  • 結果は次の形式である場合[x]A[y]C[z]13[y]および[z] 0から9までの数字のみで構成し、f(x)=[y].[z]
  • 結果は次の形式である場合[x]B[y]C[z]13[y]および[z]次に、0から9までの数字のみで構成f(x)=[y].[z]
  • それ以外の場合、f(x)=0

この関数は強くDarbouxです。例えば、f x = 7.89になるように123.456 13123.457 13の間のxを見つけたいとします。ベース13の値123.456 A 7 C 89 13は、この要件を満たします。123.45613123.45713f(x)=7.89123.456A7C8913

あなたの提出はこの関数の実装かもしれませんが、実装するのがもっと短い他の強力なDarboux関数があると思います。:)


数値は、終端拡張を持つと想定されていますか?b
ニトロドン

math.stackexchangeリンクと元の質問もいくつかの例のためのだまされた
ジュゼッペ

Conwayベース13アルゴリズムを実装する場合、ベース13で入力を取得できますが、ベース13でも出力する必要があります。関数の出力は通常10進数であるため、最終的には3桁の繰り返し番号になります。これはどのように出力されるべきですか?最初の桁を出力します。xは質問で指定されています(まだではありません)。または、それが繰り返し発生していることを示す必要がありますか?xx
ニックケネディ

@NickKennedyありがとう、見落としました-質問を編集して明確にしました。
ドアノブ

1
うーん、私はかなり確実私が...定数またはすべての終端入力にアイデンティティである、強くダルブー関数を定義することができますよ
クリスチャンのSievers

回答:


4

網膜0.8.243の 50バイト

^.*\.(..)*1(.)((..)+)1.((..)*)$
$2$*-$3.$5
0(.)
$1

オンラインでお試しください!I / Oはバイナリ文字列です。次のようyに、別の2 進数に近い2進数をエンコードaします。

  1. に接尾辞1 aが含まれていない場合.
  2. a後に奇数の桁が含まれる場合.、接尾辞a 0
  3. yが負の場合、接尾辞、11それ以外の場合はsuffix 10です。
  4. の各数字についてy、接尾辞の0後にその数字が続きます。
  5. そのポイントに接尾辞yが含まれている場合、そうでない場合は、のすべての数字の後に接尾辞を付けます。.11y

説明:

^.*\.(..)*1(.)((..)+)1.((..)*)$
$2$*-$3.$5

バイナリポイントから始まる数字をペアにします。数値が有効なエンコードである場合、最後の1x数字のペアをaにデコードし.、2番目の数字をオプションの-符号にデコードします。それより前の数字は無視されます。

0(.)
$1

これは、で始まるペアを残すだけな0ので、0sを削除します。


のような出力が時々得られます-.。それらはゼロを意味しますか、それとも生成されるはずではありませんか?
エリックアウトゴルファー

@EriktheOutgolfer私は*sを+sに変更できると思い.ます。
ニール

実際、.。の後の数字は保証できません。私はまだ前に数字を保証できると思い.ます。
ニール

数値に追加のターミナル0を追加し.ても値は変更されませんが、関数の入力を変更すると出力が変更されます。入力にそのような0がないと仮定することで、これを修正できるかもしれません。また、右からペアをグループ化する場合、これはどのように「理論的に実際の入力に対して機能しますか?」
クリスチャンシーバーズ

@ChristianSievers(以前受信ボックスに気づかなかったのでごめんなさい)私は質問のベース13関数の説明に答えを出しました。また、末尾のゼロはないと仮定していたことは正しいです。(したがって、整数は常に11ステップ2で追加する必要があります。)
ニール

1

ゼリー、71バイト

L7*©ṛḅ7WµṪ×⁵d®µ⁴‘¤Ð¡ḊṖ
DF7,8ṣṪ¥ƒṣ9ḅ7×ɗÇƭ€j”,
DFf7r9¤ṫ-Ḍ⁼Ɱ“OY‘TịØ+³çƲ0Ẹ?

オンラインでお試しください!

10進数を入力および出力として使用し、Conway base 13関数を実装し、10および13ではなく7および10を使用する完全なプログラム。入力と出力の両方で小数点としてカンマが使用されます。負の数の場合、出力には先頭が付きます。


TIOリンクの例では、入力と出力に数字9がありますが、これらのベース7の数字はどうですか?
クリスチャンシーバーズ

@ChristianSievers申し訳ありませんが、入力および出力のベース10を意味します。ベース7は、コードで使用されるが、ベース10に変換バックされる
ニック・ケネディ

これで、入力を変更し、それが出力にどのように影響するかを理解できるようになりました!
クリスチャンシーバーズ

1

網膜28 25 26 28バイト

.*11|22
.
D^`\.
^3
-
4(.)
$1

オンラインでお試しください!

説明

.*11|22     Delete up to the last 11 and prepend a dot. Also change 22 to a dot.
.
D^`\.       Keep only the last dot, if there is one.
^3          Change 3 at the beginning to a minus sign.
-
4(.)        4 is the escape character.
$1

先行ゼロと後続ゼロ、および整数部分のない数値を出力する場合があります。

私が使用できれば2バイトまたは3バイト以上ゴルフできました4+。しかし、入力に4sの無限のストリームがある場合、理論的な結果を定義する方法がわかりません。


1
この答えを投稿することで、T字型のものに呪われました。
jimmy23013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.