实施强大的Darboux功能


13

根据Wikipedia的说法,强大的Darboux功能是

每个(非空)打开间隔的图像都是整个实线

换句话说,如果给定3个任意实数aby,则函数f强烈是Darboux ,总是有可能在ab之间(相异)找到一个x,使得f x = yabyxabf(x)=y

出于这一挑战的目的,我们将强烈考虑使用Darboux函数代替理性。

您面临的挑战是编写一个程序或函数以:

  • 给出每个有理数输入的有理数作为输出,
  • 对于给定的输入,总是给出相同的输出,并且
  • 具有强烈的Darboux属性。

输入和输出可以是以下之一:

  • 一种任意精度的数字类型,如果您的语言有一种(或具有一种用于该语言的库,例如GMP)。
  • 数字的字符串表示形式,您可能会假设该数字将始终包含小数点,并且在每一侧至少包含一位数字。它可以是任何碱b2,但输入和输出必须是相同的基。您可以使用任何字符集作为数字和小数点(但同样,输入和输出之间的字符必须一致)。

输入将始终具有终止基数b扩展。至于输出,根据您对功能的选择,理论上它的基数b可能会是不终止的,您可以选择以下任意一种:

  • 永远输出数字。
  • 接受一个额外的整数作为输入,并输出至少那个位数。
  • 输出至少与输入中的数字一样多的数字(可能包含尾随零)。

注意,通过这一挑战的性质,约定数可假定为是通过标准编号类型可表示没有适用,除了在上面的选项2中描述的第二输入端。

为避免仅在非终止理性上定义的函数出现漏洞,您的提交必须能够在实践中任意产生接近所需值的输出。形式上,给定有理数abyε,必须有一个以您选择的底数终止的有理数x,使得a<x<b|f(x)y|<ε


为了给您一些想法,以下是Conway base 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。例如,假设我们要在123.456 13123.457 13之间找到一些x,以使f x = 7.89。以13为基的值123.456 A 7 C 89 13将满足此要求。123.45613123.45713f(x)=7.89123.456A7C8913

您提交的内容可能是此功能的实现,尽管我怀疑还有其他一些强烈的Darboux函数要实施的要短得多。:)


b

math.stackexchange链接,以及某些示例的原始问题
朱塞佩

xx

@NickKennedy谢谢,我忽略了这一点-我已经编辑了问题以明确说明。
Doorknob

1
嗯,我很确定我可以定义一个恒定的强Darboux函数,或者在所有终止输入上的标识都一样……
Christian Sievers

Answers:


4

视网膜0.8.243 50个字节

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

在线尝试!I / O是二进制字符串。编码一个y接近另一个二进制数的二进制数a,如下所示:

  1. 如果a不包含.,后缀为1.。
  2. 如果a在后面包含奇数个数字.,则后缀a 0
  3. 如果y为负,则后缀为11否则10
  4. 对于中的每个数字y,后缀0为该数字。
  5. 如果y包含a .,则11在该位置添加后缀,否则在y。中的所有数字后添加后缀。

说明:

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

对从二进制点开始的数字进行配对。如果数字是有效的编码,则将最后一个1x数字对解码为a .,将第二个最后一个解码为可选-符号。之前的数字将被忽略。

0(.)
$1

这应该只留下以开头的对0,因此删除0


有时我会得到诸如的输出-.。这些暗示零还是不应该产生?
大公埃里克(Erik the Outgolfer)

@EriktheOutgolfer我想我可以将*s 更改为+s,这样可以保证在.?之前和之后至少有一位数字?
尼尔

实际上,我不能保证数字之后的数字.。我想我还是可以保证之前的数字.
尼尔

数字中的附加端子0 .不会更改其值,但是函数输入中的此类更改会更改输出。也许您可以通过假设输入没有这样的0来解决此问题。另外,如果您从右对分组,那么“从理论上讲,对于任何实际输入而言”如何工作?
Christian Sievers

@ChristianSievers(对不起,我之前没有注意到我的收件箱)我的回答基于问题中对base 13函数的描述,这似乎也需要终止表示。另外,您是对的,我假设不会有尾随零。(因此,必须始终11在步骤2中附加整数。)
Neil

1

果冻,71字节

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

在线尝试!

一个完整的程序,以10为底的数字作为输入和输出,并实现Conway以13为基数的功能,但使用7和10而不是10和13。输入和输出均使用逗号作为小数点分隔符。输出将有一个前导-负数。


TIO链接上的示例在输入和输出中都有数字9,那么这些以7为基数的数字又如何呢?
Christian Sievers

@ChristianSievers对不起表示输入和输出均以10为基数。基部7中的代码使用,但被转换回基座10
尼克肯尼迪

很好,现在我可以更改输入并了解它如何影响输出!
Christian Sievers

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.