1 :
名無しさん@夢いっぱい:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int GetRandom(int min,int max);
int main(void)
{
int i;
srand((unsigned int)time(NULL));
for (i = 0;i < 100;i++) {
printf("%03d\n",GetRandom(0,999));
}
return 0;
}
int GetRandom(int min,int max)
{
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}
これを実行するとナンバーズ3100回試行
ロト6はむずい・・・
言語の問題なのか?
3 :
名無しさん@夢いっぱい:2006/09/18(月) 02:20:51 ID:7H0s5HK4
明日仕事だから寝る!
stdlib.hのrand()は、つかいもんにならない
5 :
名無しさん@夢いっぱい:2006/09/18(月) 02:27:40 ID:e8VRFwBo
#include <chinpo.h>
6 :
名無しさん@夢いっぱい:2006/09/18(月) 11:36:45 ID:N6sdA750
ここ石豆の気配がするな。
8 :
名無し:2006/09/19(火) 09:40:01 ID:GJuEXCln
このスレはC言語を指定してるので安心だ
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/mt19937ar.html メルセンヌ・ツイスタ
gzipped tar-file of these files: mt19937ar.sep.tgz .
↑
この圧縮ファイルをダウンロードする。
WindowsパソコンにCygwinをインストールした状態でtar(xzfオプション)により展開した。
$ tar xzf mt19937ar.sep.tgz
$ ls -l mt*
-rw------- 1 UserName なし 5996 Apr 26 2005 mt19937ar.c
-rw------- 1 UserName なし 2928 Apr 26 2005 mt19937ar.h
-rw------- 1 UserName なし 22465 Mar 2 2004 mt19937ar.out
-rwxr-xr-x 1 UserName なし 15433 Sep 19 23:38 mt19937ar.sep.tgz
-rw------- 1 UserName なし 2539 Apr 26 2005 mtTest.c
>>9 スレッドが立てられた日付はこちらの方が後であり、
>>8のスレッドでも問題なく話ができることを考えると
削除ガイドライン
ttp://info.2ch.net/guide/adv.html の要件は満たしていると言える。
ただ現在の宝くじ板は過疎であり、スレッド保持上限値にかなり余裕があり
多少の重複スレや駄スレが立っても、そのせいで有用なスレッドがはじきだされる
心配はなく、少数の潔癖症の方々が気分を悪くするだけで大した問題ではない
と思われる。
>>11を言い直してみる。
このスレッドが扱う話題は
>>8のスレッドの話題の範囲に完全に含まれる。
そして
>>8のスレッドはこのスレッドが建つ前からあり、
建った時点において
>>8のスレッドが他の言語によるプログラムの
話題に占有されていたという事態は見受けられない。つまり新たにスレッドを建てる
までもなく、ここでの話は
>>8のスレッドですることができた。
>>1は建てる必要のないスレッドを建ててしまった。
しかし宝くじ板のスレッド数上限800にはまだ余裕があり、今回は大目に見てもいいだろう。
夢ロトくんは攪拌してからボールの列を形成して6個摘出するが、
以下のプログラムでは攪拌しないで列からメルセンヌ・ツイスタにより6個摘出する。
(予想ではなく6個でたらめに摘出する。)
main()
1.43個のボールをノードとする線形リストを形成する。
2.6個のボールを摘出する。
3.工程1および工程2を反復する。
pLine()
1.何番目のボールを摘出するか、ノードの番号iNを決定する。
2.iN番目のボールの値(文字列)を配列に記憶する。
3.iN番目のボールを破棄して線形リストを短縮する。
4.工程1、工程2、工程3を反復する。
5.配列をソートする。
6.表示を開始する行以降である場合、配列の要素からなる1行を出力する。
【使用法】引き数の個数が4個ではない場合、使用例を表示する。
mtNtoR 43 6 1001 1020
ロト6のボールの総数:43
摘出するボールの個数:6
表示を開始する行番号:1001
反復する回数:1020
この使用例では20行表示される。メルセンヌ・ツイスタの設定を変更するにはmtNtoR.cにおいて
/* メルセンヌ・ツイスタの設定 */
unsigned long init[4] = {0x123, 0x234, 0x345, 0x456}, length = 4;
を変更してコンパイルする。
/* 【ファイル名】mtNtoR.h
bcc32 -emtNtoR mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c
gcc -o mtntor mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c
*/
#define USAGE "mtNtoR 43 6 1001 1020\n"
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#define WEIGHT 14.09
#define SKIP 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "mt19937ar.h"
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
int iCompare(const void *p, const void *p2) {
return strcmp((char *)p, (char *)p2);
}
extern sBall *pNew(char *, double);
extern sBall *pAdd(sBall *, sBall *);
extern void FreeAll(sBall *);
extern sBall *pLine(sBall *, int, int, int);
/* 【ファイル名】mtNtoR.c */
#include "mtNtoR.h"
int main(int argc, char *argv[]) {
sBall *pMin;
sBall *p;
char cBall[BALL_COUNT][DIGITS];
int i, iCount, iE, iRepeat, iLine, iShow, iSkip;
char *pStop;
char *pBall;
/* メルセンヌ・ツイスタの設定 */
unsigned long init[4] = {0x123, 0x234, 0x345, 0x456}, length = 4;
/* 入力 */
switch(argc) {
case 5:
iCount = (int)strtol(argv[1], &pStop, 0);/* ボールの総数 */
if(iCount > BALL_COUNT) {
fprintf(stderr, "main(): iCount > BALL_COUNT\n");
exit(EXIT_FAILURE);
}
iE = (int)strtol(argv[2], &pStop, 0);/* 摘出する個数 */
iShow = (int)strtol(argv[3], &pStop, 0);/* 表示を開始する行 */
iRepeat = (int)strtol(argv[4], &pStop, 0);/* 反復する回数 */
break;
default:
fprintf(stderr, USAGE);
exit(EXIT_FAILURE);
}
/* 設定 */
for(i=0; i<iCount; ) {
pBall = &cBall[i][0];
sprintf(pBall, "%02d", ++i);/* cBall[0] = "01", cBall[42] = "43" */
}/* ボールの数値(最小値は1であり最大値はiCountである)を文字列として記憶した */
init_by_array(init, length);/* メルセンヌ・ツイスタの初期化 */
/* 反復(注1) */
iSkip = SKIP;/* 表示しない */
for(iLine = 1; iLine <= iRepeat; iLine++) {
pMin = NULL;/* ボールが無い状態 */
for(i = iCount - 1; i >= 0; i--) {/* 最大値のボールから順に生成、連結する */
pBall = &cBall[i][0];
p = pNew(pBall, WEIGHT);/* ボールを生成した */
pMin = pAdd(pMin, p);/* ボールを連結した */
}
if(iLine >= iShow)
iSkip = 0;/* 表示する */
pMin = pLine(pMin, iCount, iE, iSkip);/* iCount個からiE個を摘出した */
FreeAll(pMin);/* 残りのボールを破棄した */
}
return EXIT_SUCCESS;
}
/* 【ファイル名】pNew.h */
#include <stdio.h>
#include <stdlib.h>
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
/* mtNtoR.hにおいて #define WEIGHT 14.09
dWeight = WEIGHT
このバージョンではdWeightを活用していない */
/* 【ファイル名】pNew.c */
#include "pNew.h"
sBall *pNew(char *pBall, double dWeight) {
sBall *p;
p = (sBall *)malloc(sizeof(sBall));
if(p == NULL) {
fprintf(stderr, "pNew(): p == NULL\n");
exit(EXIT_FAILURE);
}
p->pBall = pBall;/* 文字列としてボールの値を記憶した */
p->dWeight = dWeight;
p->pNext = NULL;/* pAdd()によってpNextを決定する */
return p;
}
sBall *pAdd(sBall *pMin, sBall *p) {
p->pNext = pMin;/* ボールを連結した */
return p;/* pMin = pAdd()とすることによってpMinを更新する */
}
void FreeAll(sBall *pMin) {
sBall *p;
/* 現在の最小値のボールから順に破棄する */
while(pMin != NULL) {
p = pMin->pNext;
free(pMin);
pMin = p;
}
}
/* 【ファイル名】pLine.h */
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#include <stdio.h>
#include <stdlib.h>
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
extern int iPick(int);
extern sBall *pShorten(sBall *p, sBall *, sBall *);
extern int iCompare(const void *, const void *);
/* 【ファイル名】pLine.c */
#include "pLine.h"
sBall *pLine(sBall *pMin, int iCount, int iE, int iSkip) {
char c[EXTRACT][DIGITS];
sBall *p;
sBall *pOld;
int i, iN, iPicked;
/* 反復(注2) */
for (iPicked = 0; iPicked < iE; iPicked++) {
iN = iPick(iCount);/* ノードの番号を決定した(1 ≦ iN ≦ iCount) */
p = pMin;/* 現在の最小値のボール */
pOld = NULL;/* 先頭のボールより前方にはボールが存在しない */
for(i = 1; i != iN; i++) {
pOld = p;
p = p->pNext;
};
sprintf(&c[iPicked][0], "%s", p->pBall);/* iN番目のボールの値(文字列)を配列に記憶した */
pMin = pShorten(pMin, pOld, p);/* iN番目のボールを破棄した */
iCount--;/* 摘出したためボールの総数が減少した */
}
if(iSkip == 0) {/* 表示する */
qsort(&c[0][0], iE, DIGITS, iCompare);/* 配列をソートした */
for(i = 0; i < iE; i++) {
printf(" %s", &c[i][0]);/* 配列の要素を出力した */
}
putchar('\n');/* 改行した */
}
return pMin;
}
/* 【ファイル名】iPick.h */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "mt19937ar.h"
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
/* 【ファイル名】iPick.c */
#include "iPick.h"
int iPick(int i) {
int iN;
double d;
if(i <= 0) {
fprintf(stderr, "iPick(): i <= 0\n");
exit(EXIT_FAILURE);
}
d = genrand_real2();/* 区間[0,1)にある値をメルセンヌ・ツイスタにより決定した */
d = d*(double)i;
iN = 1 + (int)floor(d);/* 切上げ */
return iN;/* 1 ≦ iN ≦ i */
}
sBall *pShorten(sBall *pMin, sBall *pOld, sBall *p) {
if(pOld == NULL) {/* 最小値のボールより前方にはボールが存在しない */
pMin = p->pNext;/* 直後のボールを最小値のボールにした */
} else if(p->pNext == NULL) {/* 最大値のボールより後方にはボールが存在しない */
pOld->pNext = NULL;/* 直前のボールを最大値のボールにした */
} else {
pOld->pNext = p->pNext;/* iN番目のボールを迂回した */
}
free(p);/* iN番目のボールを破棄した */
return pMin;
}
【コンパイル】エディタによって全角の空白文字(シフトJISコード8140h)をタブ文字(\tすなわち09h)または半角の空白文字に変換する必要がある。上記のファイルと一緒にmt19937ar.hおよびmt19937ar.cを用意する。
1.Windows 98のMS-DOSプロンプト、Windows 2000のコマンドプロンプトにおいて
ボーランドのコンパイラbcc32をインストールした場合
bcc32 -emtNtoR mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c
2.WindowsパソコンにCygwinをインストールした場合
gcc -o mtntor mtNtoR.c pNew.c pLine.c iPick.c mt19937ar.c
【実行例】ロト6
B:\BCC>mtntor 43 6 1001 1020
03 12 16 23 24 41
15 18 23 28 37 42
14 17 18 34 37 43
14 15 17 40 41 42
03 04 15 18 21 33
06 24 31 32 34 39
01 13 15 18 28 37
08 10 11 24 29 33
14 25 28 32 36 42
03 05 08 26 32 34
11 14 19 26 30 40
10 12 21 24 38 43
01 03 10 19 32 35
10 17 24 29 30 35
02 17 23 32 39 40
05 10 24 25 33 38
02 07 17 25 28 37
05 07 15 28 30 34
01 12 32 33 39 42
03 17 22 25 26 31
B:\BCC>
【実行例】ミニロト
D:\BCC>mtntor 31 5 1001 1020
05 11 19 23 30
06 15 21 27 30
02 04 24 26 29
03 05 18 22 26
02 08 10 22 25
01 03 12 16 20
05 08 09 13 25
05 09 16 23 26
02 03 10 20 23
02 05 08 10 28
11 14 20 26 27
03 13 14 23 29
01 10 14 24 27
04 10 14 16 22
07 10 26 28 30
02 19 26 28 31
20 23 24 26 27
17 20 21 22 27
02 06 13 15 24
04 09 22 23 27
D:\BCC>
【実行例】ナンバーズ4のシングルのボックス
ただし、0〜9ではなく01〜10を出力するため、たとえば 02 03 05 10は1249と解釈する。
D:\BCC>mtntor 10 4 1001 1020
02 03 05 10
05 07 08 09
01 04 06 08
04 07 08 09
05 07 08 09
01 07 09 10
01 02 04 05
01 02 03 04
02 05 07 08
02 06 08 10
04 06 07 08
01 02 04 07
04 06 07 10
01 02 06 10
01 02 03 05
04 07 09 10
04 05 07 09
01 02 03 08
01 03 05 10
01 06 08 10
D:\BCC>
/*
>>15 (注1)
1.iCount個のボールをノードとする線形リストを形成する
2.iE個のボールを摘出する
3.工程1および工程2を反復する */
/*
>>19 (注2)
1.何番目のボールを摘出するか、ノードの番号iNを決定する
2.iN番目のボールの値(文字列)を配列に記憶する
3.iN番目のボールを破棄して線形リストを短縮する
4.工程1、工程2、工程3を反復する
5.配列をソートする
6.配列の要素からなる1行を出力する */
27 :
名無しさん@夢いっぱい:2006/09/25(月) 00:34:22 ID:z8jHaYTJ
★ロト6 H18/09/21 第309回 01 04 26 36 41 42 (09)
1等小計 800000000 円 = 2 口 × 400000000 円
2等小計 530189000 円 = 22 口 × 24099500 円
3等小計 636204600 円 = 578 口 × 1100700 円
4等小計 561046800 円 = 32619 口 × 17200 円
5等小計 635711000 円 = 635711 口 × 1000 円
全合計 3163151400 円 キャリー 183009018 円
還元額 3346160418 円 還元率 51.0003844 %
販売額 6561049400 円 収益額 3214888982 円
◆ミニロト H18/09/05 第371回 10 12 19 23 31 (27)
1等小計 293107500 円 = 21 口 × 13957500 円
2等小計 21054600 円 = 126 口 × 167100 円
3等小計 36337500 円 = 2907 口 × 12500 円
4等小計 93791500 円 = 85265 口 × 1100 円
全合計 444291100 円 キャリー 0 円
還元額 444291100 円 還元率 44.8144425 %
販売額 991401600 円 収益額 547110500 円
■ナンバーズ4 H18/09/01 第1902回 6275
ストレート 34527500 円 = 25 口 × 1381100 円
ボックス 20182500 円 = 351 口 × 57500 円
Sストレ-ト 48193100 円 = 67 口 × 719300 円
Sボックス 54443900 円 = 1897 口 × 28700 円
全合計 157347000 円 キャリー 0 円
還元額 157347000 円 還元率 44.9538710 %
販売額 350018800 円 収益額 192671800 円
●ナンバーズ3 H18/09/01 第1902回 899
ストレート 9171900 円 = 79 口 × 116100 円
ボックス 9326700 円 = 241 口 × 38700 円
Sストレ-ト 13235400 円 = 171 口 × 77400 円
Sボックス 6407600 円 = 332 口 × 19300 円
ミニ 9372800 円 = 808 口 × 11600 円
全合計 47514400 円 キャリー 0 円
還元額 47514400 円 還元率 44.9579983 %
販売額 105686200 円 収益額 58171800 円
28 :
名無しさん@夢いっぱい:2006/09/25(月) 00:47:39 ID:z8jHaYTJ
29 :
名無しさん@夢いっぱい:2006/09/25(月) 00:52:56 ID:z8jHaYTJ
30 :
名無しさん@夢いっぱい:2006/09/25(月) 01:04:31 ID:z8jHaYTJ
31 :
名無しさん@夢いっぱい:2006/09/27(水) 05:49:58 ID:Nae49S6a
//入力ルーチン
InputData=$.split(" ");
//出力ルーチン
function TableStart(){$+="<table cellspacing=0 cellpadding=3 bgcolor=ffffff bordercolor=black border=1><tbody align=right >";}
function TableText($X,$Y){$+="<tr><td width=50><font size=4><b>"+$X+"</td><td width=250 ><font size=4><b>"+$Y+"</td></tr>";}
function TableEnd(){$+="</table>";} $="";
//表作成ルーチン
TableStart();for ( X=0 ; 1000>=X ; X++ ) { TableText ( X , InputData[ X ].substr( 0 , 20 ) ) ; } TableEnd();
32 :
名無しさん@夢いっぱい:2006/09/27(水) 21:40:56 ID:xtBFJyTf
k
310回結果 03 04 05 18 28 37 (26)
【実行例】ロト6
D:\bcc>mtntor 43 6 125530 125530
03 04 05 18 22 37
D:\bcc>
5個一致('A`)
311回 01 16 22 36 37 42 (34)
D:\bcc>mtntor 43 6 29954 29954
01 04 16 36 37 42
D:\bcc>
35 :
名無しさん@夢いっぱい:2006/10/06(金) 00:48:22 ID:jD0Bghnk
えっ?2等?
36 :
名無しさん@夢いっぱい:2006/10/06(金) 19:04:25 ID:hjMcbuZj
312回結果 02 17 22 29 38 42 (16)
$ mtntor 43 6 14066 14066
17 22 28 29 38 42
('A`)
38 :
名無しさん@夢いっぱい:2006/10/13(金) 01:53:19 ID:E+fDH+dI
結果前にださないの?
20万行(四千万円)までで1等も2等もでていない。3等なら7とおりでた。
第312回 5個一致で3等
17 22 28 29 38 42
01 02 22 29 38 42
02 05 17 29 38 42
01 02 17 22 29 42
02 17 22 38 41 42
02 22 29 38 39 42
02 17 22 29 30 42
>>38 結果前だと
ピンポイントで14066桁目や29954桁目が3等と一致する
なんて解らないだろ。所詮は結果論。
41 :
名無しさん@夢いっぱい:2006/10/13(金) 19:17:36 ID:E+fDH+dI
>>40 確かにわからない…。
だいたいが使い方さえ理解できてないし。
でこれってもう完成したの?
42 :
名無しさん@夢いっぱい:2006/10/13(金) 19:24:20 ID:JPUT5hMD
何故に今更、構造化言語? オブジェクト指向でいこうよ
ではスレを建てるといい。
やだ、94.28%の確立で五等が当たるプログラムが完成していますので晒さないと
スレ立てた意味が無くなるから。
46 :
名無しさん@夢いっぱい:2006/10/18(水) 00:28:31 ID:JkIHbhGs
確率を確立と書く確率94.28%!
♪強そうに 生きてゆ〜くよりも〜
49 :
名無しさん@夢いっぱい:2006/10/30(月) 00:36:07 ID:QSE085ma
loto6 100口、ダブりあり、gawk
BEGIN{
srand()
for(j=0;j<100;j++){
for(i=0;i<43;i++)
a[i]=0
for(i=0;i<6;i++){
do {
x = int(rand()*43)
} while( a[x] == 1 )
a[x]=1
}
for(i=0;i<43;i++)
if( a[i]==1 )
printf "%02d ", i+1
print ""
}
}
予想なんて不可能なんだから、適当に乱数でいいよ
main() {
if( money > 50000 ) {
}
適当な乱数ならQPと同じじゃないか?
>>51 クイックピックが乱数であるとは、どこにもかかれていない
315回 01 02 17 24 40 41 (31)
I:\bcc>mtntor 43 6 2508 2508
01 02 17 24 41 43
I:\bcc>
二十万口(四千万円)で3等が6口でた
01 02 17 24 41 43
01 02 06 17 24 40
01 02 06 24 40 41
01 17 24 33 40 41
01 02 20 24 40 41
01 02 03 17 40 41
#include <stdio.h> /*
>>49 メルセンヌ・ツイスタ版 */
#include <stdlib.h> /* 【ファイル名】loto6.c */
#include <time.h> /* 【コンパイル】bcc32 loto6.c mt19937ar.c */
#include <math.h> /* gcc -o loto6 loto6.c mt19937ar.c */
#include "mt19937ar.h"
int main(void) {
int a[43];
int j, i, x;
/* メルセンヌ・ツイスタの設定 */
unsigned long init[4] = {0x123, 0x234, 0x345, 0x456}, length = 4;
init[0] = (unsigned long)time(NULL);
init_by_array(init, length);/* メルセンヌ・ツイスタの初期化 */
for(j = 0; j < 100; j++){
for(i = 0; i < 43; i++)
a[i] = 0;/* 印が無い */
/* 6個の印をつける */
for(i = 0; i < 6; i++){
do { /* 区間[0,43)にある値をメルセンヌ・ツイスタにより決定する */
x = (int)floor(genrand_real2()*43.);/* xは整数(0 ≦ x ≦ 42) */
} while( a[x] == 1 );/* すでに印があるため、やりなおす */
a[x] = 1;/* 印が無ければ印をつける */
}
for(i = 0; i < 43; i++) /* 出力は昇順になる */
if( a[i] == 1 ) /* a[0]は01、a[1]は02、a[42]は43に対応している */
printf("%02d ", i + 1);
printf("\n");/* 改行した */
}
return EXIT_SUCCESS;
}
【実行例】出力をリダイレクトするには
D:\bcc>loto6 > loto6.txt
D:\bcc>
loto6.txtのファイルをエディタでみる
>>49さん、おもしろいアルゴリズムをおしえてくださってありがとうございます
夢ロトくんは攪拌してからボールの列を形成して6個摘出するが、
以下のプログラム(mtNtoR Version 1.2)では攪拌しないで
列からメルセンヌ・ツイスタにより6個摘出する。
設定ファイルにしたがってボールに重みを付与できる。
重みを均等にすれば旧バージョン
>>14-21と同一の出力になる。
main()
1.設定ファイルからパラメータを取得する(pFile,iCount,iE,iShow,iRepeat,cBall[][],dWeight[])
2.必要に応じてログファイルを追加モードでオープンする(pFile)
3.iCount個のボールをノードとするリストを形成する(数字はcBall[][]、重みはdWeight[])
4.iE個のボールを摘出して、表示開始行以降ならば表示する(iShow)
5.残りのボールを破棄する。
6.工程3、工程4、工程5を反復する(iRepeat)
pLine()
1.iE個のボールを摘出して、配列にボールの数字を記憶する。
2.表示開始行以降ならば配列をソートする。
3.ソートされた配列要素からなる出力文字列を生成する。
4.1行表示する。
5.必要に応じてログファイルに追加する。
pPick()
1.ボールの重みの総和dを計算する。
2.区間[0,d)にある値をメルセンヌ・ツイスタにより決定する(dPick < d)
3.再びボールの重みを加算していきdPickを超えたときボールを決定する(p)
4.pのボールの数字を配列に記憶する。
5.pのボールを破棄してリストを短縮する。
ボールが重いほど出現しやすい。
#【ファイル名】mtNtoR.ini
0x123, 0x234, 0x345, 0x456, 4 # メルセンヌ・ツイスタの設定
Xto6 # 摘出するボールの個数は6
Log mtNtoR.txt # ログファイルを指定できるが必須ではない
From 1001 # 表示を開始する行番号
Repeat 1020 # 反復する回数
01 14.09
02 14.09
03 14.09
04 14.09
05 14.09
06 14.09
07 14.09
08 14.09
09 14.09
10 14.09
11 14.09
12 14.09
13 14.09
14 14.09
15 14.09
16 14.09
17 14.09
18 14.09
19 14.09
20 14.09
21 14.09
22 14.09
23 14.09
24 14.09
25 14.09
26 14.09
27 14.09
28 14.09
29 14.09
30 14.09
31 14.09
32 14.09
33 14.09
34 14.09
35 14.09
36 14.09
37 14.09
38 14.09
39 14.09
40 14.09
41 14.09
42 14.09
43 14.09
/* 【ファイル名】mtNtoR.h
2006-11-13 Version 1.2
【コンパイル】bcc32 -emtNtoR mtNtoR.c pPick.c pLine.c pSetting.c pNew.c pShorten.c mt19937ar.c
gcc -o mtntor mtNtoR.c pPick.c pLine.c pSetting.c pNew.c pShorten.c mt19937ar.c
*/
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#define SKIP 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
int iCompare(const void *p, const void *p2) {
return strcmp((char *)p, (char *)p2);
}
extern FILE *pSetting(int, char *, int *, int *, int *, int *, char *, double *);
extern sBall *pNew(char *, double);
extern sBall *pAdd(sBall *, sBall *);
extern sBall *pLine(sBall *, int, int, int, FILE *);
extern void FreeAll(sBall *);
/* 【ファイル名】mtNtoR.c */
#include "mtNtoR.h"
int main(int argc, char *argv[]) {
double dWeight[BALL_COUNT];
char cBall[BALL_COUNT][DIGITS];
FILE *pFile;
sBall *pMin;
sBall *p;
int i, iCount, iE, iShow, iRepeat, iSkip, iLine;
/* 設定 */
pFile = pSetting(argc, argv[1], &iCount, &iE, &iShow, &iRepeat, &cBall[0][0], &dWeight[0]);
/* 反復(リストを形成、ボールを摘出、ボールを破棄) */
iSkip = SKIP;/* 表示しない */
for(iLine = 1; iLine <= iRepeat; iLine++) {
pMin = NULL;/* ボールが無い状態 */
for(i = iCount - 1; i >= 0; i--) {/* 末尾のボールから順に生成、連結する */
p = pNew(&cBall[i][0], dWeight[i]);/* ボールを生成した */
pMin = pAdd(pMin, p);/* ボールを連結した */
}
if(iLine >= iShow)
iSkip = 0;/* 表示する */
pMin = pLine(pMin, iCount, iE, iSkip, pFile);/* iCount個からiE個を摘出した */
FreeAll(pMin);/* 残りのボールを破棄した */
}
if(pFile != NULL)
fclose(pFile);
return EXIT_SUCCESS;
}
/* 【ファイル名】pPick.h */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "mt19937ar.h"
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
extern sBall *pShorten(sBall *, sBall *, sBall *);
#include "pPick.h" /* 【ファイル名】pPick.c */
sBall *pPick(sBall *pMin, int iCount, char *pPicked) {
double d, dPick;
sBall *p;
sBall *pOld;
if(iCount <= 0) {
fprintf(stderr, "pPick(): iCount <= 0\n");
exit(EXIT_FAILURE);
}
d = 0.;
p = pMin;/* 現在の先頭のボール */
do {/* dWeightを加算していき、dWeightの総和を計算する */
d = d + p->dWeight;
p = p->pNext;
} while(p != NULL);
dPick = d * genrand_real2();/* 区間[0,d)にある値をメルセンヌ・ツイスタにより決定した */
d = 0.;
p = pMin;/* 現在の先頭のボール */
pOld = NULL;/* 先頭のボールより前方にはボールが存在しない */
for(;;) {/* 再度、dWeightを加算していく */
d = d + p->dWeight;
if(d > dPick)
break;/* メルセンヌ・ツイスタによる値を超えたためボールを決定した(pを摘出) */
pOld = p;
p = p->pNext;
}
strcpy(pPicked, p->pBall);/* pのボールの値(文字列)を配列に記憶した */
return pShorten(pMin, pOld, p);/* pのボールを破棄した */
}
/* 【ファイル名】pLine.h */
#define OUTPUT 130
#define EXTRACT 43/* EXTRACT ≦ BALL_COUNT */
#define BALL_COUNT 43
#define DIGITS 3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
extern sBall *pPick(sBall *, int, char *);
extern int iCompare(const void *, const void *);
/* 【ファイル名】pLine.c */
#include "pLine.h"
sBall *pLine(sBall *pMin, int iCount, int iE, int iSkip, FILE *pFile) {
char *pC;
char cOut[OUTPUT];
char c[EXTRACT][DIGITS];
int i;
/* 反復(注2) */
for (i = 0; i < iE; i++) {
pMin = pPick(pMin, iCount, &c[i][0]);
iCount--;/* 摘出したためボールの総数が減少した */
}
if(iSkip == 0) {
/* 表示する */
qsort(&c[0][0], iE, DIGITS, iCompare);/* 配列をソートした */
cOut[0]='\0';/* 出力文字列の長さを零にした */
pC=&cOut[0];
for(i = 0; i < iE; i++) {
strcat(pC, " ");
strcat(pC, &c[i][0]);/* 出力文字列に配列要素の文字列を追加した */
}
strcat(pC, "\n");/* 出力文字列に改行文字を追加した */
fputs(pC, stdout);/* 1行表示した */
if(pFile != NULL)
fputs(pC, pFile);/* ログファイルに1行追加した */
}
return pMin;
}
/* 【ファイル名】pSetting.h */
#define USAGE "mtNtoR mtNtoR.ini\n"
#define LOG "Log"
#define REPEAT "Repeat"
#define FROM "From"
#define XTO "Xto" /* Xto6 */
#define SETTING 80
#define FILE_NAME 80
#define LINES 70
#define BALL_COUNT 43
#define DIGITS 3
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "mt19937ar.h"
#include "pSetting.h" /* 【ファイル名】pSetting.c */
FILE *pSetting(int iArg, char *pArg, int *pCount, int *pE, int *pShow, int *pRepeat, char *pBall, double *pWeight) {
char cFile[FILE_NAME], c[SETTING];
char *pC;
char *pStop;
FILE *pFile;
int i, iLine, iS;
unsigned long length, init[4];
switch(iArg) {
case 2:
pFile = fopen(pArg, "rt");/* 設定ファイルをオープンした */
if(pFile == NULL) {
fprintf(stderr, "pSetting(): pFile == NULL (%s)\n", pArg);
exit(EXIT_FAILURE);
}
break;
default:
fprintf(stderr, USAGE);
exit(EXIT_FAILURE);
}
cFile[0]='\0';
*pE = 0;
*pShow = 1;
*pRepeat = 0;
i = 0;
for(iLine = 0; iLine < LINES; iLine++) {
pC = fgets(c, SETTING, pFile);
if(pC == NULL)
break;
pC = strchr(c, '\n');
if(pC == NULL) {
fprintf(stderr, "pSetting(): pC == NULL\n");/* 改行文字が無かった */
exit(EXIT_FAILURE);
}
*pC = '\0';/* 改行文字を削除した */
pC = strchr(c, '#');
if(pC != NULL)
*pC = '\0';/* コメントを削除した */
/* メルセンヌ・ツイスタの設定 */
pC = strstr(c, "0x");
if(pC != NULL) {
iS = sscanf(c, "%lx, %lx, %lx, %lx, %ld", &init[0], &init[1], &init[2], &init[3], &length);
if(iS != 5) {
fprintf(stderr, "pSetting(): iS != 5\n");
exit(EXIT_FAILURE);
}
init_by_array(init, length);/* メルセンヌ・ツイスタの初期化 */
continue;
}
pC = strstr(c, XTO);/* つづく */
if(pC != NULL) {/*
>>66のつづき */
pC = pC + strlen(XTO);
*pE = (int)strtol(pC, &pStop, 0);/* 摘出する個数 */
continue;
}
pC = strstr(c, LOG);
if(pC != NULL) {
pC = pC + strlen(LOG);
sscanf(pC, " %s", &cFile[0]);
continue;
}
pC = strstr(c, FROM);
if(pC != NULL) {
pC = pC + strlen(FROM);
*pShow = (int)strtol(pC, &pStop, 0);/* 表示を開始する行 */
continue;
}
pC = strstr(c, REPEAT);
if(pC != NULL) {
pC = pC + strlen(REPEAT);
*pRepeat = (int)strtol(pC, &pStop, 0);/* 反復する回数 */
continue;
}
if(i >= BALL_COUNT)
continue;
/* ボールの数字(文字列)を配列に記憶する */
pC = &c[0];
iS = sscanf(pC, "%s %lf", pBall, pWeight);
if(iS == 2) {
i++;
pWeight++;
pBall = pBall + DIGITS;
continue;
} else if(iS == EOF) {
continue;
} else {
fprintf(stderr, "pSetting(): iS != 2(%s)\n", pC);
exit(EXIT_FAILURE);
}
}
*pCount = i;
fclose(pFile);/* 設定ファイルをクローズした */
if(cFile[0]=='\0') {
pFile = NULL;/* ログファイルをオープンしない */
} else {
pFile = fopen(cFile, "at");/* ログファイルをオープンした */
if(pFile == NULL) {
fprintf(stderr, "pSetting(): pFile == NULL(%s)\n", &cFile[0]);
exit(EXIT_FAILURE);
}
}
if(*pRepeat == 0) {
fprintf(stderr, "pSetting(): *pRepeat == 0\n");
exit(EXIT_FAILURE);
}
return pFile;
}
/* 【ファイル名】pNew.h */
#include <stdio.h>
#include <stdlib.h>
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
#include "pNew.h" /* 【ファイル名】pNew.c */
sBall *pNew(char *pBall, double dWeight) {
sBall *p;
p = (sBall *)malloc(sizeof(sBall));
if(p == NULL) {
fprintf(stderr, "pNew(): p == NULL\n");
exit(EXIT_FAILURE);
}
p->pBall = pBall;/* ボールの数字を示す文字列のアドレスを記憶した */
p->dWeight = dWeight;
p->pNext = NULL;/* pAdd()によってpNextを決定する */
return p;
}
sBall *pAdd(sBall *pMin, sBall *p) {
p->pNext = pMin;/* ボールを連結した */
return p;/* pMin = pAdd()とすることによってpMinを更新する */
}
void FreeAll(sBall *pMin) {
sBall *p;
/* 現在の先頭のボールから順に破棄する */
while(pMin != NULL) {
p = pMin->pNext;
free(pMin);
pMin = p;
}
}
/* 【ファイル名】pShorten.h */
#include <stdlib.h>
typedef struct sBall sBall;
struct sBall {
char *pBall;
double dWeight;
sBall *pNext;
};
/* 【ファイル名】pShorten.c */
#include "pShorten.h"
sBall *pShorten(sBall *pMin, sBall *pOld, sBall *p) {
if(pOld == NULL) {/* 先頭のボールより前方にはボールが存在しない */
pMin = p->pNext;/* 直後のボールを先頭のボールにした */
} else if(p->pNext == NULL) {/* 末尾のボールより後方にはボールが存在しない */
pOld->pNext = NULL;/* 直前のボールを末尾のボールにした */
} else {
pOld->pNext = p->pNext;/* 摘出したボールを迂回した */
}
free(p);/* 摘出したボールを破棄した */
return pMin;
}
#【ファイル名】parabola.txt
# y = -20/225 (x - 5)(x - 35)
0x123, 0x234, 0x345, 0x456, 4
Xto6
Log mtNtoR.txt
From 1
Repeat 200000
05 0.000000
06 2.577778
07 4.977778
08 7.200000
09 9.244444
10 11.111111
11 12.800000
12 14.311111
13 15.644444
14 16.800000
15 17.777778
16 18.577778
17 19.200000
18 19.644444
19 19.911111
20 20.000000
21 19.911111
22 19.644444
23 19.200000
24 18.577778
25 17.777778
26 16.800000
27 15.644444
28 14.311111
29 12.800000
30 11.111111
31 9.244444
32 7.200000
33 4.977778
34 2.577778
35 0.000000
>>73の設定ファイルで実験した。大幅に重みが相違しており、削除数字もある。
二十万行の結果として、出現数は以下のとおりであった。
06: 8572 21: 58441
07: 16174 22: 57340
08: 23038 23: 55904
09: 29142 24: 54593
10: 34759 25: 52570
11: 39590 26: 50402
12: 43686 27: 46903
13: 46965 28: 43373
14: 50168 29: 39278
15: 52646 30: 34625
16: 54500 31: 29301
17: 56045 32: 23012
18: 57638 33: 16206
19: 57880 34: 8521
20: 58728
【実行例】設定ファイルを指定する
D:\bcc>mtntor parabola.txt > pa200000.txt
D:\bcc>
pa200000.txtは二十万行ある。ログファイル(mtNtoR.txt)は二十万行以上ある。
77 :
64:2006/11/13(月) 11:59:54 ID:fma5AE7U
>>64 「反復(注2)」については、
>>57のpLine()およびpPick()を参照してください
>>58の設定ファイルで
From 67356 # 表示を開始する行番号
Repeat 67356 # 反復する回数
に変更すれば
D:\bcc>mtntor mtntor.ini
07 15 30 35 36 40
D:\bcc>
2等だ!
>>58の設定ファイル(mtNtoR.ini)において
From 40 # 表示を開始する行番号
Repeat 40 # 反復する回数
に変更すれば
D:\bcc>mtntor mtntor.ini
01 05 25 27 39 41
D:\bcc>
3等
80 :
75:2006/12/09(土) 00:48:31 ID:VPGk+gDZ
332回 07 08 16 24 26 34 (19)
>>58 の設定ファイルを変更して
From 39426 # 表示を開始する行番号
Repeat 39426 # 反復する回数
にすると
D:\bcc>mtntor mtntor.ini
07 08 19 24 26 34
2等だ!
83 :
名無しさん@夢いっぱい:2007/04/01(日) 12:51:52 ID:9RST2uO+
誰か、
>>58 の設定ファイルを変更して
337回 の番号出してけれ!!
85 :
名無しさん@夢いっぱい:2007/04/02(月) 13:09:27 ID:Kpir5bbx
実際当たったヤツおる
86 :
名無しさん@夢いっぱい:2007/04/02(月) 13:40:18 ID:0nXigcqQ
どうせ当たらないソフトだろ?自信がないから晒せないんだろw
完璧にはずれるソフトがあれば、
それはそれで十分すぎるほど
使えるんだがなぁ…。
88 :
名無しさん@夢いっぱい:2007/04/03(火) 17:19:28 ID:8iWcfoHe
私には難しすぎるぉ。もっと簡単にわかりやすくしてよ〜
C++で分析用に作って徐々に分析方法を増やしているんだけど
よく考えたら大した処理が無いからVBでよかったような気がする・・・/(^o^)\
90 :
名無しさん@夢いっぱい:2007/04/09(月) 08:58:12 ID:J4G0JoxL
ロト6の予想数字誰か晒して下さいよ〜
01,02,03,04,05,06,07,08,09,10
11,12,13,14,15,16,17,18,19,20
21,22,23,24,25,26,27,28,29,30
31,32,33,34,35,36,37,38,39,40
41,42,43
92 :
名無しさん@夢いっぱい:2007/04/19(木) 17:40:42 ID:nw7MGTli
Excelの乱数でいいよ
りんごの皮を剥くのに日本刀を振るうみたいな話。
341回 04 14 23 25 28 35 (41)
>>58 の設定ファイルを変更して
From 108359 # 表示を開始する行番号
Repeat 108359 # 反復する回数
にすると
D:\bcc>mtntor mtntor.ini
04 14 23 28 35 41
2等だ!
>>78(11月16日)
>>81(3月1日) 以来、三回目
95 :
名無しさん@夢いっぱい:2007/06/02(土) 12:31:09 ID:XDImr8C2
96 :
名無しさん@夢いっぱい:2007/06/02(土) 16:18:16 ID:6vFyLfMC
ロト6なんか当たるわけないだろバカ
いつまで夢見てんだカス
2007年6月7日 第346回結果 04 09 11 12 32 38 (16)
>>58の設定ファイルで
From 21588 # 表示を開始する行番号
Repeat 21588 # 反復する回数
に変更すると
D:\bcc>mtntor mtntor.ini
04 09 11 16 32 38
D:\bcc>
2等だ! 四回目
#include <GrWin.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100
int xrand(int, int); /* 特定範囲の乱数発生関数 */
int main(void)
{
int width = 640, height = 400;
int n;
float x1, x2, y1, y2;
GWopen(0);
GWsize(-5, &width, &height);
GWsize(-3, NULL, NULL);
GWvport(0.0, 0.0, (float)width / (float)height, 1.0);
GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0);
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
GWclear(-1);
srand(time(NULL));
for(n = 0; n < MAX; ++n){
x1 = (float)xrand(0, width - 1);
x2 = (float)xrand(0, width - 1);
y1 = (float)xrand(0, height - 1);
y2 = (float)xrand(0, height - 1);
GWline(x1, y1, x2, y2);
}
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
GWquit();
return 0;
}
int xrand(int lower, int upper)
{
return (upper - lower + 1) * (float)rand() / 32768.0 + lower;
}
第362回結果 07 10 15 20 37 40 (28)
>>58の設定ファイルで
From 66973 # 表示を開始する行番号
Repeat 66973 # 反復する回数
に変更すると
D:\bcc>mtntor mtntor.ini
07 10 15 20 28 40
D:\bcc>
2等だ!
100 :
名無しさん@夢いっぱい:2007/09/28(金) 04:54:37 ID:eJRHDz8A
確率微分方程式でなんとかならないか?
371回 14 15 23 24 32 34 (31)
>>58の設定ファイル(mtntor.ini)のFromおよびRepeatの行
を以下のとおりに変更すると…
From 51120 # 表示を開始する行番号
Repeat 51120 # 反復する回数
D:\bcc>mtntor mtntor.ini
14 23 24 31 32 34
D:\bcc>
2等だ!
w
380回結果 17 22 25 26 27 43 (16)
>>58 From 165770
Repeat 165770
に変更したら
D:\bcc>mtntor mtntor.ini
16 17 22 25 27 43
2等だ!
380回結果によると
>>73のparabola.txt(重みを付与した設定)は
From 51620
Repeat 51620
に変更すれば
D:\bcc>mtntor parabola.txt
16 17 22 25 26 27
(二等)
105 :
名無しさん@夢いっぱい:2008/02/10(日) 14:19:38 ID:QwaAEYf8
ミッドナイトシャッフル
しゃーねーな。俺がとっておきのプログラム公開したる。
#include <stdio.h>
int main()
{
printf(" Hello World!\n");
printf(" 01 02 03 04 05 06\n");
}
cってこんなんだったっけ?
107 :
I:2008/02/27(水) 02:18:47 ID:8QLcWdsN
市販ソフトを超えるソフトを創りました。
1000〜610万回の組合せ作成ができます。
Cの場合は1000〜610万回を処理するPRGはどのようになるのですか?
108 :
名無しさん@夢いっぱい:2008/02/29(金) 05:11:20 ID:Hr1uTe6b
http://numbers-3.net/2008/ (ナンバーズ3完全攻略!なるモノ)
ここ、非常に悪質ですよ。130点(総額26,000円)買いが当たり前。
5日連続不当選のときもざらで、1週間で15万くらい吹っ飛びますよ。
私はこのソフトに騙されて20万円以上失いました。
考えてみればわかることですが、2週間で当選って・・かなりの逃げ道ですよ。
つまりは最後は大赤字確定なんです。気をつけましょう
信じる方が・・・・・・・(へ._(へ.
385回結果 06 31 34 35 37 40 (07)
From 76221
Repeat 76221
設定ファイル(
>>58)を上記のとおりに変更したら
D:\bcc>mtntor mtntor.ini
06 07 34 35 37 40
2等だ!
────────────────
From 151249
Repeat 151249
設定ファイル(
>>58)を上記のとおりに変更したら
D:\bcc>mtntor mtntor.ini
06 07 31 34 37 40
2等だ!
予想する前提条件は何でしょうか?。
前回でた数字を元にしているのか、それとも全然でていない数字を元にしているのか?
でた回数が多い数字を元にしているのか?。おせーて
____
/ \ 自分は会社経営だから、この日をまちこがれてた。
/ ─ ─\ いよいよ動く。
/ (●) (●) \
| (__人__) | ________
\ ` ⌒´ ,/ .| | |
ノ \ | | |
/´ | | |
| l | | |
ヽ -一ー_~、⌒)^),-、 | |_________|
ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | |
____
/ \ 自分は会社経営だから、この日をまちこがれてた。
/ ─ ─\ いよいよ動く。
/ (●) (●) \
| (__人__) | ________
\ ` ⌒´ ,/ .| | |
ノ \ | | |
/´ | | |
| l | | |
ヽ -一ー_~、⌒)^),-、 | |_________|
ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | |
#include <stdio.h>
#include <stdlib.h>
#define P 1000
#define Q 43
void set0(char *a){
int i;
i=0;
while(i<Q){
*(a+i)=0; i++; }
}
void main(int argc,char *argv[]){
if(argc==3){
char buf[40],*mem,*p1;
int i,j,max,n1,n2,n3,n4,n5,n6;
long cnt[P];
FILE *fp;
mem=malloc(P*Q); p1=mem;
fp=fopen(argv[1],"r");
while(fgets(buf,39,fp)!=NULL){
set0(p1); i=9;
while(i<27){
j=10*(buf[i]-48)+buf[i+1]-49; *(p1+j)=1; i+=3; }
p1+=Q; }
*p1=-1; fclose(fp);
i=0;
while(i<P){
cnt[i]=0; i++; }
n1=0; max=0;
while(n1<Q-5){
n2=n1+1;
while(n2<Q-4){
n3=n2+1;
while(n3<Q-3){
n4=n3+1;
while(n4<Q-2){
n5=n4+1;
while(n5<Q-1){
n6=n5+1;
while(n6<Q){
if(n2+n3+n4+n5+n6-5*n1==15)
printf("先頭%02dの組合せの検索中...\r",n1+1);
p1=mem; j=0;
while(*p1!=-1){
i=0;
if(*(p1+n1)) i++; if(*(p1+n2)) i++; if(*(p1+n3)) i++;
if(*(p1+n6)) i++; if(*(p1+n5)) i++; if(*(p1+n4)) i++;
if(i>2) j++; p1+=Q; }
if(max<j) max=j;
cnt[j]++; n6++; } n5++; } n4++; } n3++; } n2++; } n1++; }
i=0; fp=fopen(argv[2],"w");
while(i<=max){
fprintf(fp,"%4d:%7ld\n",i,cnt[i]); i++; }
fclose(fp); free(mem); printf("\n");
}
else printf("l004.c\n");
}
389回結果 06 12 22 25 31 35 (28)
>>58の設定ファイルで
From 69282
Repeat 69282
に変更したら
D:\bcc>mtntor mtntor.ini
06 22 25 28 31 35
2等だ!
2006年秋以来、はじめて1等がでた! ながかったーっ!
>>58の設定ファイルで
From 1
Repeat 200000
に変更したら…
32104口目 10 18 30 31 32 37 3等
43422口目 10 18 21 30 31 37 3等
65770口目 10 15 18 31 37 41 3等
94639口目 10 15 30 31 37 39 3等
112881口目 10 15 18 30 31 37 1等!
このスレで「2等だ!」を検索したら10回あった。
2等だ!
2等だ!
2等だ!
2等だ! 四回目
2等だ!
2等だ!
2等だ!
2等だ!
2等だ!
2等だ!
第392回
抽せん日 2008年5月1日
本数字 10 15 18 30 31 37
ボーナス数字 11
1等 6 口 56,764,100 円
2等 38 口 8,066,400 円
3等 920 口 399,800 円
4等 39,058 口 8,300 円
5等 575,670 口 1,000 円
販売実績額 4,255,729,400 円
∧∧ ♪
(´・∞・ ∩))
(((⌒つ ノ
,ノ ⌒i ♪
(_ノ⌒(_)゙,,
♪ ∧∧
((∩ ・∞・`)
ヽ ⊂⌒)
♪ i⌒ ヽ
,,゙(_)⌒ヽ,__)
第393回結果 07 18 27 37 38 43 (35)
>>58の設定ファイルで
From 28154
Repeat 28154
に変更したら…
D:\bcc>mtntor mtntor.ini
07 18 27 35 37 43
2等だ!
∧∧
(´>∞<`)∩ あいやーいたたた・・・orz
(つ 丿
<__ ノ
レ
| | |
123 :
名無しさん@夢いっぱい:2008/05/28(水) 11:14:16 ID:Ktb1hU+n
9]]
第396回結果 09 12 21 26 33 40 (05)
2等が2本でた!
2等が2本でたのは、385回(
>>110 2008/03/13)以来のことだ。
設定ファイル(
>>58)
From 22133
Repeat 22133
に変更したら…
D:\bcc>mtntor mtntor.ini
05 09 12 21 26 40
2等だ!
───────────────────────────────
設定ファイル(
>>58)
From 133988
Repeat 133988
に変更したら…
D:\bcc>mtntor mtntor.ini
05 12 21 26 33 40
2等だ!
401回結果 14 15 27 34 35 42 (37)
>>58の設定ファイルで
From 6340
Repeat 6340
に変更したら…
D:\bcc>mtntor mtntor.ini
14 15 27 34 37 42
D:\bcc>
2等だ!
126 :
名無しさん@夢いっぱい:2008/08/13(水) 18:31:09 ID:V3Jnb80r
投稿者:夜神月☆ (08/05/29-22:10:52) [i]N905i [削除]
首位を奪還され、無念です然し、4週連続首位は記録でしょうね。(自画自賛)
まぁ僕が真面目に予想するかは皆さんの結果次第です(正直首位なんて序の口)
夜神月☆ ◆1svzDdZcEs :2008/05/26(月) 22:57:23 ID:qZi4vDBF
阿呆共今晩は。所で君達年齢は?
君達は全てで僕に勝てないんだから、勉強し懸命に働きなさい。
ポイント戦に参加し己の実力の無さを知りなさい。阿呆共お休みなさい。
Name:夜神月☆ [返信]
No.12 2008/08/07(Thu) 18:27:08
06・08・31・33・34・35
結果01 02 04 16 36 37 B40
>阿呆夜神月☆さん
水を注すようで申し訳ないのですが…
累計の連続記録は第]期にMAKOTOさんが全て一位で「殿堂入り」を果たしております。
次点で第Z期にすけさんが9連続累計一位で、最後にフェイクさんに逆転トップを明け渡しておりました。
127 :
-:2008/10/27(月) 16:41:16 ID:KR98uk1T
C言語に特定したスレです。
C言語は、高速で小型で可読性にすぐれたプログラミングが可能です。
オブジェクト指向が苦手なひとは、とくにC言語を使用します。
ホビープログラミング、サンデープログラミングなど、他の言語を学習したくない場合、
C言語に特定したスレには、安心感があります。
ミラー数字が作れなくて困っています。
例えば、
31→13
のように、一の位と十の位を入れ替える関数を作ってください。
予想プログラムにどうしても必要なんです。お願いします。
>>130 /* 【ファイル名】mirror_t.c
1.テーブルにアクセスするために、2文字を配列の引数にする。
2.テーブルから2文字コピーする(もとの2文字に上書きする)
3.アクセスできない場合、2文字のエラーコードを上書きする。 */
/* 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 */
#define MIRROR_TABLE "10 20 30 40 05 06 07 08 09 01 11 21 31 41 15 16 17 18 19 02 12 22 32 42 25 26 27 28 29 03 13 23 33 43 35 36 37 38 39 04 14 24 34 "
#define ERROR_CODE "44" /* 2文字 */
#include <stdlib.h>
void mirror_table(char *p) {
char c[129] = MIRROR_TABLE;/* 43 × 3 = 129 */
char code[3] = ERROR_CODE;
int i;
char *pStopper;
i = (int)strtol(p, &pStopper, 10);/* 10進数 */
if(i < 1 || 43 < i) {
*p++ = code[0];
*p++ = code[1];
*p = '\0';
return;
}
i = (i - 1)*3;
*p++ = c[i++];
*p++ = c[i];
*p = '\0';
}
/* 【ファイル名】mir.c
2008-11-07
【コンパイル】bcc32 -emir mir.c mirror_t.c
gcc -o mir mir.c mirror_t.c
【使用法】mir < 入力ファイル名
mir < 入力ファイル名 > ファイル名
【中止するには】Windowsの場合、CTRL + C
*/
#define SIZE 256
#include <stdlib.h>
#include <stdio.h>
void mirror_table(char *p);
int main(void) {
char *p;
char c[256];
for(;;) {
p = fgets(c, SIZE, stdin);
if(p == NULL)
break;
mirror_table(p);
puts(p);
}
return EXIT_SUCCESS;
}
char c[256]を訂正します。
char c[SIZE]
D:\bcc>mir
43
34
44
44
45
44
^C
D:\bcc>type 1.txt
16
05
30
08
25
26
01
D:\bcc>mir < 1.txt
16
05
03
08
25
26
10
135 :
130:2008/11/08(土) 00:58:42 ID:an68a3KN
早速ありがとうございます。
数字を1つずつ、その都度入れ替えるのではなく、
あらかじめ入れ替えたものを用意しておくと
負荷がかからないという利点があるということでしょうか。
自分では思いつかない発想で参考になりました。
136 :
名無しさん@夢いっぱい:2008/11/08(土) 12:56:37 ID:wXMQTuke
文字列リバースすれば良いだろ
Cで書かれたソースを見るとホッとする
138 :
名無しさん@夢いっぱい:2008/11/20(木) 01:51:36 ID:cC0k/Z/y
ロト6攻略にコンピュータはいらんぜよ!
要るのは国語辞典じゃ。
実は戦国武将でも解ける簡単な仕組みじゃよ。
ミラー数字結果報告
ミラー数字は、1組の中に最低0組から最大3組までになりますが、
全組み合わせから、2組以上を含む組み合わせを削除すると、
削除口数は、33105口
削除率は、0.54%程度
元々ミラー数字自体の割合が少なく、フィルターとしては
それほど効果があるとは思えないような結果です。
ちなみに、本数字にミラー数字が2組入ったのは過去に2回だけ。
>>C言語は、高速で小型で可読性にすぐれたプログラミングが可能です。
>>114-115などにはあてはまらないと思います。
コメントもなく、使い方も分からず、何をするプログラムなのかも良く分からない。
高速でもなく、小型でもなく、可読性にすぐれているとも思えず、
結局プログラムを書いた人のスキルレベルと初心者に対する配慮によるところが大きい。
その通り。
>>127の申請は却下されたので、もうしばらくこのスレでお楽しみ下さい。
422回結果 05 06 07 08 28 38 (36)
>>58の設定ファイルで
# From 1001 # 表示を開始する行番号
#Repeat 1020 # 反復する回数
From 67770
Repeat 67770
に変更したら
D:\bcc>mtntor mtntor.ini
05 06 07 08 36 38
2等だ! (
>>125 7月3日から、4〜5か月ぶり)
趣旨が似ていても、誘導先が不適当と思われるものもあるので、
依頼の時に考慮して頂けると幸いです。
!
削除人が来る頃には誘導先が1000に達して
なくなっちゃうんだよね。
>>93 鶏を割くに焉んぞ牛刀を用いん(にわとりをさくにいずくんぞぎゅうとうをもちいん)
コンピューターは電子羊の夢を見るか?
149 :
ϖ:2008/12/24(水) 02:42:55 ID:At93RzyV
コーエーのエロゲーですね。
第426回結果 06 08 09 29 32 37 (04)
>>58の設定ファイルで
# From 1001 # 表示を開始する行番号
#Repeat 1020 # 反復する回数
From 190451 # 表示を開始する行番号
Repeat 190451 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
04 06 08 09 32 37
2等だ!
第429回結果 17 25 29 33 37 42 (07)
>>58の設定ファイルで
From 177825 # 表示を開始する行番号
Repeat 177825 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
07 17 29 33 37 42
2等だ!
第434回結果 03 12 19 33 35 36 (37)
>>58の設定ファイルで
From 9457 # 表示を開始する行番号
Repeat 9457 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
12 19 33 35 36 37
D:\work>
2等だ!
第435回結果 02 11 12 28 35 37 (27)
>>58の設定ファイルで
From 35507 # 表示を開始する行番号
Repeat 35507 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
02 11 12 27 28 37
D:\work>
第434回、第435回の連続で2等だ!
154 :
名無しさん@夢いっぱい:2009/03/21(土) 18:45:09 ID:ZLso9SqF
面白いなWWW
馬鹿杉てWWW
第437回結果 02 05 11 21 23 43 (15)
>>58の設定ファイルで
From 112004 # 表示を開始する行番号
Repeat 112004 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
02 05 11 21 23 36
3等。
1口〜100000口(10万口)で…
0個一致は38001口
1個一致は43083口
2個一致は16270口
3個一致は2465本
4個一致は181本
5個一致は0
6個一致は0
小計100000口
100001口〜200000口(さらなる10万口)で…
0個一致は37969口
1個一致は43035口
2個一致は16223口
3個一致は2604本
4個一致は168本
5個一致は1本! (02 05 11 21 23 36 )
6個一致は0
小計100000口
合計200000口(20万口、4000万円ぶん)で3等1本orz
439回結果 11 14 20 28 32 41 (27)
>>58の設定ファイルで
From 142879 # 表示を開始する行番号
Repeat 142879 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
11 14 20 27 28 41
D:\work>
2等だ!
445回結果 10 20 23 26 37 40 (09)
>>58の設定ファイルで
From 40082 # 表示を開始する行番号
Repeat 40082 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
09 10 20 23 26 37
D:\work>
2等だ!
158 :
名無しさん@夢いっぱい:2009/05/16(土) 21:33:28 ID:+XUJemgA
プッ
449回結果 19 20 21 23 27 32 (24)
>>58の設定ファイルで
From 131493 # 表示を開始する行番号
Repeat 131493 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
19 20 21 23 24 32
D:\work>
2等だ!
2009年7月2日木曜日
452回結果 01 05 25 27 29 40 (19)
>>58の設定ファイルで
From 66900 # 表示を開始する行番号
Repeat 66900 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
01 05 25 27 29 40
D:\work>
1等!!
>>117(2008年5月1日木曜日)以来、1等は二回目だ。
161 :
名無しさん@夢いっぱい:2009/07/30(木) 03:03:15 ID:jJg9KlZI
ぶっちゃけこんなもん意味ないだろ
162 :
名無しさん@夢いっぱい:2009/07/30(木) 04:25:15 ID:Vhn65VOQ
結果出ないと分からん
って所にボッキした
第461回
抽せん日 2009年9月3日
本数字 08 10 13 30 32 42
ボーナス数字 12
>>58の設定ファイルで
From 164827 # 表示を開始する行番号
Repeat 164827 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
08 10 13 30 32 42
1等!!
>>117 >>160 につづいて、1等は三回目だ。
信頼のおけるCゲンカーさんにお願いがあります。
ミニロト31to5から、お互いに3個以上一致しない組合せの最大口数は何口になるのでしょうか?
作成するプログラムかアイデアがあれば教えていただけないでしょうか。
462回結果 02 04 06 16 31 33 (05)
>>58の設定ファイルで
From 15197 # 表示を開始する行番号
Repeat 15197 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
02 04 05 06 16 31
D:\work>
2等だ!
166 :
-:2009/09/13(日) 13:37:24 ID:/XnlG8ju
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define P 10000
#define Q 43
#define R 256
void lt6(char *a);
int match(char *a,char *b);
void set0(char *a);
void main(int argc,char *argv[]){
if(argc==3){
char buf[R],*mem,*tab,*p1,*p2;
int i,j,line;
long cnt;
FILE *fp;
srand((unsigned)time(NULL));
mem=malloc(P*Q); tab=malloc(P*Q);
fp=fopen(argv[1],"r");
p1=tab; line=0;
while(fgets(buf,R-1,fp)!=NULL){
set0(p1);
i=0;
while(i<18){
j=10*(buf[i]-48)+buf[i+1]-49;
if(j>=0 && j<Q) *(p1+j)=1; i+=3; }
p1+=Q; line++; }
*p1=-1; fclose(fp);
167 :
-:2009/09/13(日) 13:38:45 ID:/XnlG8ju
/*
A=165613/6096454=1/37
1.5A=1/25 0.6A=1/61
0.95A=1/39 1.05A=1/35
B=(1+222+9990+155400+990675)/6096454=1/5.27
*/
fp=fopen(argv[2],"w");
cnt=0; p1=mem;
while(cnt<P*R){
lt6(p1); p2=mem;
while(p2<p1){
i=match(p1,p2);
if(i>2) break;
p2+=Q; }
if(p1==p2){
p2=tab; i=0;
while(*p2!=-1){
j=match(p1,p2);
if(j>4) break; if(j>2) i++; p2+=Q; }
if(*p2==-1 && i<line/37){
i=j=0;
while(i<Q && j<6){
if(*(p1+i)){
fprintf(fp,"%02d ",i+1); j++; }
i++; }
fprintf(fp,"\n"); p1+=Q; printf("%7ld\r",cnt); }
else cnt++; }
else cnt++; }
fclose(fp); free(mem); free(tab); printf("\n");
}
else printf("l125.c\n");
}
168 :
-:2009/09/13(日) 13:39:50 ID:/XnlG8ju
void lt6(char *a){
int i,j;
set0(a);
i=0;
while(i<6){
j=rand()%Q;
if(*(a+j)==0){
*(a+j)=1; i++; }}
}
int match(char *a,char *b){
int i,j;
i=j=0;
while(i<Q){
if(*(a+i) && *(b+i)) j++; i++; }
return(j);
}
void set0(char *a){
int i;
i=0;
while(i<Q){
*(a+i)=0; i++; }
}
169 :
-:2009/09/13(日) 13:45:32 ID:/XnlG8ju
04 07 08 30 31 / 02 07 19 24 25 / 05 11 19 24 31 / 08 09 13 23 28 / 09 11 14 22 29 /
01 18 19 24 29 / 02 05 06 08 21 / 11 16 21 22 28 / 08 15 17 18 25 / 02 07 18 27 30 /
06 13 16 18 21 / 02 20 23 24 31 / 06 14 16 17 23 / 01 08 10 22 23 / 03 10 11 18 21 /
02 18 19 23 28 / 08 09 18 26 31 / 07 14 15 22 23 / 01 11 18 23 26 / 07 16 19 28 29 /
08 11 20 26 29 / 01 17 20 22 28 / 04 12 14 27 31 / 07 12 20 22 26 / 16 18 22 23 27 /
03 13 14 18 29 / 06 08 10 17 20 / 06 07 20 25 28 / 11 13 19 27 29 / 09 14 20 21 24 /
03 11 16 24 26 / 01 07 12 29 31 / 15 17 21 24 27 / 11 15 20 24 28 / 10 13 24 25 31 /
02 05 09 12 18 / 01 11 14 21 30 / 01 04 06 26 27 / 17 23 25 30 31 / 02 15 16 22 24 /
10 13 14 16 20 / 01 10 15 16 18 / 02 04 06 13 31 / 05 13 14 26 31 / 01 10 25 27 29 /
07 09 12 13 27 / 06 07 21 27 31 / 03 13 19 20 26 / 04 07 10 16 27 / 04 06 08 12 19 /
10 11 12 25 26 / 05 17 18 26 29 / 06 08 23 25 27 / 02 09 13 17 24 / 01 04 05 09 17 /
14 16 19 25 30 / 01 03 07 23 28 / 12 15 17 28 29 / 02 09 21 26 28 / 09 10 18 23 29 /
04 25 26 29 30 / 03 04 08 14 28 / 03 15 22 30 31 / 06 15 18 20 27 / 03 07 15 26 27 /
05 08 22 24 29 / 10 21 22 29 31 / 04 06 07 14 29 / 03 05 17 20 27 / 12 15 21 23 30 /
09 22 24 26 27 / 05 09 19 20 29 / 13 24 26 28 29 / 01 09 22 25 30 / 03 08 09 21 30 /
02 12 20 25 29 / 02 05 14 24 30 / 01 09 16 26 29 / 03 08 10 12 15 / 06 10 18 28 30 /
04 10 15 19 31 / 01 03 09 11 13 / 01 02 06 12 17 / 02 03 16 17 25 / 02 11 22 26 30 /
03 05 07 10 25 / 04 10 17 24 26 / 04 07 21 23 25 / 01 07 14 17 26 / 03 07 20 24 29 /
01 10 26 30 31 / 05 17 19 22 23 / 04 16 19 20 22 / 14 20 23 27 28 / 13 16 23 29 30 /
08 15 20 21 22 / 06 15 19 24 26 / 06 07 09 11 16 / 02 03 04 23 27 / 04 12 16 24 28 /
05 13 25 27 30 / 05 19 25 26 28 / 07 09 17 21 22 / 03 04 15 16 29 / 02 11 12 24 27 /
03 06 09 19 27 / 02 10 12 13 23 / 02 03 09 14 15 / 04 10 14 22 25 / 13 15 16 27 31 /
05 07 24 27 28 / 04 05 12 20 30 / 12 19 21 25 27 / 11 13 18 20 31 / 03 06 11 20 22 /
04 13 22 24 30 / 06 11 12 13 30 / 05 14 15 21 29 / 03 04 18 24 31 / 05 11 14 16 18 /
03 07 13 17 31 / 02 04 14 19 26 / 08 16 17 29 31 / 02 08 10 11 31 / 01 02 05 15 25 /
03 15 23 24 25 / 01 08 17 19 21 / 01 12 13 21 26 / 09 10 11 27 28 / 04 09 12 15 26 /
06 12 18 24 25 / 02 14 28 29 31 / 07 10 13 19 30 / 17 18 20 21 23 / 01 03 12 16 20 /
02 03 20 28 30 / 07 13 16 22 25 / 03 04 05 19 21 / 01 04 08 24 25 / 09 10 12 20 31 /
04 07 17 18 28 / 12 14 18 26 30 / 06 17 19 29 30 / 05 06 17 28 31 / 10 12 17 18 27 /
04 11 12 23 29 / 05 06 07 26 30 / 02 03 12 19 31 / 11 12 15 19 22 / 01 02 07 11 20 /
02 17 22 27 31 / 01 04 14 18 20 / 15 23 26 29 31 / 01 14 22 24 31 / 06 22 25 26 31 /
07 09 15 25 31 / 10 19 21 23 24 / 11 13 14 17 28 / 04 08 13 21 29 / 04 09 16 18 30 /
08 18 19 20 30 / 05 08 10 16 19 / 01 06 08 09 14 / 07 15 16 17 30 / 05 10 12 22 28 /
07 11 17 23 27 / 04 20 26 28 31 / 07 08 09 10 24 / 18 21 25 28 29 / 03 16 21 23 31 /
01 02 08 13 30 / 08 09 11 12 17 / 10 12 14 24 29 / 12 17 19 20 24 / 02 04 10 20 21 /
07 18 19 21 26 / 05 06 10 14 27 / 01 02 03 22 29 / 02 03 06 18 26 / 04 05 08 18 27 /
03 05 06 12 23 / 01 08 11 15 27 / 09 12 14 19 28 / 04 05 06 11 15 / 05 11 20 21 25 /
14 15 16 26 28 / 03 10 14 23 30 / 09 11 20 23 30 / 02 15 18 21 31 / 01 05 06 20 24 /
05 09 16 22 31 / 20 27 29 30 31 / 02 16 20 26 27 / 04 13 15 20 23 / 01 09 21 23 27 /
05 12 13 15 24 / 08 17 26 27 30 / 05 08 11 28 30 / 06 07 08 13 15 / 05 07 13 18 23 /
14 15 17 20 31 / 11 17 24 25 29 / 13 15 18 22 28 / 09 13 19 21 31 / 01 06 13 19 28 /
04 11 17 21 31 / 09 11 18 19 25 / 03 09 17 23 26 / 04 15 27 28 30 / 02 06 09 22 23 /
09 12 16 23 25 / 03 13 21 22 27 / 02 06 10 15 29 / 02 07 13 14 21 / 05 12 16 27 29 /
10 18 20 22 24 / 01 03 06 21 25 / 08 13 20 24 27 / 08 12 16 22 30 / 07 10 15 21 28 /
03 08 19 23 29 / 04 09 20 25 27 / 03 12 13 25 28 / 01 07 19 22 27 / 04 07 11 13 26 /
02 08 14 18 22 / 01 03 24 27 30 / 07 08 11 14 25 / 01 19 20 25 31 / 08 12 21 24 31 /
03 12 14 17 21 / 06 09 10 13 26 / 08 14 23 24 26 / 01 05 07 16 21 / 03 10 17 19 28 /
01 02 10 24 28 / 06 09 12 21 29 / 02 08 09 27 29 / 05 09 10 15 30 / 11 15 18 29 30 /
01 13 14 23 25 / 01 03 05 08 31 / 04 05 16 23 26 / 06 16 24 30 31 / 01 04 19 23 30 /
05 10 13 17 21 / 06 14 18 19 31 / 07 08 16 20 23 / 08 19 27 28 31 / 02 04 11 25 28 /
02 05 13 20 22 / 04 12 18 21 22 / 02 07 08 12 28 / 03 11 25 27 31 / 08 14 16 21 27 /
04 13 17 19 25 / 06 22 27 28 29 /
これって意味あるの?
>>172 1等当てるより難しい。偶然では出そうもないから。
>>173 中途半端、インチキ、イカサマを排除するため。
175 :
-:2009/09/17(木) 23:49:25 ID:N5VpopA+
#include <stdio.h>
#include <stdlib.h>
#define P 5000
#define Q 43
void set0(char *a){
int i;
i=0;
while(i<Q){
*(a+i)=0; i++; }
}
void main(int argc,char *argv[]){
if(argc==3){
char buf[128],*mem,*p1;
int i,j,line,m[7],n1,n2,n3,n4,n5,n6;
long cnt;
FILE *fp;
mem=malloc(P*Q);
fp=fopen(argv[1],"r"); p1=mem; line=0;
while(fgets(buf,127,fp)!=NULL){
set0(p1);
i=9;
while(i<27){
j=10*(buf[i]-48)+buf[i+1]-49; *(p1+j)=1; i+=3; }
p1+=Q; line++; }
fclose(fp); *p1=-1;
176 :
-:2009/09/18(金) 00:00:19 ID:SmLPwVwd
fp=fopen(argv[2],"w");
n1=0; cnt=0;
while(n1<Q-5){
n2=n1+1;
while(n2<Q-4){
n3=n2+1;
while(n3<Q-3){
n4=n3+1;
while(n4<Q-2){
n5=n4+1;
while(n5<Q-1){
n6=n5+1;
while(n6<Q){
if(n2+n3+n4+n5+n6-5*n1==15) printf("%02d...\r",n1+1);
i=0;
while(i<7){
m[i]=0; i++; }
p1=mem;
while(*p1!=-1){
i=0;
if(*(p1+n1)) i++; if(*(p1+n2)) i++; if(*(p1+n3)) i++;
if(*(p1+n4)) i++; if(*(p1+n5)) i++; if(*(p1+n6)) i++;
if(i>4) break; /* caution */
m[i]++; p1+=Q; }
if(*p1==-1 && m[3]==9 && m[4]==3){
fprintf(fp,"%02d %02d %02d %02d %02d %02d\n",n1+1,n2+1,n3+1,n4+1,n5+1,n6+1);
cnt++;
}
n6++; } n5++; } n4++; } n3++; } n2++; } n1++; }
fclose(fp); free(mem); printf("%d %ld\n",line,cnt);
}
else printf("l011.c\n");
}
与えるデータは
ttp://www.geocities.jp/k3np5/dat090906.zip こんな感じ。
463回結果 10 13 16 25 30 42 (28)
>>58の設定ファイルで
From 27371 # 表示を開始する行番号
Repeat 27371 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
10 16 25 28 30 42
D:\work>
2等だ!
#define COMMENT '#' /* 【ファイル名】idline.c */
#define YEAR "20" /* 【コンパイル】bcc32 idline.c */
#define SIZE 256 /* 【実行】idline < input.txt > output.txt */
#include <stdlib.h> /* 【用途】日付とIDの行の先頭に#を付加できる */
#include <stdio.h>
#include <string.h>
int main(void) {
char c[SIZE], cYear[ ] = "20 / / ( ) : : ID:";
char *p;
for(;;) {
p = fgets(c, SIZE, stdin);
if(p == NULL) {
break;
}
p = strstr(p, YEAR);
while(p != NULL) {
if(c[0] != ' ' && p[4] == cYear[4] && p[7] == cYear[7] && p[10] == cYear[10]
&& p[13] == cYear[13] && p[17] == cYear[17] && p[20] == cYear[20] && p[24] == cYear[24]
&& p[25] == cYear[25] && p[26] == cYear[26]) {
fputc(COMMENT, stdout); /* 日付とIDの行の先頭に#を付加した */
break;
}
p++;
p++;
p = strstr(p, YEAR);
}
fputs(c, stdout); /* 入力した行をそのまま出力した */
}
return EXIT_SUCCESS;
}
180 :
179:2009/10/02(金) 03:54:50 ID:LbUawBan
>>179 cYear[ ] = "20 / / ( ) : : ID:"; を訂正して、
cYear[ ] = "20 / / ( ) : : ID:";にします。
cYear[ ] = "2009/10/02(金) 03:50:32 ID:";
181 :
179:2009/10/02(金) 03:58:27 ID:LbUawBan
#define COMMENT '#' /* 【ファイル名】idline.c */
#define YEAR "20" /* 【コンパイル】bcc32 idline.c */
#define SIZE 256 /* 【実行】idline < input.txt > output.txt */
#include <stdlib.h> /* 【用途】日付とIDの行の先頭に#を付加できる */
#include <stdio.h>
#include <string.h>
int main(void) {
char c[SIZE], cYear[ ] = "2009/10/02(金) 03:50:32 ID:";
char *p;
for(;;) {
p = fgets(c, SIZE, stdin);
if(p == NULL) {
break;
}
p = strstr(p, YEAR);
while(p != NULL) {
if(c[0] != ' ' && p[4] == cYear[4] && p[7] == cYear[7] && p[10] == cYear[10]
&& p[13] == cYear[13] && p[17] == cYear[17] && p[20] == cYear[20] && p[24] == cYear[24]
&& p[25] == cYear[25] && p[26] == cYear[26]) {
fputc(COMMENT, stdout); /* 日付とIDの行の先頭に#を付加した */
break;
}
p++;
p++;
p = strstr(p, YEAR);
}
fputs(c, stdout); /* 入力した行をそのまま出力した */
}
return EXIT_SUCCESS;
}
05 10 11 33 42 43 / 03 09 26 27 33 34 / 07 12 16 32 39 43 / 12 13 15 18 20 30 / 01 24 26 32 39 40 /
03 06 08 10 28 35 / 14 15 22 37 38 43 / 10 17 22 24 29 30 / 03 22 25 33 37 41 / 08 09 19 22 25 29 /
02 08 28 32 33 42 / 01 12 18 21 23 31 / 04 13 24 28 30 39 / 11 13 19 24 36 43 / 11 19 23 27 28 29 /
11 15 28 36 38 39 / 07 09 11 14 17 21 / 06 08 16 31 34 38 / 03 04 11 19 25 31 / 16 22 27 30 31 36 /
04 16 18 26 31 37 / 10 13 22 23 27 39 / 03 10 14 18 27 32 / 09 12 26 28 35 39 / 02 25 27 29 33 40 /
13 16 20 23 33 36 / 01 05 25 27 39 41 / 01 09 10 17 32 43 / 02 14 20 32 35 40 / 03 11 18 21 29 41 /
01 06 08 24 36 37 / 20 30 32 34 42 43 / 03 15 19 20 22 27 / 02 04 07 17 29 42 / 04 12 15 16 33 38 /
06 09 19 20 37 43 / 01 13 17 34 37 40 / 08 09 27 28 38 43 / 15 31 34 36 41 42 / 01 05 18 19 24 33 /
02 08 24 26 29 35 / 15 20 21 35 41 43 / 05 14 19 29 40 42 / 25 29 30 34 37 38 / 02 16 21 23 39 40 /
02 03 05 18 20 37 / 03 17 26 31 35 36 / 13 14 24 32 33 38 / 04 06 09 23 26 30 / 11 17 23 34 39 41 /
01 08 14 16 26 42 / 04 21 24 27 40 41 / 05 07 08 18 22 40 / 02 05 09 14 15 16 / 07 12 31 33 36 37 /
02 06 11 12 13 27 / 02 05 13 30 40 43 / 09 12 24 30 34 40 / 09 21 31 32 34 35 / 11 17 18 25 30 32 /
15 21 30 33 37 40 / 05 15 20 26 28 29 / 04 10 19 23 40 43 / 09 10 11 15 27 35 / 01 15 23 38 40 41 /
05 09 28 31 36 40 / 01 04 07 13 16 25 / 02 05 12 29 31 39 / 02 07 10 20 26 41 / 12 22 23 35 38 42 /
02 09 22 36 42 43 / 04 05 15 17 21 39 / 01 04 05 10 30 35 / 06 10 14 20 29 34 / 01 02 03 19 30 36 /
10 12 13 17 21 26 / 08 11 13 17 31 33 / 05 13 16 17 32 35 / 02 07 33 34 38 39 / 13 20 27 31 35 42 /
04 05 06 11 20 38 / 16 19 20 25 32 41 / 10 11 21 34 36 37 / 08 15 16 22 24 28 / 03 04 13 15 29 43 /
06 13 18 25 39 42 / 01 06 11 15 17 26 / 08 10 14 25 38 40 / 03 07 11 12 24 38 / 10 22 32 37 40 42 /
07 09 16 29 38 41 / 05 06 21 27 36 43 / 05 08 35 37 38 41 / 05 11 12 14 18 36 / 10 15 19 26 31 39 /
05 07 16 27 37 42 / 01 12 17 20 24 35 / 02 15 17 23 25 37 / 02 09 13 18 19 23 / 07 13 14 27 30 41 /
06 07 17 22 28 33 / 01 02 08 10 12 15 / 01 04 20 32 33 37 / 03 06 13 30 32 37 / 04 19 22 34 35 37 /
03 12 21 22 36 40 / 07 13 15 19 28 42 / 08 29 30 32 39 41 / 04 09 14 36 39 41 / 02 07 19 27 31 43 /
06 23 29 32 33 43 / 10 13 16 28 37 43 / 09 17 20 23 28 42 / 06 07 12 21 25 41 / 14 17 18 20 33 41 /
09 10 23 24 25 33 / 07 28 32 35 36 41 / 06 10 18 31 33 40 / 03 05 23 25 32 38 / 05 16 21 22 26 38 /
03 12 14 19 28 43 / 04 18 32 35 38 43 / 18 21 22 27 28 37 / 03 16 29 36 39 42 / 07 22 24 27 32 34 /
14 25 26 29 36 43 / 10 16 17 19 36 38 / 01 11 22 29 31 32 / 07 18 20 23 24 39 / 11 22 26 28 30 40 /
03 07 08 09 15 31 / 07 14 18 25 28 34 / 04 12 20 22 25 43 / 01 16 29 33 34 35 / 01 04 06 14 19 27 /
01 08 09 20 21 39 / 03 04 08 23 34 36 / 06 13 22 26 36 41 / 11 19 26 35 41 42 / 16 18 23 25 27 35 /
07 10 19 21 29 35 / 06 11 14 23 31 37 / 02 06 21 26 37 42 / 05 23 24 26 34 42 / 03 09 12 13 41 42 /
01 03 23 27 42 43 / 26 30 31 33 38 43 / 08 14 21 23 30 43 / 01 04 09 11 18 42 / 03 14 15 34 35 39 /
06 24 25 26 27 31 / 04 10 26 27 28 36 / 08 12 19 24 31 42 / 02 24 25 28 38 41 / 12 15 19 29 32 34 /
02 11 20 21 24 31 / 01 06 16 21 28 30 / 03 15 21 24 32 42 / 01 15 25 28 31 35 / 08 17 18 21 34 42 /
03 23 29 30 31 40 / 06 10 21 32 38 39 / 01 05 12 13 22 28 / 03 08 17 40 41 43 / 12 17 19 27 30 39 /
09 17 24 31 37 41 / 02 09 11 30 33 41 / 18 19 36 37 39 40 / 17 21 25 33 35 38 / 12 25 28 30 36 42 /
03 09 16 25 30 43 / 01 17 18 28 29 36 / 03 05 09 11 22 39 / 05 07 24 25 35 43 / 04 05 07 14 26 33 /
14 16 17 22 25 39 / 01 18 20 25 26 38 / 02 03 22 28 29 34 / 13 14 19 21 25 37 / 03 06 14 16 24 41 /
04 07 11 15 37 41 / 20 28 31 34 37 39 / 02 18 24 27 30 42 / 06 09 15 24 29 39 / 11 12 31 35 40 43 /
13 21 28 33 34 41 / 04 08 11 21 26 32 / 04 09 15 25 32 40 / 07 08 11 23 25 42 / 20 24 27 29 36 38 /
02 04 05 24 32 36 / 03 05 07 17 30 34 / 11 13 18 22 34 38 / 08 11 20 29 37 40 / 04 16 17 27 34 43 /
14 21 27 31 33 39 / 05 08 09 10 13 34 / 06 07 23 34 35 40 / 01 07 21 26 34 43 / 08 15 17 20 32 38 /
08 12 20 23 27 41 / 10 14 22 31 35 41 / 02 17 21 22 32 41 / 02 04 22 31 38 40 / 01 02 11 16 38 43 /
06 17 27 38 41 42 / 03 07 16 19 33 40 / 06 09 14 33 35 42 / 01 13 21 36 38 42 / 02 04 06 15 18 34 /
08 09 12 14 32 37 / 05 10 15 22 25 36 / 09 13 29 35 36 37 / 02 08 14 19 34 41 / 03 18 28 31 38 42 /
02 03 04 09 10 21 / 07 08 13 26 37 39 / 09 10 12 16 20 31 / 16 19 23 24 30 37 / 08 15 18 25 33 43 /
05 14 20 25 30 31 / 04 06 12 28 37 40 / 02 13 14 26 28 31 / 12 18 22 26 29 33 / 06 07 18 19 30 38 /
14 15 17 27 36 40 / 09 15 18 21 26 36 / 01 02 06 20 22 23 / 05 06 08 15 30 42 / 04 13 23 31 32 41 /
04 14 21 28 29 38 / 03 10 11 16 23 26 / 08 22 33 35 36 39 / 02 10 14 24 39 43 / 10 16 18 30 34 39 /
10 15 23 28 30 32 / 11 18 26 27 39 43 / 03 08 13 16 21 27 / 11 24 28 33 35 37 / 06 11 16 25 36 40 /
01 07 22 30 39 42 / 01 03 10 13 24 31 / 03 13 20 38 39 40 / 01 08 11 27 30 34 / 09 14 20 22 24 26 /
07 17 19 23 26 32 / 19 20 21 23 34 38 / 02 06 17 19 24 40 / 10 19 25 27 34 42 / 10 12 34 38 41 43 /
07 15 16 26 30 35 / 05 18 23 28 41 43 / 04 07 20 30 36 40 / 05 12 17 23 33 40 / 01 12 26 30 37 41 /
16 18 24 29 40 43 / 01 07 10 14 23 36 / 08 10 19 20 30 33 / 02 12 16 25 26 34 / 01 02 07 09 28 37 /
>>182-183は、ランダムで1000万とおり出力したものから260とおりを抽出した。
たぶん最大ではないようなきがする。
/* 【ファイル名】mtform.c
【コンパイル】bcc32 mtform.c
【実行】mtform < input.txt > output.txt
【用途】mtNtoR(
>>57-71)の出力と同様に、行の先頭に半角空白を付加する。6個ある行のみ出力する。
【注意】sscanf()では日本語を処理できないとおもわれる(行頭に#がある場合、sscanf()を使用しない) */
#define COMMENT '#'
#define LOTO 6
#define SIZE 256
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int i1, i2, i3, i4, i5, i6, i;
char *p;
char c[SIZE];
for(;;) {
p = fgets(c, SIZE, stdin);
if(p == NULL)
break;
if(c[0] == COMMENT) { /* 行頭に#がある */
fputs(c, stdout); /* 入力した行をそのまま出力した */
continue;
}
i = sscanf(c, "%d %d %d %d %d %d ", &i1, &i2, &i3, &i4, &i5, &i6);
if(i == LOTO) /* 1行に6個の数を捕捉した */
fprintf(stdout, " %02d %02d %02d %02d %02d %02d\n", i1, i2, i3, i4, i5, i6);
/* 行の先頭に半角空白を付加した */
}
return EXIT_SUCCESS;
}
コンパイルするには、全角空白をタブ(\t)か複数の半角空白に置換します
以下のプログラム(subset)では、3個以上一致する行を排除したテキストを出力する。
ロト6の組合せからなるテキストファイルを入力する。第1行もロト6の組合せでなければならない。
出力は入力ファイルの部分集合である。出力には、入力ファイルの第1行がふくまれている。
main()
1.コマンドと一緒に指定されたテキストファイルをオープンする。
2.高速化のため、中間ファイルとしてバイナリファイル(subset.bin)を生成する。
3.バイナリファイルから6バイトを読み取って、双方向リスト(sLine)の起点としてロト6の組合せを保持する。
4.バイナリファイルを読みながら3個以上一致する組合せを排除するために、
現在、双方向リストとして保持しているすべての組合せにわたって、一致する個数を調査する。
5.3個以上一致する場合、何もしない。
6.さもなければ、双方向リストを伸長して組合せを追加する。
7.双方向リストの内容で、バイナリファイルを上書きする(subset.binは縮小する)
8.バイナリファイルから標準出力(stdout)にテキストを出力する。
BinFile()
1.テキストファイルから1行読み取って配列に記憶する。6個の二桁は、1, 4, 7, 10, 13, 16の位置にある。
2.二桁を整数に変換する。
3.整数として1バイトをバイナリファイルに出力する。
iCount()
1、現在、保持しているすべての組合せにわたって、双方向リストを逆方向にたどりながら一致する個数を調査する。
2.双方向リストの各ノードに対して、文字列の検索を反復するループではなく一度の計算でカウントする。
3.一致した個数の最大値を返す。
2.8 GHzのPentium 4 プロセッサは、BinFile()およびiCount()で、時間がかかる場合がある(1000万行なら30秒程度)
しかし、文字列の検索を反復するループ(注2)ではなく一度の計算でカウントできるため、大幅に高速だ。
400MHzのCeleron プロセッサでも実行できた。MS-DOS 6.2(注1), Windows 98, FreeBSD 4.5で確認した。
(注1)BorlandのTurbo C++ 4.0でコンパイルした。
(注2)100万行で4〜5分かかったきがする。
/* 【ファイル名】subset.h
【コンパイル】bcc32 -esubset subset.c pSetting.c BinFile.c pFirst.c iCount.c pAdd.c Update.c bin2txt.c
gcc -o subset subset.c pSetting.c BinFile.c pFirst.c iCount.c pAdd.c Update.c bin2txt.c
【実行】subset filename
subset input.txt > output.txt
【重要】mtntor.exe(
>>57-71)の出力と同様に行頭に半角空白が付加されたデータを入力する
01234567890123456789
06 24 27 30 32 38
*/
#define OVERLAP 3
#define BIN_FILE "subset.bin"
#define TOTAL 44 /* 43 + 1 */
#define LOTO 6
#define COUNT 1
#include <stdlib.h>
#include <stdio.h>
typedef struct sLine sLine;
struct sLine {
sLine *pPrev;
sLine *pNext;
char cBall[TOTAL];
};
FILE *pSetting(int, char *);
void BinFile(FILE *);
sLine *pFirst(FILE *);
int iCount(char *, sLine *);
sLine *pAdd(char *, sLine *);
void Update(sLine *);
void bin2txt(void);
#include "subset.h" /* 【ファイル名】subset.c */
int main(int argc, char *argv[]) {
FILE *pFile;
FILE *pBin;
sLine *pO;
sLine *p;
int i;
unsigned int u;
char c[LOTO];
pFile = pSetting(argc, argv[1]);/* テキストファイルをオープンした */
BinFile(pFile);/* 中間ファイルとしてバイナリファイルを生成した */
fclose(pFile);
pBin = fopen(BIN_FILE, "rb");
pO = pFirst(pBin); /* 起点として組合せを保持した */
for(p = pO; ; ) { /* バイナリファイルを読みながら3個以上一致する組合せを排除する */
u = fread(c, sizeof(char), LOTO, pBin);
if(u < LOTO)
break;
/* 現在、保持しているすべての組合せにわたって、一致する個数を調査する */
i = iCount(c, p);
if(i >= OVERLAP) /* #define OVERLAP 3 */
continue;/* 3個以上一致する組合せを排除した */
p = pAdd(c, p);/* 組合せを追加した */
}
fclose(pBin);
Update(pO);/* バイナリファイルを縮小した */
bin2txt();/* 標準出力にテキストを出力した */
return EXIT_SUCCESS;
}
/* 【ファイル名】pSetting.h */
#define GUIDE "subset filename\nsubset input.txt > output.txt\n 04 14 29 34 35 43 o\n04 14 29 34 35 43 x\n"
#define BIN_FILE "subset.bin"
#include <stdlib.h>
#include <stdio.h>
/* 【ファイル名】pSetting.c */
#include "pSetting.h"
FILE *pSetting(int i, char *p) {
FILE *pFile;
switch(i) {/* コマンドラインの要素の個数 */
case 2:/* コマンドおよびファイル名 */
break;
default:
fprintf(stderr, GUIDE);
exit(EXIT_FAILURE);
}
pFile = fopen(p, "rt"); /* テキストファイルをオープンした */
if(pFile == NULL) {
perror(p);
exit(EXIT_FAILURE);
}
return pFile;
}
/* 【ファイル名】BinFile.h */
#define BIN_FILE "subset.bin"
#define SIZE 20
#include <stdlib.h>
#include <stdio.h>
/*
【重要】mtntor.exe(
>>57-71)の出力と同様に行頭に半角空白が付加されたデータを入力する
01234567890123456789
06 24 27 30 32 38
*/
enum {
BALL1 = 1, /* c[BALL1], c[BALL2], c[BALL3]とは、c[1], c[4], c[7]のことである */
BALL2 = 4,
BALL3 = 7,
BALL4 = 10,
BALL5 = 13,
BALL6 = 16 /* c[BALL6]はc[16]であり、6個目のボールはc[16]およびc[17]の二桁が表示されている */
};
/* 【ファイル名】BinFile.c */
#include "BinFile.h"
void BinFile(FILE *pFile) {
FILE *pBin;
int i;
char *pStop;
char *p;
char c[SIZE];
pBin = fopen(BIN_FILE, "wb");
if(pBin == NULL) {
perror(BIN_FILE);
exit(EXIT_FAILURE);
}
for(;;) {
p = fgets(c, SIZE, pFile);
if(p == NULL) break;
i = (int)strtol(&c[BALL1], &pStop, 10); /* c[BALL1]およびc[ BALL1 + 1 ]の二桁を整数に変換した */
fputc(i, pBin); /* 整数としてiをバイナリファイルに出力した */
i = (int)strtol(&c[BALL2], &pStop, 10);
fputc(i, pBin);
i = (int)strtol(&c[BALL3], &pStop, 10);
fputc(i, pBin);
i = (int)strtol(&c[BALL4], &pStop, 10);
fputc(i, pBin);
i = (int)strtol(&c[BALL5], &pStop, 10);
fputc(i, pBin);
i = (int)strtol(&c[BALL6], &pStop, 10);
fputc(i, pBin);
}
fclose(pBin);
}
/* 【ファイル名】pFirst.h */
#define GUIDE "subset filename\nsubset input.txt > output.txt\n 04 14 29 34 35 43 o\n04 14 29 34 35 43 x\n"
#define TOTAL 44 /* 43 + 1 */
#define LOTO 6
#define COUNT 1
#include <stdlib.h>
#include <stdio.h>
typedef struct sLine sLine;
struct sLine {
sLine *pPrev;
sLine *pNext;
char cBall[TOTAL];
};
/* 【ファイル名】pFirst.c */
#include "pFirst.h"
sLine *pFirst(FILE *pBin) {
char c[LOTO];
unsigned int u;
sLine *pO;
/* cBall[1]〜cBall[43]は、calloc()により0に初期化される */
pO = calloc(1, sizeof(sLine));
if(pO == NULL) {
perror("pO = calloc()");
exit(EXIT_FAILURE);
}
u = fread(c, sizeof(char), LOTO, pBin);
if(u < LOTO) {
fprintf(stderr, GUIDE);
exit(EXIT_FAILURE);
}
pO->pPrev = NULL;
pO->pNext = NULL;
pO->cBall[ c[0] ] = COUNT;/* cBall[1]〜cBall[43]のうち、存在するボール1個をカウント */
pO->cBall[ c[1] ] = COUNT;
pO->cBall[ c[2] ] = COUNT;
pO->cBall[ c[3] ] = COUNT;
pO->cBall[ c[4] ] = COUNT;
pO->cBall[ c[5] ] = COUNT;
/* 起点であるpOのメモリもUpdate()により解放される */
return pO;
}
/* 【ファイル名】iCount.h */
#define TOTAL 44 /* 43 + 1(cBall[0]は使用しない) */
#include <stdlib.h>
typedef struct sLine sLine;
struct sLine {
sLine *pPrev;
sLine *pNext;
char cBall[TOTAL];/* ボールは1〜43であり、cBall[0]は使用しない */
};
/* 【ファイル名】iCount.c */
#include "iCount.h"
/* 文字列の検索を反復するループではなく計算でカウントできる
たとえば、i = 0 + COUNT + 0 + … + 0 + COUNT + 0 + COUNT + 0 */
int iCount(char *c, sLine *p) {
int i, iMax;
for(iMax = 0 ; p != NULL; p = p->pPrev) { /* 現在、保持しているすべての組合せにわたって、一致する個数を調査する */
i = p->cBall[ c[0] ] + p->cBall[ c[1] ] + p->cBall[ c[2] ] + p->cBall[ c[3] ] + p->cBall[ c[4] ] + p->cBall[ c[5] ];
/* たとえば、i = 0 + COUNT + 0 + … + 0 + COUNT + 0 + COUNT + 0 */
if(i > iMax) {
iMax = i; /* 一致した個数の最大値 */
}
}
return iMax;
}
/* 【ファイル名】pAdd.h */
#define TOTAL 44 /* 43 + 1 */
#define COUNT 1
#include <stdlib.h>
typedef struct sLine sLine;
struct sLine {
sLine *pPrev;
sLine *pNext;
char cBall[TOTAL];
};
/* 【ファイル名】pAdd.c */
#include "pAdd.h"
sLine *pAdd(char *c, sLine *p) {
sLine *pNew;
/* cBall[1]〜cBall[43]は、calloc()により0に初期化される */
pNew = calloc(1, sizeof(sLine));
if(pNew == NULL) {
perror("calloc()");
exit(EXIT_FAILURE);
}
pNew->pPrev = p;
pNew->pNext = NULL;
pNew->cBall[ c[0] ] = COUNT;/* cBall[1]〜cBall[43]のうち、存在するボール1個をカウント */
pNew->cBall[ c[1] ] = COUNT;
pNew->cBall[ c[2] ] = COUNT;
pNew->cBall[ c[3] ] = COUNT;
pNew->cBall[ c[4] ] = COUNT;
pNew->cBall[ c[5] ] = COUNT;
p->pNext = pNew;
p = pNew;
return p;
}
/* 【ファイル名】Update.h */
#define BIN_FILE "subset.bin"
#define TOTAL 44 /* 43 + 1 */
#define COUNT 1
#include <stdlib.h>
#include <stdio.h>
typedef struct sLine sLine;
struct sLine {
sLine *pPrev;
sLine *pNext;
char cBall[TOTAL];
};
/* 【ファイル名】Update.c /
#include "Update.h"
void Update(sLine *pO) {
int i;
sLine *pNew;
sLine *p;
FILE *pBin;
pBin = fopen(BIN_FILE, "wb");
for(p = pO; ; p = pNew) {
pNew = p->pNext;
for(i = 1; i < TOTAL; i++) {/* ボールは1〜43 */
if(p->cBall[i] == COUNT) {/* 存在するボールの番号i */
fputc(i, pBin); /* 整数としてiをバイナリファイルに出力した */
}
}
free(p);
if(pNew == NULL) {
break;
}
}
fclose(pBin);
}
/* 【ファイル名】bin2txt.h */
#define BIN_FILE "subset.bin"
#define SIZE 20
#define LOTO 6
#include <stdlib.h>
#include <stdio.h>
/* 【ファイル名】bin2txt.c */
#include "bin2txt.h"
void bin2txt(void) {
unsigned int u;
char c[LOTO], cLine[SIZE];
FILE *pBin;
pBin = fopen(BIN_FILE, "rb");
for(;;) {
u = fread(c, sizeof(char), LOTO, pBin);
if(u < LOTO) {
break;
}
fprintf(stdout, " %02d %02d %02d %02d %02d %02d\n", c[0], c[1], c[2], c[3], c[4], c[5]);
}
fclose(pBin);
}
たとえば、1000万行のテキストファイルを入力したら、260行になった
>>182-183 この260行のファイルを入力しても260行になる。
>>201 /* 【ファイル名】Update.c / を
/* 【ファイル名】Update.c */ に訂正します
>>197 /* たとえば、i = 0 + COUNT + 0 + … + 0 + COUNT + 0 + COUNT + 0 */
/* たとえば、i = 0 + COUNT + COUNT + 0 + COUNT + 0 */
208 :
名無しさん@夢いっぱい:2009/10/07(水) 02:50:05 ID:7dvkJOtM
C言語で確率ってほんとに上がるの?
>>185 ありがとうございます。
iCount() の一致する個数をカウントする部分が良く分らないのですが、
ポインタと構造体が分かっていなければこれ以上の説明は無理でしょうか?
#define COUNT 1 /* 【ファイル名】mymain.c */
#include <stdio.h> /* 【コンパイル】bcc32 -emymain mymain.c iCount.c */
#include "iCount.h" /* 【実行】mymain */
sLine s; /* グローバル変数としてsを確保した。cBall[1]〜cBall[43]は、グローバル変数であり0に初期化された */
int iCount(char *, sLine *);
int main(void) {
int i;
char c[6] = {1, 4, 19, 28, 34, 40};/* 記憶対象(記憶内容を表示する) */
char cS[6] = {2, 4, 19, 27, 34, 41};/* 調査対象(記憶対象と一致した個数を表示する) */
sLine *p = &s; /* ポインタpはsをさす */
p->cBall[ c[0] ] = COUNT; /* #define COUNT 1 */
p->cBall[ c[1] ] = COUNT; /* cBall[1]〜cBall[43]のうち、存在するボール1個をカウント */
p->cBall[ c[2] ] = COUNT;
p->cBall[ c[3] ] = COUNT;
p->cBall[ c[4] ] = COUNT;
p->cBall[ c[5] ] = COUNT;
p->pPrev = NULL; /* このプログラムは実験用であり、ノードは1個のみであり、双方向リストを形成しない */
p->pNext = NULL;
for(i = 1; i < 43; i++)
printf("%d", p->cBall[i]);/* cBall[1]〜cBall[43]の記憶内容を表示した */
i = iCount(cS, p);/* i = 0 + COUNT + COUNT + 0 + COUNT + 0(cBall[2], cBall[3], cBall[5]の3個が1) */
printf("\n\niCount = %d\n", i);/* 記憶対象と一致した個数を表示した */
return EXIT_SUCCESS;
}
D:\work\subset>mymain
100100000000000000100000000100000100000100
iCount = 3
D:\work\subset>
212 :
210:2009/10/11(日) 16:27:39 ID:qQt2n5Gg
>>210 i < 43を
i <= 43に訂正します
>>209 D:\work\subset>mymain
1001000000000000001000000001000001000001000
.↑ ↑第六のボールの41は0だから一致していないことがわかる
第一のボールの2は0だから一致していないことがわかる
>>210-213 詳しい解説を本当にありがとうございます。
比較処理部分の高速化に興味がありました。
石豆さんのmallocは自分が使っている低級言語にはないから流用できないし。
正直に言うとレベルが違いすぎて他にもまだ分らない部分が
ありますが時間をかけて勉強するつもりです。
215 :
名無しさん@夢いっぱい:2009/12/08(火) 23:54:55 ID:hg/GMEDN
有料の競馬予想とかでも思うけど、そんなに儲かるのなら
自分だけでやっとけよって話だよなw
217 :
名無しさん@夢いっぱい:2009/12/15(火) 18:24:15 ID:PIdaTgAB
/スヽ、.. -─…‐| |´ ̄` 、
//.:,`'´ ヽ\::::::.. \
,〈〈::/ / \>.、:::::.. \
,.' .:/ | .:.:.| \::\::::::.. \
/ .::/ ', .:.:.:ト _.二ニ ヽ‐\::::::.. \
/ .:::/ /\::::::::|'´ x≧、、:::::::::::Yl|´\::::::.. \
/ .::::: ! :| ィ´ ̄\::| f{、ハ '}ヽ:::::::::[I|J V⌒ヽ,、. \
/ .::::::::::| ,{:.:.:.:.: |ィにヾ ` ヾツ |::\:::Ll \./ \ \
/ .::::::::::/|,' ∨ ::小. ヾり , |:::::∧|‐,x / \ \
/ .::::::::::/ ∨:::|∧ 、-、 .|::/ / ヽr'´ \ ヽ
. / .:::: :/ \|:::::ゝ.,..__ ,.ニ´ / |/_ `二.¬、 ヽ :.',
/ .:: / ',:::::::/ ミ.彡'ニ.´___〉 ヽ´ ` ァ>、 ', :::i
. / .: / ヽN / マ |、 |\ // \ |. ::|
/ : / | ',. 、 トヘ | \ | | ハ |
. / ,′ | , ,コ. ヽ \. \ゝ---┬─┬r'´.:::::. !
/ . ! ! 、/ / \ \\ ヽ / .:::::/ノ .:::::::::リ
. / : .: | ', 〈_/ \ \` <}/.:::/ ..::::::::::::/
/ :::. | \ \ \ ト . ` く ...::::::::::::::,.'
. ′ :::::.. ', \ |\ l. \ \::::::::/|
| . :::::::::...... ヽ、 く_ソ \ \ |:::\ \´.::::!
| :: ::::::::::::::::::::::..`..− .__ `ーr‐' ヽ. \::::::::.', ヽ::/
|:::::: ::::: `ヽ、_ / ̄ >' \ ` 、 l }′
|:::::::... :... ハ  ̄ ̄ \ `丶 ._ノ_
Y:::::::::::::::::::::.......... ::.... __ _. -┴‐∨ \ ヽ `ヽ
ヽ::::::|:::::::::::::::::::::::::::::::::::::::', ,ニ=-──\ / \ }
. \lー----─- 、:::::::::::::∨ ヽ \ _ / \ ヽ、 ヽ
ヽ:::::::::「 } \,∠ -`ヽ/ ヽ.__',\ |
',:::::::| ┌‐'───----- __ノ / / ヽ. ノ
| :::ー| __. -‐ _ノ / |`ー-ァ'´
,' ,厶::: |‐ ' ´ ____,} /_. -r‐.‐} ∨
ノ'´ }:::.7⌒ ー、-‐'´ ∨ _,. -'´ ,′V-─〉
|/ ヽ マ´ /___/
477回 12 14 16 18 38 41 (17)
>>58の設定ファイルで
From 180605 # 表示を開始する行番号
Repeat 180605 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
12 14 16 17 18 41
D:\work>
2等だ!
2009年9月17日(
>>178)以来、3か月ぶりだ。
219 :
名無しさん@夢いっぱい:2010/02/12(金) 00:50:17 ID:2om3AiXo
ポインタでまた挫折。
833 :-:2010/02/11(木) 20:12:42 ID:UNpU/La+
>>753のようなレスを毎回見るので
前スレ794から
>>643までの今回の晒し2748口が
3等以上に当せんする確率
(全6096454通りのうち、この2748口のどれかと5個以上数字が
一致するものを数え上げる)を求めたところ
547554/6096454 = 約8.98%であることが分かった。
この処理は何秒くらいかかるのでしょうか。
手元のソフトだと0.1秒も掛からないから不思議。
220 :
-:2010/02/12(金) 23:54:42 ID:J9EV4bLJ
2分くらいだったと思う。
484回結果 13 19 25 29 32 35 (42)
>>58の設定ファイルで
From 54968 # 表示を開始する行番号
Repeat 54968 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
13 25 29 32 35 42
D:\work>
2等だ!
2009年12月24日(
>>218)以来、約2か月ぶりだ。
>>220 石豆さんが応えてくれたの2年ぶりくらいかな
やっぱり何か処理を大幅に省く方法があるのかもしれません
485回結果 14 26 30 33 34 39 (19)
>>58の設定ファイルで
From 98274 # 表示を開始する行番号
Repeat 98274 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
14 19 30 33 34 39
D:\work>
連続で2等だ!
491回結果 07 09 20 27 31 34 (33)
>>58の設定ファイルで
From 119022 # 表示を開始する行番号
Repeat 119022 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
07 09 20 27 31 33
D:\work>
2等だ!
497回結果 06 12 14 17 36 40 (34)
>>58の設定ファイルで
From 2893 # 表示を開始する行番号
Repeat 2893 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
06 12 17 34 36 40
D:\work>
2等だ!
506回結果 05 11 21 27 37 39 (26)
>>58の設定ファイルで
From 109762 # 表示を開始する行番号
Repeat 109762 # 反復する回数
に変更したら
D:\work>mtntor mtntor.ini
05 11 21 27 37 39
D:\work>
1等だ!!
>>117 >>160 >>163につづいて、1等は四回目だ。