作者 主題: [原創] 大樂透自動對獎程式  (閱讀 16440 次)

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

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
[原創] 大樂透自動對獎程式
« 於: 2006-05-17 09:50 »
use strict;
use WWW::Mechanize;

#設定每期樂透公佈的網頁
my $url = "http://www.roclotto.com.tw/topnews/biglotto.asp";
my $mech = WWW::Mechanize->new();

$mech->get( $url );
#抓完存檔
$mech->save_content( '1.html');


my @special_number;
my %lotto_number;
my $line_number=1;

#讀檔
open(output,"< 1.html ") or die;

while (<output>) {

if ($_ =~ /(\d+)、(\d+)、(\d+)、(\d+)、(\d+)、(\d+)/ )

 {  
 #把到的一般號碼抓進hash裡
 %lotto_number=($1=>1,$2=>1,$3=>1,$4=>1,$5=>1,$6 );
  }

#抓特別號
 if ($_ =~ /<font color=\"\#FF0000\">(\d+)<\/font>/ )


 { push @special_number ,$1;  }
 

}
close(output);

#開檔,你的樂透號碼檔
#每一行的格式為(記得把#號去掉,最後一個號碼記得斷行(\n))
#2 6 11 12 27 45
#4 12 17 20 24 47

open(log_file,"< log.txt ") or die;

while (<log_file>) {
my $hit_number=0;
my @line_number=split(/\s/);

foreach my $temp_number (@line_number) {

#看讀進的號碼有沒有中
if (exists $lotto_number{$temp_number}){

$hit_number++;
}


}

#印出行號及中獎的號碼數
print '行號 ',$line_number," 中 ",$hit_number," 號碼\n";
$line_number++;
}

close(log_file);

#
#
#備註:程式中用所使用的正規可能不是很好,也許有發生錯誤的可能
#但目前可用
#希望有其它的人能想出更好的方法。
#忘記寫特別號的判斷,等寫完再補上  
#
#

#-------------以下是有特別號判斷的--------------------

use strict;
use WWW::Mechanize;

my $url = "http://www.roclotto.com.tw/topnews/biglotto.asp";
my $mech = WWW::Mechanize->new();
$mech->get( $url );
$mech->save_content( '1.html');

my (%lotto_number,%special_number);
my $line_number=1;

open(output,"< 1.html ") or die;

while (<output>) {

if ($_ =~ /(\d+)、(\d+)、(\d+)、(\d+)、(\d+)、(\d+)/ )

 {  
 
 %lotto_number=($1=>1,$2=>1,$3=>1,$4=>1,$5=>1,$6 );
  }

 if ($_ =~ /<font color=\"\#FF0000\">(\d+)<\/font>/ )

 { %special_number=($1=>1);  }
 

}
close(output);

open(log_file,"< log.txt ") or die;

while (<log_file>) {
my ($hit_number,$hit_special)=(0,'沒中');
my @line_number=split(/\s/);

foreach my $temp_number (@line_number) {

if (exists $lotto_number{$temp_number}){

$hit_number++;
}

if (exists $special_number{$temp_number}){

$hit_special="有中";
}



}


print '行號 ',$line_number," 中 ",$hit_number," 號碼 "," 特別號 $hit_special\n";
$line_number++;

}

close(log_file);

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[原創] 大樂透自動對獎程式
« 回覆 #1 於: 2006-05-17 11:57 »
一時手癢
#!/bin/sh
#待對獎檔,每行六個號碼,每個號碼用空白隔開,10以下數字前面不要加0
filename=biglotto.txt
#抓樂透檔
wget http://www.roclotto.com.tw/topnews/biglotto.asp -O /tmp/biglotto.html
[ $? -ne 0 ] && echo "無法連上樂透網站" && exit 1
#取得中獎號碼那一行
num_line=`grep 'lang.*、' /tmp/biglotto.html | sed -e 's/、/ /g'`
#去尾(html tag)
num_line=${num_line%<*}
#去頭(html tag)
num_line=${num_line##*>}
echo "大樂透號碼 $num_line"
#取得特別號
spect_num=`grep "lang.*FF0000\">[0-9]*<" /tmp/biglotto.html | sed -e "s/.*FF0000\">//" | sed -e "s/<.*//"`
echo "特別號 $spect_num"
#行號
i=1
while read line
do
    #檢查中幾個號碼
    hit_num=`echo "$num_line $line" | tr " " "\n" | sort -n | uniq -d | wc -l`
    #檢查特別號碼
    hit_spect=0
    echo "$line" | grep "$spect_num" 1>/dev/null
    [ $? -eq 0 ] && hit_spect=1
    #開始判斷
    if [ $hit_num -eq 6 ]; then
        echo "$i 中頭獎 $line"
    elif [ $hit_num -eq 5 ]; then
        [ $hit_spect -eq 1 ] && echo "$i 中貳獎 $line" || echo "$i 中參獎 $line"
    elif [ $hit_num -eq 4 ]; then
        [ $hit_spect -eq 1 ] && echo "$i 中肆獎 $line" || echo "$i 中伍獎 $line"
    elif [ $hit_num -eq 3 ]; then
        [ $hit_spect -eq 1 ] && echo "$i 中陸獎 $line" || echo "$i 中普獎 $line"
   fi
    i=$(($i+1))
done < $filename