2014年4月9日水曜日

どうも電算機部です

今年度も今日から長岡高専電算機部の活動が始まりました.
・昨年度は全国高専プログラミングコンテストにおいて準決勝進出
・パソコン甲子園において全国大会出場
・情報オリンピックにおいて敢闘賞受賞
と部員の活躍が目立ちました.
今年度においても新たに1年生を迎え活躍を期待したいところです.

2013年1月25日金曜日

新年会??

今日は少し遅いですが新年会的なものを開催しました。
長岡高専の電算機部ではPCに向かってばかりなので、
やはり1年に1回は開催していってほしいところです。
部活で食事というのはやっぱり楽しいものですね♪
きっと来年もしてくれるよね|д゚)チラッ

2012年10月17日水曜日

プロコンについてくわーしく

えぇーとまぁ先に部長が書いてますが、全然内容がないのでちゃんと
書いてしまおうとね、そういうわけです。
去年はこんなこともしなかったけども言いたいことがあったりして
今年はなんだか文章を書くのが進んでしまいます。

結果は予行練習1位、1回戦4位、敗者復活4位と・・・
まぁ勝ちたかったけどしょうがないしょうがない。。。。。

さてはて
うちの長岡高専はどんなことをしていたのかというと、

4月
競技部門の課題が判明。
そのときのうちの部活の反応
「え、これ無理じゃね。」
「俺たち画像検出とかしたことないけど。」
「もう目視しかないんじゃねwww」
と、まぁこんな感じで、なにをすればいいのかもわからない感じで
なんだかんだいって1ヶ月終わってしまう。

5月
さて何もわからないなりに何かしてみよう
ってなことでいつもしている数字いじりをはじめる。
と言っても数字と言ったら総重量しかわからないじゃんか。
てことで3つの変数をもった1つの式から答えを出そうと
無理なことをひたすら模索・・・・
んで結局は
5.6a*1.3b*0.3c=total
というもう解がとんでもないことになる式を使って
組み合わせを出して絞り込むことに力を注ぐことに。

6月
やばい、テストしなきゃーとか言って
言い訳をしながらなかなか開発が進まない・・・
部長がDXライブラリでいけるんじゃねとかいって
やってはみていたが断念。。。
ここにきて公式からのQ&Aが公開。
「え、目視いいのかよwww」
「このカーペット邪魔だろ。」
「サイコロの誤差きつい。サイコロは高専で作らないのかよ。」
と、競技公開と同じような衝撃事実がたくさん出てくる。

7月
ここにきてopenCVなるものを使ってみようと提案。
しかーしここに来て問題が・・・
その問題は
・普段活動している学校のパソコンにopenCVが仕様上インストールできない
・openCVどころかvisual stidioすらいつも使っていないのに無理!!
・今から勉強して使えるのか
とまぁなんだか根本的にOUTな問題が・・・・ね。
ですが環境自体はなんとかUSBから読み込むってことでどうにか回避して
残りはまぁやるしかないだろってことで勉強をはじめる。

8月・9月
ここにきて大体画像をいじったりすることは
普通にできるようになる。
しかし、どうやって個数を数えたらいいのかわからずじまい・・・・
こんなんでいいのかと言いながらも夏休みに入り開発は凍結。。。。。

10月
もうあと数日でプロコンだということで
めちゃくちゃ焦り始める。
ここにきて部長がなんとサイコロの目を検出して数をかぞえる的な
アルゴリズムをかなりのスピードで書き始める。やぁびっくりww。
僕はと言うと、サイコロ画像認識をさせるプログラムにまっしぐらで、
サイコロの画像と、それ以外のオブジェクトの画像を集めては作り、
やり直しと、なかなかにうまくいかなくて、暗礁に乗り上げるどころか、
暗礁に沈んじゃってましたwww

プログラミングコンテスト前日
結局のところ
部長のサイコロの目からの検出+謎の式からのアプローチ
サブとして、目視+サイコロ画像認識
的な感じでしかいけないなと。

当日
予行練習をしてみる。
まず
・オブジェクトってあんな大きいのがしかも真ん中にドカンと置くのか
・サイコロ不自然じゃないか
・テーブルの上の影が異常なほどで2値化に影響
と、運営はやってくれましたよ。ええ今年も。
てなことで、対応するために2値化の仕様変更、謎の式アプローチの強化
目視のウエートをちょっと重くした。

1回戦
なかなかAフィールドの数値は良かったんだけども、
Oフィールドの数値が全然だめで
敗退してしまいます。
ここでの敗因は中のサイコロの数がかなりずれていたので
謎の式からでてくる小の数が200個を超えていたにもかかわらず、
それを解答としてしまったこと。
要するに画像からうまく検出しきれなかったという話。

初日の夜
まず、部長はサイコロの目の検出がもっと正確にできないと駄目だということで
デスマを開始。
僕はというと
まず初日の試合の公式解答をデータ化。そこから
謎の式を用いた組み合わせ表示をより正確なものに。
ここでは敗者復活仕様として50以上200以下のサイコロのときの組み合わせから
色々処理をしてかなりの精度まで引き上げ。
かーらーの
オブジェクト排除をより強化して、影の影響もそこまで出ないようにして
サイコロ検出器も強化を図る。
ちなみに目視をしていた方はお早めに寝ています。

敗者復活戦
1回戦はやだなーと思いつつ競技場へ
競技をしてみると
4位で敗退。
敗因はやはりAフィールドでの大の数がよくとれなかったこと。
まわりは人力なのかそうでないのかは知らいけど
うちはあくまでプログラムを使って競技したかった。
目視は補助でそれ以上でも以下でもない。

優勝は宇部高専さんでしたね。
去年も久留米の解答を見て真似るという離れ業をしていたので
ある意味納得です。
でも今回のプロコンは運営が
甘すぎたと思います。
せめて6月のQ&Aで人力を禁止するか。
当日の競技で鏡面や、人力では処理しきれない数千単位の個数など
もっとプログラミングコンテストになるための工夫をする必要があったと思う。
だからといってうちの部が勝てるかと言われたら微妙ですがwwww
きっと他高専さんならプログラミングでももっといい戦いができたはず。
なんともいえない競技部門でしたがいい勉強になってよかったです。

2012年10月15日月曜日

プロコン行ってきました!

10月13,14日に福岡県大牟田市の大牟田文化会館でプロコンが行われました.
電算機部からは競技部門に3人出場しました.
結果は予行演習1位,1回戦4位,敗者復活戦4位でした.

まぁ,今回はうん,あれです.もういろいろありすぎて.
結論からして,

人間>>>>>超えられない壁>>>>>機械

ということが証明されちゃいました.
決勝に出たチーム全部が人力で数えていて,プログラミングしてたのがバカみたいでしたね.

来年は北海道の旭川らしいので参加する人はがんばってください.

2012年10月2日火曜日

今日は

あんまり皆して色々やってるもんだから圧倒されてしまった。
感動だった。

皆続けてくれたらいいなあ。

2012年9月1日土曜日

文発行ってきました!

第37回 関東信越地区文化発表会が小山高専が主管校のもと小山市立文化センターで開催されました.
電算機部からは自分を含め6人が参加してきました.

文発班が4月から作ってきた作品を無事に展示することができ本当に良かったです.

文発班の方,本当にお疲れ様でした!

2012年7月10日火曜日

みんな暑そうだなー

どうも初めまして。かつおでございます。
今回僕の作成したちょっとシュールな時計プログラムを
紹介したいと思います。


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
/* 数字&記号用アスキーアートを作成 */
char num0[5][7]={"000000",
"00  00",
"00  00",
"00  00",
"000000" };

char num1[5][7]={" 111  ",
"  11  ",
"  11  ",
"  11  ",
"111111" };

char num2[5][7]={"222222",
"    22",
"222222",
"22    ",
"222222" };

char num3[5][7]={"333333",
"    33",
"333333",
"    33",
"333333" };

char num4[5][7]={"44    ",
"44 4  ",
"44 4  ",
"444444",
"   4  " };

char num5[5][7]={"555555",
"55    ",
"555555",
"    55",
"555555" };

char num6[5][7]={"666666",
"66    ",
"666666",
"66  66",
"666666" };

char num7[5][7]={"777777",
"77  77",
"    77",
"    77",
"    77" };

char num8[5][7]={"888888",
"88  88",
"888888",
"88  88",
"888888" };

char num9[5][7]={"999999",
"99  99",
"999999",
"    99",
"999999" };
char num_colon[5][7] =
{"  **  ",
"  **  ",
"      ",
"  **  ",
"  **  " };
char num_slash[5][7] =
{"    **",
"   ** ",
"  **  ",
" **   ",
"**    " };

int i; /* ループカウンタ */
char *nump[12]; /* 各アスキーアート数字へのポインタ */
time_t t;                             /*時間を一時的に保存*/
struct tm *ltime;                 /* tm構造体へのポインタ */
int year; /* 西暦 */
int mon; /* 月   */
int mday; /* 日   */
int hour; /* 時   */
int min; /* 分   */
int sec; /* 秒   */
int oldsec=0; /* 一回前の秒数 */

/* 各アスキーアートの先頭アドレスをポインタ配列に格納 */
nump[0] = num0[0];
nump[1] = num1[0];
nump[2] = num2[0];
nump[3] = num3[0];
nump[4] = num4[0];
nump[5] = num5[0];
nump[6] = num6[0];
nump[7] = num7[0];
nump[8] = num8[0];
nump[9] = num9[0];
nump[10] = num_colon[0];
nump[11] = num_slash[0];

while(1){
while(sec == oldsec){
t = time(NULL);
ltime = localtime(&t); /* localtime()でstruct *tm型に変換 */
sec  = ltime->tm_sec;
}
system("cls");            /*スクリーンクリア*/
year = ltime->tm_year;
mon  = ltime->tm_mon + 1; /* tm_monは 0~11 */
mday = ltime->tm_mday;
hour = ltime->tm_hour;
min  = ltime->tm_min;
oldsec = sec;

/* 西暦(下2桁)、月、日 を表示 */
printf("\n");
for(i=0;i<=4;i++){
printf("%s %s ",nump[year / 10 % 10]+ i*7, nump[year % 10]+ i*7);
printf("%s ",nump[11]+ i*7);
printf("%s %s ", nump[mon / 10]+ i*7, nump[mon % 10]+ i*7);
printf("%s ",nump[11]+ i*7);
printf("%s %s ", nump[mday / 10]+ i*7, nump[mday % 10]+ i*7);
printf("\n");
}
printf("\n");
/* 時、分、秒 を表示 */
for(i=0;i<=4;i++){
printf("%s %s ", nump[hour / 10]+ i*7, nump[hour % 10]+ i*7);
printf("%s ",nump[10]+ i*7);
printf("%s %s ", nump[min / 10]+ i*7, nump[min % 10]+ i*7);
printf("%s ",nump[10]+ i*7);
printf("%s %s ", nump[sec / 10]+ i*7, nump[sec % 10]+ i*7);
printf("\n");
}
}
return 0;
}

このコードを実行すると何とも言えないシュールな時計が出来上がります。。。

2012年6月17日日曜日

ある整数列からランダムに整数を取り出す。

去年卒業しましたたまのびです。

このブログってOB投稿ありですかね?問題があれば削除してください。

~重複しないように乱数を得る方法~

 整数について乱数を作成すると、数が重複する場合があります。巡回セールスマン問題の巡回経路を決定するときなど、重複する場合問題が発生する場合があります。そんなときにはこれ!!
/*************************************************
関数 :undupRnd(min,max,dest,n)
機能 :最小値min,最大値maxの整数列の中からn個だけ
    無作為に取り出し配列destに格納
戻り値:destの先頭アドレス
備考 :rand()関数を内部で使用
*************************************************/
int *undupRnd(int min,int max,int *dest,int n){
	int i;
	int *array;
	int size = max - min +1;
	if( NULL == dest ){
		fprintf(stderr,"格納先が不正[%s:%s]\n",__FILE__,__LINE__);
		return NULL;
	}
	if( size < n ){
		fprintf(stderr,"取り出す数が取り出す範囲より大きい[%s:%s]\n",__FILE__,__LINE__);
		return NULL;
	}
	if( NULL == (array = (int*)calloc(size,sizeof(int))) ){
		fprintf(stderr,"配列が確保できない[%s:%s]\n",__FILE__,__LINE__);
		return NULL;
	}
	//勢数列の配列を順番に。
	for(i=0;i<size;i++){ array[i] = i+min; }
	
	for(i=0;i<n;i++){
		int index = rand()%(n-i);
		dest[i] = array[index];//抽出
		array[index] = array[n-i-1];//上書き
	}
	free(array);
	
	return dest;
}

簡単にC言語プログラミングしてみました。

実際にコンパイルして使ってみてください。重複しない整数乱数列を生成できます。

このアルゴリズムは至極簡単なものです。

  1. 連続する整数列(取り出す対象)を配列に確保する
  2. 乱数を用いて取り出す要素の添え字を決める
  3. 取り出して格納する。
  4. 取り出した要素を配列の端っこの要素で上書き(これで同じ値は取り出されなくなる)
  5. 次に添字を選ぶときは範囲を1だけ狭める(これで同じ値は取り出されなくなる

4と5によって同じ値が取り出されるのを阻止しています。

関数中での引数nとsize(max-min+1)が等しい(n=size)のとき、この関数は整数を無作為に並び替える機能を持つと言えます。こう考えると用途は広がりそうですね。どんどん使ってみてください。

2012年4月24日火曜日

2012年電算機部始動です。

てすと てすと

引き継ぎ忘れててすいません。

桑原

2011年11月27日日曜日

OpenGLによる3Dシミュレーション

3Dシミュレーションのプログラムってあまり需要ないんですかね?
2Dのものは多く存在するんですけどね。
OpenGLによる3D万有引力シミュレーションプログラムを作成しました。ソースコード載せます(NYSLライセンス)。
ソースコード
プログラム(実行にはglut.dllが必要)
4次のルンゲクッタ法によってシミュレーションを行なっています。
シンプレクティック法を用いてないので、エネルギーが発散してしまいます。
プログラムでは、3つの物体が動いています。 実は、万有引力だけが働く3物体の挙動というのは一般に解析的解けないことが知られています。(特殊な条件下では解析的に解ける)
解析的に解けないことがコンピュータシミュレーションによって、数値的に解けるんです。
少しすごいと思いませんか?
「5年になるとこんなこともできちゃうよ」という報告でした。

2011年6月8日水曜日

遅くなりましたが

6月7日に作成したブラックジャックのソースコードを乗せておきます。
関数化出来る人は、やってみてください。



#include<stdio.h>
#include<stdlib.h>

int main()
{
int pcard=0, ccard=0, ncard;
char yesno;
/*
型 変数名 変数名の意味 変数の意味
int pcard player_card プレイヤーのカードの合計値を保管
int ccard CPU_card CPUのカードの合計値を保管
int ncard now_card 一時的な値の保管用変数
char yesno yesかnoかの入力を保管
*/

/*rand関数を使う為に書く*/
srand((unsigned)time(NULL));

/*プレイヤーの番*/
/*1~13の値をncardに保存*/
ncard = rand()%13+1;
/*ncardが11、12、13の時は、10として扱う*/
if(ncard == 11||ncard==12||ncard==13)ncard=10;
/*pcardにncardを加算*/
pcard += ncard;
while(1){
printf("いまのカードは%dです\n",pcard);
puts("もう一回引きますか? y/n");

do{
scanf("%c",&yesno);
/*エンターキーを入力として受け付けないようにする*/
}while(yesno=='\n');

/*もう引かないときはループを抜ける*/
if(yesno=='n')break;
/*もう一枚引く*/
ncard = rand()%13+1;
if(ncard == 11||ncard==12||ncard==13)ncard=10;
pcard += ncard;
/*21を超えてしまったらループを抜ける*/
if(pcard>21)break;
}

/*NPCの番*/
while(1){
/*16を超えたらもう引かない*/
if(ccard>16)break;
ncard = rand()%13+1;
if(ncard == 11||ncard==12||ncard==13)ncard=10;
ccard += ncard;
}

/*勝敗判定*/
printf("あなたのカード合計%d\n"
"NPCのカード合計%d\n",pcard,ccard);
if(pcard>21 || ((pcard < ccard)&&(ccard<=21)) )puts("負け");
else puts("勝ち");
return 0;
}

2011年4月15日金曜日

たまのびです。
最終学年となった今、僕の頭には多くの情報、知識が詰まっています。
今年度の僕の課題は、僕の持っている情報や知識、ノウハウをできるだけ多く低学年に残すことです。
置き土産とでもいいましょうか。そんなイメージです。

話は変わりますが、先日見慣れない学生が部活に参加していました。
聞いた話によると、その人は電子制御工学科4年生に編入してきた学生だそうです。
C言語に慣れていないのか、ひたすらC言語を教えてもらっていました。
意欲的な学生は応援したくなります。
知識がなくても情熱や意欲のある学生は伸びるはずです。

次は、毎年話題になる新入部員の数の話です。
僕の見た限りでは今年度入部してくれる人は少なそうです。
少し寂しいですね。
一年生に関しては少数精鋭主義で進めます。

2011年4月12日火曜日

ソースコードでも

電算機部村長たまのびさんに怒られてしまいましたので、

去年の夏休みに作った、桜の花びらを舞い散らせるプログラムsakura.exeと、

桜の中を一人の侍がゆくプログラムairily.exeを置いておこうと思います。

あと、それぞれのソースも置いときます。

侍はそこまで大したものではないですが、桜は結構頑張りました。

コンパイルは、BCCを使ってください。
makesamurai.batが、airily.exeの為のバッチファイル、
makesakura.batが、sakura.exeの為のバッチファイルです。

以下のファイルをダウンロードし、カレントディレクトリをこのファイルにしてください。

なんか、ダウンロードしづらいですが、右クリックから新しいウィンドウを表示 にすると落とせるみたいです???

2011年4月10日日曜日

久しく。

電子制御工学科5年のたまのびです。

新年度が始まりました。
去年度は大変な事件と災害がありました。
事件で心を痛めている方、被災された方に謹んでお見舞い申し上げます。

長岡高専が所属する国立高等専門学校機構では、東日本大震災義援金を募集しております。
詳しくは長岡高専のこちらの公式ページを御覧ください。

私も募金しました。他の学生も募金しているようです。
ご協力ください。

ついに私は最終学年を迎えました。
2年前まで電算機部部長を務めていた身としては、部員も増えて嬉しい限りです。
5年生となった今C++言語を学ぶ必要が出てきました。
少し古いサイトですが、現在C++の学習でお世話になっているサイトを紹介します。
C++入門
丁寧に基本的事項が述べられています。プログラミング初心者でも分かりやすいと思います。
参考にしてください。

話は変わりますが、今年度新入生に配るチラシの作成を担当しました。ボツ案も含め載せておきます。
左上の物が採用されたものです。部長が全種類どこかに貼ってくれることを期待しています。





新入生へのチラシを作るのもこれで最後と思うと少し残念です。
今年度は、電算機部と私が精進できる年度であることを祈っています。

2010年10月25日月曜日

CUI小技

黒地に白い文字がお馴染みのコマンドプロンプト、CUI画面ですが、"COLOR"コマンドを使うと、背景色や文字色を変更することが出来るんですよ!


"COLOR [第一引数][第二引数]"で設定することが出来ます。引数は16進数1文字で引数の間はスペース入れません。

2つの引数をスペースを入れずに並べて入力し、第一引数は背景色、第二引数は文字色となります。引数が1つのときは、文字色が変更されます。
よく参考書などで見かける白地に黒い文字の設定は"COLOR F0"です(結構目が疲れますが...

詳しくは"color ?"で分かります。
さらに細かい色の設定はプロパティで弄れます。

2010年10月21日木曜日

今後の活動について

今後の部活の活動時間変更のお知らせ
活動日を毎週 月・火・木 に変更します
木曜日の活動開始時間を授業終了後すぐに変更します
その他、活動場所、終了時間は今まで通りとします.

活動日以外は休むのも良いですが、図書館などで積極的に情報収集、趣味などに費やしてもらいたいです。

運動会

先日(10/20)に学校の体育祭(運動会)が開催されました。

今年から、「部活動対抗リレー」が競技に追加されました。
走る距離は、75[m]が4人とアンカー300[m]ですが、運動部と文化部を一緒に戦わせるというかなり鬼な競技でした。
案の定、運動部にあっさり負けた訳ですが、なんとパフォーマンス賞を獲得しました(写真無くてゴメンナサイ)
走ってくれた3年生&1年生の人ありがとうございました!!

余談
話によると、部費が貰えるそうですが・・・
個人的には、部費より部室の方が欲しかったんだけどなー

プロコン

報告遅くなりましたが、第21回全国高等専門学校プログラミングコンテストに出場してきました。
私たち、電算機部は競技部門で出場してきました。

非常に残念な結果となってしまいましたが、これを教訓にこれからの活動に生かしていきたいです。
以下は問題点の一部
プロジェクト
  • メンバーのコミュニケーションが十分に取れなかった
  • 設計、コーディング、デバッグの期間の設定が間違っていた
プログラム
  • データの扱い方が異なっていた
  • それぞれの関数の機能などの説明が足りなかった
  • エラーの出現箇所が特定しにくい、または特定できなかった

個人的に、勉強不足、経験不足な部分が多くあり、メンバーに迷惑をかけてしまった・・・
来年度参加するかは分からないけれど、開発の協力が出来るようになりたい

2010年9月18日土曜日

文発

第35回目の文発(関東信越地区文化発表会)が木更津高専が主管校のもと木更津市民会館で開催されました。
私たち電算機部も無事(?)に展示を終える事ができてホッとしています。
他高専との交流などもあり充実した3日間になったと思います

普段とは違った集団行動の中でのマナーや、気配りなど発表以外でも様々な経験をすることが出来たと思います

文発本当にお疲れ様でした!!

2010年9月7日火曜日

人工知能

みなさん、こんにちは。
文化部発表会まであと1週間となりました。
文発班の開発は順調のようです。

人工知能を知っていますか?
現在IRCチャット上で動いている「うずら」という人工知能を発見しました。
人工無能うずら(人工痴能,!人工知能) uzura is AI(Artificial Intelligence)?
チャット上で人間の発言から学習を重ね、人間らしい会話をするというプログラムです。(なかなかに会話が成立します)
今では、プログラム上で現実世界の一部を再現(シミュレート)する試みが行われています。
人工知能は、人間の知能を人工的に再現するものです。
複雑な人間の知能を解析することは非常に困難です。
もし、プログラムで人間の知能を再現できれば、いつしか「ドラえもん」のような存在が現れるかもしれませんね。
私も一度コンピューターと世間話をしてみたいです。