当前位置: 首页 > 科技观察

使用Linux命令玩有趣的数学游戏

时间:2023-03-13 01:16:27 科技观察

在家玩英国流行游戏节目“倒计时”中的数字游戏。和很多人一样,我在大流行期间看了很多新的电视节目。我最近发现了一个名为Countdown的英国游戏节目,其中参赛者玩两个游戏:一个是文字游戏,他们试图从一堆字母中找到最长的单词,另一个是数字游戏,他们从随机选择的数字中计算出一个目标数字.因为我喜欢数学,所以我发现自己被数字游戏所吸引。按数字玩可以为你的下一个家庭游戏之夜增添趣味,所以我想我会分享我自己的一个变体。您从一组随机数开始,分解为“小”数1到10和15、20、25等,直到“大”数100。您可以从大数和小数字。接下来,您生成一个介于200和999之间的随机“目标”数字。然后对您的六个数字进行简单的算术运算,尝试使用每个“小”和“大”数字计算出目标数字,但不要超过一次。如果您可以准确计算出目标数字,您将获得最高分,如果您与目标数字相差10个以内,则得分较低。比如你的随机数是75、100、2、3、4、1,你的目标数是505,那么可以说2+3=5,5×100=500,4+1=5,5+500=505。或者更直接地说:(2+3)×100+4+1=505。在命令行中随机化列表我发现在家玩这个游戏的最好方法是从一组数字中抽取四个“小”数字1到10和5的倍数中的两个“大”数字15到100。您可以使用Linux命令行为您创建这些随机数。让我们从“小”数字开始。我希望数字在1到10的范围内。您可以使用Linuxseq命令生成一个数字序列。您可以通过几种不同的方式运行seq,但最简单的形式是提供序列的开始和结束编号。要生成从1到10的列表,您可以运行此命令:$seq11012345678910要随机化此列表,您可以使用Linux的shuf(“随机播放”)命令。shuf会随机化你给它的东西的顺序,通常是一个文件。例如,如果将seq命令的输出发送到shuf命令,您将收到1到10之间的随机数列表:$seq110|shuf36810745219要从1到10的列表中只选择四个随机数,您可以将输出发送到head命令,它将打印出输入的前几行。使用-4选项指定head只打印前四行:$seq110|混音|head-46184请注意,这个列表与前面的示例不同,因为shuf每次都会生成一个随机序列。现在您可以采取下一步来生成随机的“大”数字列表。第一步是生成可能的数字列表,从15开始,增加5,直到达到100。您可以使用Linuxseq命令生成此列表。要使每个数字递增5,请在seq命令中插入另一个选项以指示步骤:$seq15520253035404550556065707580859095100就像之前一样,您可以随机化此列表,选择两个“大”数字:$seq155100|混音|head-27540GeneratearandomnumberwithBash我认为你可以使用类似的方法从200到999的范围内选择游戏的目标数字。但是生成单个随机数的最简单的解决方案是直接使用RANDOM变量在巴什。当您引用这个内置变量时,Bash会生成一个很大的随机数。要将它放在200到999的范围内,需要先将随机数放在0到799的范围内,然后加上200。要将随机数放在从0开始的特定范围内,可以使用模运算符。Modulo计算两个数相除后的余数。如果我将801除以800,则结果为1,余数为1(模1)。800除以800的结果为1,余数为0(模0)。799除以800得到0,余数为799(模799)。Bash通过$(())构造支持算术扩展。在双括号之间,Bash将对您提供的数值执行算术运算。要计算801除以800再加200的模数,您可以输入:$echo$((801%800+200))201通过这个操作,您可以计算一个介于200和999之间的随机目标数:$echo$((RANDOM%800+200))673你可能想知道为什么我在Bash语句中使用RANDOM而不是$RANDOM。在算术扩展中,Bash会自动扩展双括号内的任何变量。您不需要$RANDOM变量上的$来引用该变量的值,因为Bash会为您做这件事。玩数字让我们把所有这些放在一起玩数字。生成两个随机“大”数,四个随机“小”数,以及目标值:$seq155100|混音|头-275100$序列110|混音|head-443102$echo$((RANDOM%800+200))868我的数字是75、100、4、3、10和2,我的目标数字是868。如果我对每个“小”和“big”数,不止一次,我接近目标数:10×75=750750+100=850然后:4×3=12850+12=862862+2=864只相差4,不错!但我发现这可以计算每个随机数的确切数字不超过一次:4x2=88x100=800然后:75-10+3=68800+68=868或者我可以精确地进行这些计算以获得目标号码。这只使用了六个随机数中的五个:4×3=1275+12=87然后:87×10=870870-2=868尝试倒计时数字游戏。