函数棋:https://shaihai.cn/。规则很简单,在直角坐标系上,系统给你一些绿格和红格,用给定的符号(四则运算、乘方、绝对值、sin、cos、tan、x、ln等),构造一个函数,使其穿过所有的绿格,不穿过任何红格。
这个小游戏主要还是锻炼大家的思维能力,所以一般而言,还是应该通过观察、目测、联想的方法去推导出答案。但是,其中不乏有一些离谱的题目,例如绿格被红格团团围住,堪称“无解”。因此,我们可以考虑利用一些“不讲武德”的手段来解决这些问题。
下面,就来推导一下这个“不讲武德”的手段。
我们知道,对于它给出的任何一道题目,无论绿格、红格如何分布,理论上我们都能用分段函数强行表示。就以第一题为例,它是一个左下角在原点的边长为1的正方形绿格,正常来讲,出题者希望我们用 y=x 或者 y=0.5 来表示。但我们也不是不可以强行用分段函数来表示:
y=⎩⎨⎧0,0.5,0,x<0.10.1≤x≤0.9x>0.9
特别地,当同一纵列有多个绿块时(也就是同一个x值有多个y值对应的绿块时),我们也可以更加细分多拆几次,例如拆成 0.1<x<0.5 和 0.5<x<0.9 两个区间。
而任何有限分段函数(即定义域被分成有限个区间,每个区间上由初等函数定义)都可以用绝对值、四则运算以及初等函数表示成一个不含显式分段的单一表达式。核心在于用绝对值构造 最大值 和 最小值 函数:
- max(a,b)=2a+b+∣a−b∣
- min(a,b)=2a+b−∣a−b∣
通过嵌套 max 和 min,可以实现任意有限个条件分支。例如,一个三段函数:
y=⎩⎨⎧f1(x),f2(x),f3(x),x≤aa<x≤bx>b
可以写成:
f(x)=f1(x)⋅Ix≤a+f2(x)⋅Ia<x≤b+f3(x)⋅Ix>b
指示函数 Ix≤a=21(1−sgn(x−a)),其中 sgn(x)=∣x∣x。
不过需要注意的是,这样得到的表达式在分段点处可能无定义(分母为零)。在函数棋这类游戏中,由于格子是开区间或闭区间,这些奇点往往可以被忽略(因为函数不需要在精确的边界点取值)。
综上,既然任何一道题目可以用分段函数表示,而只要允许使用绝对值,就能构造出所有有限分段函数,因此理论上我们就可以用“暴力破解”的方法解决所有函数棋的问题。