作者 主題: [原創] 大樂透亂數選號  (閱讀 4746 次)

0 會員 與 1 訪客 正在閱讀本文。

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
[原創] 大樂透亂數選號
« 於: 2005-11-29 15:39 »
簽這麼久也沒中超過400元。
閒來無事用perl寫個『電腦選號』
祝大家中大獎。

#!c:/Apache2/Perl/bin/Perl.exe
use Array::Unique;
use strict;
use warnings;
tie my @a, 'Array::Unique';

until ( $#a == 5){
my $num1 = int rand 49 ;
if ($num1 == 0){next;}
push @a,$num1;
}
@a = sort {$a <=> $b } @a;

print $a[0]." ".$a[1]." ".$a[2]." ".$a[3]." ".$a[4]." ".$a[5]."\n";

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
[原創] 大樂透亂數選號
« 回覆 #1 於: 2005-11-29 15:56 »
呵... 之前我也用 shell 寫過, 還可以包牌呢!  ^_^

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
[原創] 大樂透亂數選號
« 回覆 #2 於: 2005-11-29 23:30 »
呵... 找到了.
想發財的朋友, 來試試吧:

代碼: [選擇]
#!/bin/bash

[ $# = 3 ] || {
        echo -e "Usage:\n\t\t$0 max_number required_number select_number" >&2
        echo -e "Example:\t$0 49 6 8" >&2
        exit 1
}
echo $* | egrep -q '[^0-9 ]' && {
        echo -e "\n\t$0: Error: argument must be number ONLY!\n" >&2
        exit 2
}
[ $3 -lt $2 ] && {
        echo -e "\n\t$0: Error:\n\t\tselect_number($3) can NOT be smaller than required_number($2)\n" >&2
        exit 3
}
[ $3 -gt $1 ] && {
        echo -e "\n\t$0: Error:\n\t\tselect_number($3) can NOT be greater than max_number($1)\n" >&2
        exit 4
}
[ $2 -gt $1 ] && {
        echo -e "\n\t$0: Error:\n\t\trequired_number($2) can NOT be greater than max_number($1)\n" >&2
        exit 5
}


max_num=$1
req_num=$2
sel_num=$3
all_num=($(seq $max_num))

get_num() {
  m=1
  while [ $m -le $sel_num ]
  do
        n=$((RANDOM%max_num))
        _num=${all_num[$n]}
        echo $num | egrep -wq $_num && continue
        num="$num $_num"
        ((m++))
  done
  echo $num | xargs -n1 | sort -n
}
all_num=($(get_num))

pick_num() {
  unset pnum
  for ((p=1;p<=req_num;p++))
  do
        _pnum=$(eval echo \$$p)
        pnum="$pnum $_pnum"
  done
  echo $pnum
}

hold_num() {
  unset hnum
  for ((h=1;h<req_num;h++))
  do
        _hnum=$(eval echo \$$h)
        hnum="$hnum $_hnum"
  done
  shift $((h-1))
  while [ $# -gt 0 ]
  do
        pick_num $hnum $*
        shift 1
  done
}

list_num() {
  l_num=($*)
  while [ ${#l_num[@]} -ge $req_num ]
  do

        hold_num ${l_num[@]}
        l_num[1]=
        l_num=(${l_num[@]})
  done
}

show_num () {
  while [ $# -ge $req_num ]
  do
        list_num $*
        shift 1
  done
}

show_num ${all_num[@]}



執行結果:
./lotto.sh 49 6 8
16 18 21 22 29 33
16 18 21 22 29 42
16 18 21 22 29 43
16 21 22 29 33 42
16 21 22 29 33 43
16 22 29 33 42 43
18 21 22 29 33 42
18 21 22 29 33 43
18 22 29 33 42 43