2009年11月23日月曜日
ナンバープレース
新聞に毎週ナンバープレースと言うゲームが載っています。試しに解いてみたらプログラム化出来そうなので作ってみました。NumAを呼び出すときに引数を渡さなければ下記のnumbが問題とされます。引数ととして9x9の整数配列を渡す事も出来ます。いずれにしても回答が帰ります。途中結果の表示の箇所はコメントで無効化しています。これをJSPで読み出して使っています。まだ保管が出来ないので改造する予定ですが、、、ペーストして見たらインデントが消えていました。見づらいですけど編集も面倒なので。。
public class NumA {
static int[][] numb = {
{1,0,0,2,4,0,0,0,0},
{2,0,8,0,0,6,3,0,0},
{6,0,0,0,3,0,4,0,5},
{0,0,0,0,0,5,0,6,0},
{4,7,0,0,9,0,0,1,3},
{0,3,0,8,0,0,0,0,0},
{7,0,2,0,8,0,0,0,9},
{0,0,9,4,0,0,5,0,8},
{0,0,0,0,6,7,0,0,2}};
public static void main(String[] args){
int[][] numr = new int[9][9];
int i,j;
//問題の配列を表示
for (i=0; i<9; i++){
System.out.print("\n");
for (j=0; j<9; j++)
System.out.print(numb[i][j]+",");
}
NumA num = new NumA();
numr = num.NumA(numb);
//答えの配列を表示
for (i=0; i<9; i++){
System.out.print("\n");
for (j=0; j<9; j++)
System.out.print(numr[i][j]+",");
}
}
public int[][] NumA(int[][] numb){
int[][] numr = new int[9][9];//解析用
int[][] numc = new int[9][9];//変化の比較用
int[][][] result = new int[9][9][9];
int[] judg = new int[10];//判定用の配列 [9]が評価数値、0は要推定 [0~8]に1-9を入れて比較
int[] mark = new int[10];//判定用のマーク
int count = 0;//loopカウンター
int b,c;
int m,n;
int i,j,k;
//問題の配列をコピー
for (i=0; i<9; i++)
for (j=0; j<9; j++)
numc[i][j] = numr[i][j] = numb[i][j];
//問題の配列を表示
// for (i=0; i<9; i++){
// System.out.print("\n");
// for (j=0; j<9; j++)
// System.out.print(numr[i][j]+",");
// }
//評価
do{
//結果の配列をクリアー
for (i=0; i<9; i++)
for (j=0; j<9; j++)
for (k=0; k<9; k++)
result[i][j][k]=0;
for (m=0; m<9; m++){//行を指示
for (n=0; n<9; n++){//列を指示
judg[9]= numr[m][n];//判定用の配列judg[9]に評価数値を代入
if (judg[9] == 0){//評価数値が0なら判定作業
for (i=0; i<10; i++)//判定用のmark[0..9]に0-9を入れる
mark[i] = i;
//行判定
for (i=0; i<9; i++)//判定用の配列judg[0..8]にnumrの行を代入
judg[i]=numr[m][i];
for (i=0; i<9; i++)//数値が有ればmarkの該当位置に0を入力
if (judg[i] != 0)
mark[judg[i]]=0;
//列判定
for (i=0; i<9; i++)//判定用の配列judg[0..8]にnumrの列を代入
judg[i]=numr[i][n];
for (i=0; i<9; i++)//数値が有ればmarkの該当箇所に0を入力
if (judg[i] != 0)
mark[judg[i]]=0;
//ブロック判定
int bx = m/3;
int by = n/3;
for (i=0; i<9; i++)//判定用の配列judg[0..8]にnumrのブロックを代入
judg[i]=numr[bx*3+i/3][by*3+i%3];
for (i=0; i<9; i++)//数値が0が有ればばmarkの該当箇所に0を入力
if (judg[i] != 0)
mark[judg[i]]=0;
//推定される数値の数が1なら確定
j=0;
for (i=0; i<10; i++)//マークの空白=0以外を数える
if (mark[i] != 0){
result[m][n][j]=mark[i];
j++;
}
if (j == 1){//確定
numr[m][n]=result[m][n][0];
// System.out.print("\ndecidea:"+ m +":"+ n +"/"+numr[m][n]);
}
}//判定
}//n-loop
}//m-loop
//結果表示
// for (i=0; i<9; i++){
// System.out.print("\n");
// for (j=0; j<9; j++)
// System.out.print(numr[i][j]+",");
// System.out.print("..");
// for (j=0; j<9; j++)
// for (k=0; k<9; k++){
// if (result[i][j][k] != 0)
// System.out.print(result[i][j][k]+".");
// }
// }
//変化をチェック
b=c=0;
for (i=0; i<9; i++)
for (j=0; j<9; j++){
if (numc[i][j] == numr[i][j])
c++;
if (numr[i][j] == 0)
b++;
}
//今回の結果をコピー
for (i=0; i<9; i++)
for (j=0; j<9; j++)
numc[i][j] = numr[i][j];
// System.out.print("\nm,c,b="+m+","+c+","+b);
}while((count++ < 100) && (c != 81));
return numc;
}
}
public class NumA {
static int[][] numb = {
{1,0,0,2,4,0,0,0,0},
{2,0,8,0,0,6,3,0,0},
{6,0,0,0,3,0,4,0,5},
{0,0,0,0,0,5,0,6,0},
{4,7,0,0,9,0,0,1,3},
{0,3,0,8,0,0,0,0,0},
{7,0,2,0,8,0,0,0,9},
{0,0,9,4,0,0,5,0,8},
{0,0,0,0,6,7,0,0,2}};
public static void main(String[] args){
int[][] numr = new int[9][9];
int i,j;
//問題の配列を表示
for (i=0; i<9; i++){
System.out.print("\n");
for (j=0; j<9; j++)
System.out.print(numb[i][j]+",");
}
NumA num = new NumA();
numr = num.NumA(numb);
//答えの配列を表示
for (i=0; i<9; i++){
System.out.print("\n");
for (j=0; j<9; j++)
System.out.print(numr[i][j]+",");
}
}
public int[][] NumA(int[][] numb){
int[][] numr = new int[9][9];//解析用
int[][] numc = new int[9][9];//変化の比較用
int[][][] result = new int[9][9][9];
int[] judg = new int[10];//判定用の配列 [9]が評価数値、0は要推定 [0~8]に1-9を入れて比較
int[] mark = new int[10];//判定用のマーク
int count = 0;//loopカウンター
int b,c;
int m,n;
int i,j,k;
//問題の配列をコピー
for (i=0; i<9; i++)
for (j=0; j<9; j++)
numc[i][j] = numr[i][j] = numb[i][j];
//問題の配列を表示
// for (i=0; i<9; i++){
// System.out.print("\n");
// for (j=0; j<9; j++)
// System.out.print(numr[i][j]+",");
// }
//評価
do{
//結果の配列をクリアー
for (i=0; i<9; i++)
for (j=0; j<9; j++)
for (k=0; k<9; k++)
result[i][j][k]=0;
for (m=0; m<9; m++){//行を指示
for (n=0; n<9; n++){//列を指示
judg[9]= numr[m][n];//判定用の配列judg[9]に評価数値を代入
if (judg[9] == 0){//評価数値が0なら判定作業
for (i=0; i<10; i++)//判定用のmark[0..9]に0-9を入れる
mark[i] = i;
//行判定
for (i=0; i<9; i++)//判定用の配列judg[0..8]にnumrの行を代入
judg[i]=numr[m][i];
for (i=0; i<9; i++)//数値が有ればmarkの該当位置に0を入力
if (judg[i] != 0)
mark[judg[i]]=0;
//列判定
for (i=0; i<9; i++)//判定用の配列judg[0..8]にnumrの列を代入
judg[i]=numr[i][n];
for (i=0; i<9; i++)//数値が有ればmarkの該当箇所に0を入力
if (judg[i] != 0)
mark[judg[i]]=0;
//ブロック判定
int bx = m/3;
int by = n/3;
for (i=0; i<9; i++)//判定用の配列judg[0..8]にnumrのブロックを代入
judg[i]=numr[bx*3+i/3][by*3+i%3];
for (i=0; i<9; i++)//数値が0が有ればばmarkの該当箇所に0を入力
if (judg[i] != 0)
mark[judg[i]]=0;
//推定される数値の数が1なら確定
j=0;
for (i=0; i<10; i++)//マークの空白=0以外を数える
if (mark[i] != 0){
result[m][n][j]=mark[i];
j++;
}
if (j == 1){//確定
numr[m][n]=result[m][n][0];
// System.out.print("\ndecidea:"+ m +":"+ n +"/"+numr[m][n]);
}
}//判定
}//n-loop
}//m-loop
//結果表示
// for (i=0; i<9; i++){
// System.out.print("\n");
// for (j=0; j<9; j++)
// System.out.print(numr[i][j]+",");
// System.out.print("..");
// for (j=0; j<9; j++)
// for (k=0; k<9; k++){
// if (result[i][j][k] != 0)
// System.out.print(result[i][j][k]+".");
// }
// }
//変化をチェック
b=c=0;
for (i=0; i<9; i++)
for (j=0; j<9; j++){
if (numc[i][j] == numr[i][j])
c++;
if (numr[i][j] == 0)
b++;
}
//今回の結果をコピー
for (i=0; i<9; i++)
for (j=0; j<9; j++)
numc[i][j] = numr[i][j];
// System.out.print("\nm,c,b="+m+","+c+","+b);
}while((count++ < 100) && (c != 81));
return numc;
}
}
2009年9月23日水曜日
祝辞
就職したときの入社式のtop3人の挨拶です。
毎回同じことを話すらしいので聞いた方もいるかも知れません。
その1
会社が自分に合わないと感じたら・・
人生は長い、本人にも会社にも不幸、だから辞める事を。
その2
目の見えない人達が象にさわって、
ある人は鼻が長い、ある人は大きな足、ある人はざらざらの肌、
どれも当たっているがどれからも象のことは分からない。
こういうのを群盲象をなでると言う。
その3
水辺に馬を連れて行く事は出来るけれど
水を飲む呑まないは馬の意志。
聞いて肩の力が抜けました。
来年から年金生活になりますが、止めずに済んだのはこのおかげも有るかもです。
毎回同じことを話すらしいので聞いた方もいるかも知れません。
その1
会社が自分に合わないと感じたら・・
人生は長い、本人にも会社にも不幸、だから辞める事を。
その2
目の見えない人達が象にさわって、
ある人は鼻が長い、ある人は大きな足、ある人はざらざらの肌、
どれも当たっているがどれからも象のことは分からない。
こういうのを群盲象をなでると言う。
その3
水辺に馬を連れて行く事は出来るけれど
水を飲む呑まないは馬の意志。
聞いて肩の力が抜けました。
来年から年金生活になりますが、止めずに済んだのはこのおかげも有るかもです。
2009年9月18日金曜日
galileoの苦労話
galileoをdellのデスクトップにインストしてスイスイで気を良くして、ノート(think-pad)にも入れてみましたがvmのエラーが出て起動しません。メモリーが不足してるみたいですがdellは780M、tpは760Mで不足してるとも思えないし、滅多に見ないreadmeをみると256M有れば動くようです。でもあれこれ覗いて処置方法を発見。
以下が解凍して出来るeclipse.iniの中身です。最後の-Xmx512mを-Xmx256mにしたら立ち上がりました。pluginを追加していくとメモリ-不足が発現しないか心配です。
-startup
plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
3.2と違いdropinsと言うホルダーが出来てtomcatのプラグイン
com.sysdeo.eclipse.tomcat_3.2.1
はここに入れないとだめでした。
pluginsとfeatures、さらにdropins ・・区別が分かりません。
以下が解凍して出来るeclipse.iniの中身です。最後の-Xmx512mを-Xmx256mにしたら立ち上がりました。pluginを追加していくとメモリ-不足が発現しないか心配です。
-startup
plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
3.2と違いdropinsと言うホルダーが出来てtomcatのプラグイン
com.sysdeo.eclipse.tomcat_3.2.1
はここに入れないとだめでした。
pluginsとfeatures、さらにdropins ・・区別が分かりません。
2009年9月16日水曜日
strutsの苦労話
10年以上ぶりでプログラムを書きたいと思い、無料で配布しているものを物色しましたが、rubyにしようかjavaにしようかcにしようかはたまた。。といろいろ試して、どれも中途半端でダウンロードしたファイルの山がPCに溜まって。。結局eclipse3.2の本を借りたのでしばらく試して観ましたが、strutsが上手く動かず、そうこうしていたらガリレオが出てきました。それで性懲りもなくダウンロードして、ついでにtomcatも6にアップ。いつもは最新版は信用していないのですが、galileoは使ってみて使い勝手も安定性も3.2よりは格段に優れています。(何倍と言えませんが)。wtpで動くサーバーも安定しているしeclipse上で動くブラウザーも別に動いているファイアーフォックスもすいすいです。
で気を良くして・・@いう間にwebアプリを作れる・・を参考にstruts2に挑戦。2.1.6をDLしてtomcatのlibに必要ファイルを追加。参考ファイルをコピペして動かすと何か変。基本が分かっていないのでエラーメッセージを見ても何が変なのか良く分かりません。しばらくソースを眺めていたら”と"が間違えている事に気が付き修正して一件落着。日本語を挟む”が全角になっていてjspの解釈がエラーになっていました。この著者もtomcatとeclipseを推奨してますがOSは何を使っているのか分かりません。”が全角でもエラーにならない方法が有るのか・・不思議。フォントがTTになって画面上では半角か全角か判別が難しくなりました。
で気を良くして・・@いう間にwebアプリを作れる・・を参考にstruts2に挑戦。2.1.6をDLしてtomcatのlibに必要ファイルを追加。参考ファイルをコピペして動かすと何か変。基本が分かっていないのでエラーメッセージを見ても何が変なのか良く分かりません。しばらくソースを眺めていたら”と"が間違えている事に気が付き修正して一件落着。日本語を挟む”が全角になっていてjspの解釈がエラーになっていました。この著者もtomcatとeclipseを推奨してますがOSは何を使っているのか分かりません。”が全角でもエラーにならない方法が有るのか・・不思議。フォントがTTになって画面上では半角か全角か判別が難しくなりました。
2009年1月8日木曜日
QP
たまにはと言う事でモスに行きました。とびきりハンバーグサンド、の張り紙が目に付き食べてみました。国産牛のパテ90gが売り物です。ロッテリアの絶品チーズバーガー対策だと思いますがこちらはまだ食べていないので比較は書けません。モスのとびきりハンバーグサンドですが、バンズが弱い、パテが薄味、デミグラスソースが食べずらいで、ちょっとがっかりでした。このときマックのクオーターパウンダーの話題が出て、やらせの行列が出来た、と聞きました。買って即道ばたで食べてたから間違いなくやらせだよね、との事です。2年くらい前にQP(クオーターパウンダーの事)が食べたいけどアメリカまで食べに行く気はないし、と書きましたが、日本でも食べれる状況に感謝です。ビッグマックも同じようなパテの量ですが、食べやすさはQPに譲ります。ビッグマックは厚すぎます。今度QPを食べに行こうと思います。味の比較はその後で。
登録:
投稿 (Atom)