#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000
#define TEMOCHImax 25
// #define CARDTOTAL 100
#define JIJIN 1
#define TEKIJIN 2
#define KIDOKU 4
char buf[N], *ku[N];
int status[N];
// prototype
int getMaxCard();
int getNumbers(int);
int getMaxCard()
{
int i, t, max = 0, maxi = 0;
for (i = 0; ku[i]; ++i) {
if (status[i] == JIJIN) {
t = getNumbers(i);
if (max < t) {
max = t;
maxi = i;
}
}
}
// printf("%d %d %s\n", maxi, max, ku[maxi]);
return maxi;
}
int getNumbers(int i)
{
int j, k, r = 0, n;
char dmy[] = " ";
// printf("n=%d\n", n);
for (j = 0; ku[j]; ++j) {
if (status[j] == TEKIJIN) {
for (k
= 0; strncmp(ku
[i
] + k
, ku
[j
] + k
, n
) == 0; k
+= n
) { r++;
// printf("%s %s", ku[i], ku[j]);
}
}
}
return r;
}
int main()
{
int i, j;
FILE
*p
= fopen("hyaku.txt", "r");
// 1) 百人一首を一行31-32文字のひらがなでテキストファイルとして作っておく。
for (i
= 0; fgets(buf
, N
, p
); ++i
) { }
// 2) テキストファイルを読み取り、現在の 自陣(1-25枚) 敵陣(1-25枚)を決める。
i = TEMOCHImax;
while (i--) {
while (status
[j
= rand() % 100] & (JIJIN
+ TEKIJIN
)); status[j] = JIJIN;
}
i = TEMOCHImax;
while (i--) {
while (status
[j
= rand() % 100] & (JIJIN
+ TEKIJIN
)); status[j] = TEKIJIN;
}
// 3) 既に読まれた札数とその札を決める。
while (i--) {
while (status
[j
= rand() % 100] & (KIDOKU
)); status[j] += KIDOKU;
}
// 4) 設定した状況の元で、自陣の札のうち、敵陣に置かれた時に、敵陣札の中で
// 決まり字に至るまでの間に最も候補札数の多くなる札を選んで返し札とする。
// ただし最大候補札数の札が複数あった場合は、決まり字の文字数が大きい方、
// それでも決まらないときは乱数を使って選別することとする。
// for (i = 0; ku[i]; ++i) printf("%d", status[i]);
printf("\n返し札:\n%s", ku
[getMaxCard
()]);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojZGVmaW5lIE4gMTAwMAojZGVmaW5lIFRFTU9DSEltYXggMjUKLy8gI2RlZmluZSBDQVJEVE9UQUwgMTAwCiNkZWZpbmUgSklKSU4gMQojZGVmaW5lIFRFS0lKSU4gMgojZGVmaW5lIEtJRE9LVSA0CgpjaGFyIGJ1ZltOXSwgKmt1W05dOwppbnQgc3RhdHVzW05dOwoKLy8gcHJvdG90eXBlCmludCBnZXRNYXhDYXJkKCk7CmludCBnZXROdW1iZXJzKGludCk7CgppbnQgZ2V0TWF4Q2FyZCgpCnsKICBpbnQgaSwgdCwgbWF4ID0gMCwgbWF4aSA9IDA7CiAgZm9yIChpID0gMDsga3VbaV07ICsraSkgewogICAgaWYgKHN0YXR1c1tpXSA9PSBKSUpJTikgewogICAgICB0ID0gZ2V0TnVtYmVycyhpKTsKICAgICAgaWYgKG1heCA8IHQpIHsKICAgICAgICBtYXggPSB0OwogICAgICAgIG1heGkgPSBpOwogICAgICB9CiAgICB9CiAgfQogIC8vIHByaW50ZigiJWQgJWQgJXNcbiIsIG1heGksIG1heCwga3VbbWF4aV0pOwogIHJldHVybiBtYXhpOwp9CgppbnQgZ2V0TnVtYmVycyhpbnQgaSkKewogIGludCBqLCBrLCByID0gMCwgbjsKICBjaGFyIGRteVtdID0gIuOAgCI7CgogIG4gPSBzdHJsZW4oZG15KTsKICAvLyBwcmludGYoIm49JWRcbiIsIG4pOwogIGZvciAoaiA9IDA7IGt1W2pdOyArK2opIHsKICAgIGlmIChzdGF0dXNbal0gPT0gVEVLSUpJTikgewogICAgICBmb3IgKGsgPSAwOyBzdHJuY21wKGt1W2ldICsgaywga3Vbal0gKyBrLCBuKSA9PSAwOyBrICs9IG4pIHsKICAgICAgICByKys7CiAgICAgICAgLy8gcHJpbnRmKCIlcyAlcyIsIGt1W2ldLCBrdVtqXSk7CiAgICAgIH0KICAgIH0KCiAgfQogIHJldHVybiByOwp9CgppbnQgbWFpbigpCnsKICBpbnQgaSwgajsKICBGSUxFICpwID0gZm9wZW4oImh5YWt1LnR4dCIsICJyIik7CgogIC8vIDEp44CA55m+5Lq65LiA6aaW44KS5LiA6KGMMzEtMzLmloflrZfjga7jgbLjgonjgYzjgarjgafjg4bjgq3jgrnjg4jjg5XjgqHjgqTjg6vjgajjgZfjgabkvZzjgaPjgabjgYrjgY/jgIIKICBmb3IgKGkgPSAwOyBmZ2V0cyhidWYsIE4sIHApOyArK2kpIHsKICAgIGt1W2ldID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKGJ1ZikpOwogICAgc3RyY3B5KGt1W2ldLCBidWYpOwogIH0KICAvLyAyKeOAgOODhuOCreOCueODiOODleOCoeOCpOODq+OCkuiqreOBv+WPluOCiuOAgeePvuWcqOOBriDoh6rpmaMoMS0yNeaemikg5pW16ZmjKDEtMjXmnpop44KS5rG644KB44KL44CCCiAgaSA9IFRFTU9DSEltYXg7CiAgcHJpbnRmKCJcbuiHqumZo1xuIiApOwogIHdoaWxlIChpLS0pIHsKICAgIHdoaWxlIChzdGF0dXNbaiA9IHJhbmQoKSAlIDEwMF0gJiAoSklKSU4gKyBURUtJSklOKSk7CiAgICBzdGF0dXNbal0gPSBKSUpJTjsKICAgIHByaW50ZigiJXMiLCBrdVtqXSk7CiAgfQogIGkgPSBURU1PQ0hJbWF4OwogIHByaW50ZigiXG7mlbXpmaNcbiIgKTsKICB3aGlsZSAoaS0tKSB7CiAgICB3aGlsZSAoc3RhdHVzW2ogPSByYW5kKCkgJSAxMDBdICYgKEpJSklOICsgVEVLSUpJTikpOwogICAgc3RhdHVzW2pdID0gVEVLSUpJTjsKICAgIHByaW50ZigiJXMiLCBrdVtqXSk7CiAgfQogIC8vIDMp44CA5pei44Gr6Kqt44G+44KM44Gf5pyt5pWw44Go44Gd44Gu5pyt44KS5rG644KB44KL44CCCiAgcHJpbnRmKCJcbuaXouiqreaVsCA9ICIpOwogIHNjYW5mKCIlZCIsICZpKTsKICBwcmludGYoIlxu5Lul5LiL44KS5pei6Kqt44Go44GX44G+44GX44Gf44CCXG4iKTsKICB3aGlsZSAoaS0tKSB7CiAgICB3aGlsZSAoc3RhdHVzW2ogPSByYW5kKCkgJSAxMDBdICYgKEtJRE9LVSkpOwogICAgc3RhdHVzW2pdICs9IEtJRE9LVTsKICAgIHByaW50ZigiJXMiLCBrdVtqXSk7CiAgfQogIC8vIDQp44CA6Kit5a6a44GX44Gf54q25rOB44Gu5YWD44Gn44CB6Ieq6Zmj44Gu5pyt44Gu44GG44Gh44CB5pW16Zmj44Gr572u44GL44KM44Gf5pmC44Gr44CB5pW16Zmj5pyt44Gu5Lit44GnCiAgLy8g44CA44CA5rG644G+44KK5a2X44Gr6Iez44KL44G+44Gn44Gu6ZaT44Gr5pyA44KC5YCZ6KOc5pyt5pWw44Gu5aSa44GP44Gq44KL5pyt44KS6YG444KT44Gn6L+U44GX5pyt44Go44GZ44KL44CCCiAgLy8g44CA44CA44Gf44Gg44GX5pyA5aSn5YCZ6KOc5pyt5pWw44Gu5pyt44GM6KSH5pWw44GC44Gj44Gf5aC05ZCI44Gv44CB5rG644G+44KK5a2X44Gu5paH5a2X5pWw44GM5aSn44GN44GE5pa544CBCiAgLy8g44CA44CA44Gd44KM44Gn44KC5rG644G+44KJ44Gq44GE44Go44GN44Gv5Lmx5pWw44KS5L2/44Gj44Gm6YG45Yil44GZ44KL44GT44Go44Go44GZ44KL44CCCgogIC8vIGZvciAoaSA9IDA7IGt1W2ldOyArK2kpIHByaW50ZigiJWQiLCBzdGF0dXNbaV0pOwoKICBwcmludGYoIlxu6L+U44GX5pyt77yaXG4lcyIsIGt1W2dldE1heENhcmQoKV0pOwoKICByZXR1cm4gMDsKfQo=