gpt4 book ai didi

arrays - 使用 Bash 生成乐透号码

转载 作者:行者123 更新时间:2023-11-29 09:35:31 24 4
gpt4 key购买 nike

我有一个生成以下内容的简单 bash 脚本:

These are your winning lottery numbers: 
27 6 29 17 15 47
19 16 33 15 20 14
29 34 48 19 33 40

这是它的代码:

#!/bin/bash

tickets="$1"

function get_tickets { printf "How many tickets are you going to get? "; read tickets;}

function gen_numbers { printf "\nThese are your winning lottery numbers: \n";

for ((z=1 ; z<=tickets ; z++)); do
for ((i=0; i<6; i++ )); do
x=`echo $[ 1 + $[ RANDOM % 49 ]]`;
printf "\t $x";
done;
printf "\n"
done;
printf "\n"; }


############################
if [[ -z $tickets ]] ; then
get_tickets
gen_numbers
else
gen_numbers
fi

我的问题是,有谁知道如何修改它以防止每行出现重复数字?我想我会使用 uniq 和一个数组,但我不确定那会是什么样子。任何意见,将不胜感激;谢谢!

  • 这只是一个有趣的脚本。

最佳答案

你的尝试很不错。但是,我认为使用 shuf 命令获取随机值会更容易也更安全:

$ shuf -i 1-49 -n18 | xargs -n6
39 42 43 7 14 23
10 27 5 13 49 8
31 36 19 47 28 4

shuf -i X-Y -nZ 给出 X 和 Y 之间的 Z 个随机数。然后 xargs -nT 将它们格式化为每行 T 个数字的组。


更新

现在我看到了评论:

Yes; to avoid duplicate numbers within a row (by ticket).

在这种情况下,您只需执行 shuf -i 1-49 -n6 即可获得 6 个随机数。输出是行分隔的,因此您可以使用 tr '\n' ' ' 使其以空格分隔。

如果你想要很多行,例如 5,你可以这样做:

for i in {1..5}; do shuf -i 1-49 -n6; done | xargs -n6

示例输出:

$ for i in {1..5}; do shuf -i 1-49 -n6; done | xargs -n6
4 45 12 42 37 46
42 20 29 22 12 5
40 41 14 28 4 2
35 24 16 22 2 39
14 46 47 20 21 41

关于arrays - 使用 Bash 生成乐透号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com