在家玩流行的英國游戲節目 “Countdown” 中的數字游戲。
像許多人一樣,我在大流行期間看了不少新的電視節目。我最近發現了一個英國的游戲節目,叫做 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
?;蛘吒苯拥兀?code>(2+3)×100 + 4 + 1 = 505。
在命令行中隨機化列表
我發現在家里玩這個游戲的最好方法是從 1 到 10 的池子里抽出四個“小”數字,從 15 到 100 的 5 的倍數中抽出兩個“大”數字。你可以使用 Linux 命令行來為你創建這些隨機數。
讓我們從“小”數字開始。我希望這些數字在 1 到 10 的范圍內。你可以使用 Linux 的 seq
命令生成一個數字序列。你可以用幾種不同的方式運行 seq
,但最簡單的形式是提供序列的起始和結束數字。要生成一個從 1 到 10 的列表,你可以運行這個命令:
-
$ seq 1 10
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
為了隨機化這個列表,你可以使用 Linux 的 shuf
(“shuffle”,打亂)命令。shuf
將隨機化你給它的東西的順序,通常是一個文件。例如,如果你把 seq
命令的輸出發送到 shuf
命令,你會收到一個 1 到 10 之間的隨機數字列表:
-
$ seq 1 10 | shuf
-
3
-
6
-
8
-
10
-
7
-
4
-
5
-
2
-
1
-
9
要從 1 到 10 的列表中只選擇四個隨機數,你可以將輸出發送到 head
命令,它將打印出輸入的前幾行。使用 -4
選項來指定 head
只打印前四行:
-
$ seq 1 10 | shuf | head -4
-
6
-
1
-
8
-
4
注意,這個列表與前面的例子不同,因為 shuf
每次都會生成一個隨機順序。
現在你可以采取下一步措施來生成“大”數字的隨機列表。第一步是生成一個可能的數字列表,從 15 開始,以 5 為單位遞增,直到達到 100。你可以用 Linux 的 seq
命令生成這個列表。為了使每個數字以 5 為單位遞增,在 seq
命令中插入另一個選項來表示 步進:
-
$ seq 15 5 100
-
15
-
20
-
25
-
30
-
35
-
40
-
45
-
50
-
55
-
60
-
65
-
70
-
75
-
80
-
85
-
90
-
95
-
100
就像以前一樣,你可以隨機化這個列表,選擇兩個“大”數字:
-
$ seq 15 5 100 | shuf | head -2
-
75
-
40
用 Bash 生成一個隨機數
我想你可以用類似的方法從 200 到 999 的范圍內選擇游戲的目標數字。但是生成單個隨機數的最簡單的方案是直接在 Bash 中使用 RANDOM
變量。當你引用這個內置變量時,Bash 會生成一個大的隨機數。要把它放到 200 到 999 的范圍內,你需要先把隨機數放到 0 到 799 的范圍內,然后加上 200。
要把隨機數放到從 0 開始的特定范圍內,你可以使用模數算術運算符。模數計算的是兩個數字相除后的 余數。如果我用 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 會幫你做這件事。
玩數字游戲
讓我們把所有這些放在一起,玩玩數字游戲。產生兩個隨機的“大”數字, 四個隨機的“小”數值,以及目標值:
-
$ seq 15 5 100 | shuf | head -2
-
75
-
100
-
$ seq 1 10 | shuf | head -4
-
4
-
3
-
10
-
2
-
$ echo $(( RANDOM % 800 + 200 ))
-
868
我的數字是 75、100、4、3、10 和 2,而我的目標數字是 868。
如果我用每個“小”和“大”數字做這些算術運算,并不超過一次,我就能接近目標數字了:
-
10×75 = 750
-
750+100 = 850
-
然后:
-
4×3 = 12
-
850+12 = 862
-
862+2 = 864
只相差 4 了,不錯!但我發現這樣可以用每個隨機數不超過一次來計算出準確的數字:
-
4×2 = 8
-
8×100 = 800
-
然后:
-
75-10+3 = 68
-
800+68 = 868
或者我可以做 這些 計算來準確地得到目標數字。這只用了六個隨機數中的五個:
-
4×3 = 12
-
75+12 = 87
-
然后:
-
87×10 = 870
-
870-2 = 868
試一試 Countdown 數字游戲。
原文地址:https://linux.cn/article-13358-1.html