多くの人々のように、私はパンデミックの間にたくさんの新しいテレビ番組を探検してきました。最近、カウントダウンという英国のゲーム番組を発見しました。 、競技者が2種類のゲームをプレイする場合:単語 ゲームでは、文字の寄せ集めと数字から最長の単語を作成しようとします。 ゲームでは、ランダムに選択された数字からターゲットの数字を計算します。私は数学を楽しんでいるので、ナンバーゲームに惹かれていることに気づきました。
ナンバーゲームはあなたの次の家族のゲームの夜に楽しい追加になることができるので、私はそれの私自身のバリエーションを共有したいと思いました。まず、1から10までの「小さい」数値と、100までの15、20、25などの「大きい」数値に分割された乱数のコレクションから始めます。大きいものと小さいものの両方から6つの数値の任意の組み合わせを選択します。数字。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
次に、200〜999のランダムな「ターゲット」数を生成します。次に、6つの数で簡単な算術演算を使用して、「小さい」数と「大きい」数のそれぞれを1回だけ使用してターゲット数を計算します。目標数を正確に計算するとポイント数が最大になり、目標数から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のプールから4つの「小さい」数字を引き出し、15から100の5の倍数から2つの「大きい」数字を引き出すことです。Linuxコマンドラインを使用できます。これらの乱数を作成します。
「小さな」数字から始めましょう。これらを1から10の範囲にします。Linuxのseq
を使用して数列を生成できます。 指図。 seq
を実行できます いくつかの異なる方法がありますが、最も簡単な形式は、シーケンスの開始番号と終了番号を提供することです。 1から10までのリストを生成するには、次のコマンドを実行します。
$ seq 1 10
1
2
3
4
5
6
7
8
9
10
このリストをランダム化するには、Linuxのshuf
(「シャッフル」)コマンド。 shuf
与えたもの、通常はファイルの順序をランダム化します。たとえば、seq
shuf
コマンドを実行すると、1から10までのランダムな数字のリストが表示されます:
$ seq 1 10 | shuf
3
6
8
10
7
4
5
2
1
9
1から10のリストから4つの乱数だけを選択するには、出力をhead
に送信します。 コマンド。入力の最初の数行を出力します。 -4
を使用する そのhead
を指定するオプション 最初の4行のみを印刷する必要があります:
$ seq 1 10 | shuf | head -4
6
1
8
4
shuf
であるため、このリストは前の例とは異なることに注意してください。 毎回ランダムな順序を生成します。
これで、次のステップに進んで、「大きな」数のランダムリストを生成できます。最初のステップは、15から始まり、100に達するまで、5ずつ増加する可能性のある数値のリストを生成することです。このリストは、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
以前と同じように、このリストをランダム化して、「大きな」数字を2つ選択できます。
$ seq 15 5 100 | shuf | head -2
75
40
同様の方法を使用して、ゲームのターゲット番号を200〜999の範囲から選択できると思います。ただし、単一のランダム値を生成する最も簡単な解決策は、RANDOM
を使用することです。 Bashで直接変数。この組み込み変数を参照すると、Bashは大きな乱数を生成します。これを200から999の範囲にするには、最初に乱数を0から799の範囲に入れてから、200を追加する必要があります。
0から始まる特定の範囲に乱数を入れるには、モジュロを使用できます。 算術演算。 Moduloは剰余を計算します 2つの数を割った後。 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
なぜ私がRANDOM
を使用したのか不思議に思うかもしれません $RANDOM
の代わりに 私のBashステートメントで。算術展開では、Bashは二重括弧内の変数を自動的に展開します。 $
は必要ありません $RANDOM
で Bashが自動的に行うため、変数の値を参照する変数。
数字ゲームをプレイするためにそれらすべてをまとめましょう。 2つのランダムな「大きい」数値、4つのランダムな「小さい」値、およびターゲット値を生成します。
$ 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 。
「小さい」数と「大きい」数のそれぞれを1回だけ使用してこれらの算術演算を実行すると、目標数に近づくことができます。
10×75 = 750
750+100 = 850
and:
4×3 = 12
850+12 = 862
862+2 = 864
それはたった4つです—悪くはありません!しかし、私はこの方法で、各乱数を1回だけ使用して正確な数を計算する方法を見つけました:
4×2 = 8
8×100 = 800
and:
75-10+3 = 68
800+68 = 868
または、これらを実行することもできます 正確に目標数を取得するための計算。これは、6つの乱数のうち5つだけを使用します:
4×3 = 12
75+12 = 87
and:
87×10 = 870
870-2 = 868
カウントダウンを与える ナンバーゲームを試してみてください。コメントであなたがどれだけ上手くいったか教えてください。