「2011年7月」の編集履歴(バックアップ)一覧に戻る

2011年7月 - (2011/08/22 (月) 19:50:19) のソース

堀江伸一
兵庫県加古川市加古川町南備後79-16





*2011/8/9


http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0030&lang=jp
0030 Sum of Integersを解くコード。
短くて早いコードを目指してすこしだけ工夫してみた。
うーん探索空間が狭く一瞬でコードが終わるため早くなったのかよくわからない。


#include<stdio.h>
int main(){
	int m[12][50]={0};
	int c,s,p,j;
	for(int i=0;i<1024;i++){
		j=c=s=0;
		p=i;
		while(p>0){
			if(p&1==1){
				c++;
				s+=j;
			}
			p=p>>1;
			j++;
		}
		m[c][s]+=1;
	}
	scanf("%d %d",&c,&s);
	while(c!=0 || s!=0){
		if(c>10 || s>45){
			printf("0\n");
		}else{
			printf("%d\n",m[c][s]);
		}
		scanf("%d %d",&c,&s);
	}
}
[[ガンパレードマーチ北海道に対する感想]]


*2011/8/22
カッシーニの卵線形を双曲線から作図できるということは。
双曲線上の点が無限遠点に到達するときカッシーニの卵線形が原点に戻る。
ということは楕円からカッシーニの卵線形を作図しても出来る図は原点を通ることはない。
ということをあらわしてんだな。
2次曲線とカッシーニの卵線形の間には円の反転にもにた性質を持っているということか。
この図形の幾何的性質を勉強したいけど、時代の通過点に過ぎない中途半端な数学なので現代で勉強しようと思っても書籍が見当たらないような感じ。
何かいい本あるのかな?

2次曲線の性質に適切な写像を適用するとカッシーニの卵線形の性質を知ることが出来る?
ということかな?
http://6504.teacup.com/aozoram/bbs/?


*2011/8月適当
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0033
0033 Ballを計算時間 1データセット当たり 10*定数で解くコード。
全探索しても1024通りしかないので全探索してもいいのだけど、帰納法による奇麗な解法を考えついたのでこちらを優先した。

#include<stdio.h>
int main(){
	int r,l,f,n,i,j,b;
	
	scanf("%d",&n);
	for(i=0;i<n;i++){
		r=l=f=0;
		for(j=0;j<10;j++){
			scanf("%d",&b);
			if(b>r) r=b;
			else if(b>l) l=b;
			else{
				f=1;
			}
		}
		if(f==0){
			printf("YES\n");
		}else{
			printf("NO\n");
		}
	}
}



*2011/8/15
機械のように精密に。
というのは漫画だと悪役の属性だったり良くないことのように言われるけれどこれは大事な能力だと思う。
機械のように精密に考えたり行動できるからこそ、精密な機械を生み出せたのは重要だ。
機械のように精密に考えることができるというのは重要な能力の一つだと思う。

直観や感覚や大体でわかるというのや感情というのは、精密な思考より高等な能力に分類されるだろうけど、だからといって機械のように精密に
、というのの重要性が下がるわけでもない。

人間は直観や感性や感覚を磨く方が重要だという議論は、車で一番大事なのはエンジンだからエンジン以外改良を考えなくていいというのに近い。
どれも大事だというだけの話にすぎない。

精密に細かく考えることができるからこそ、現実の難しい問題に細かく対処したり、現実に対し我が意を通すことができるわけだ。
ただ機械のように融通が利かないというのは困る。

機械のように精密に考えることができるというのをどう使う、どう応用するか。
賢く利用するということが大事となる。
機械のように精密に考えることができる能力を、縦横自在に使いこなし、機械と違って柔軟にそれを運用できる。
というのは世を渡るに置いて大事なことなのだと思う。


学生の勉強について思うこと。

数学の場合、計算問題などは適度にできる程度がよく、問題を解く時なぜこう考えるのか、なぜこう解くと上手くいくのかを説明できる能力を高める方が重要。
問題集なども具体的な計算は一つもせず、答えの欄に解法の考え方だけを掲載した本があってもいいはず。

英語の場合、現行の教科書では量が足りない。
頭の中に言語に対する一つのモデルを作り出すには膨大な量の学習量が必要であり、それは量をこなすことと、効率的な文法学習の二つを組み合わせない限り得られない。

人間の無意識というのはよくできているもので、量をこなすことで、習ったことを全てを無意識が組み合わせて勝手にルールを見つけ出すのだがこの時量が少ないと組み合わせの臨界点に到達しない。
まず学生に英語を覚えさせたいなら量を増やすことである。

しかし無意識が見つけ出したルールは誤ってる場合もあり、そこは文法ベースできちんと学習させなくてはいけない。
習うべき文法も量を増やさなくて無意識が学習できない。

英語による会話は、慣れの問題であり、英語の読み書きと全く違う部分の脳を使って行われる。
そこを鍛えないと会話は難しい。
学生同士で簡単な会話を英語で行うくらいの練習は必要だと思う。


英語に置いて確実に覚えさせるために、ひたすら量を減らすという方向に教科書は向かったが、これは無意識の学習にとって最悪の方法である。
意識が確実に覚えた、狭い範囲の学習結果を完璧に到達させても、学習量が少ないために応用も融通もきかないということになる。
英語は量である。




*2011/8/6
中国風パチモンゲーム

プヨプヨ積み上げ。
プヨプヨなどのゲームは大体消すのが目的だし、そのために積み上げる。
でもこれを逆に考えて、プヨを積み上げるという目的でゲームを作った場合どうなるか?
ぷよぷよでは賢く積まないと消えないので、難易度を下げて消えやすくする必要が出てくる。
具体的にいえばプヨが3匹で消えたり、ぷよが2色だったりするわけだ。
こうなると積み上げることにもゲーム性が出てくる。

ただ積み上げるだけでは、面白くない。
多少の工夫が必要だ。

-1 積み上げという形で操作の結果が残るので、ミスしてもある程度許容されるバランスが必要(最初でミスってそれが最後まで尾を引くなんていうのでは必要とされる先読み能力が高すぎる)
-2 ある程度賢く操作すれば、自然と積み上がる程度のバランスが理想
-3 積み上げた部分がユーザーの操作で変化するほうが面白い、積み上げた部分が盤石だとゲーム画面を無駄に占有してしまう
-4 3を満たすためには画面の縦横マス数は小さい方がよい(後半積み上がった状態で考えることが増えないようにするため、先が読みやすいシステムが必要でそのために画面は小さい方がよい)
-5 プレーヤがきちんと盤面を合理的に操作でき、何手か先が読める合理的な選択システムが必要(そうでないとパズルとして成り立たない)

1~5までを勘案する時、どんなシステムがよいかということだ。
暫定的なアイディアとしてプヨプヨと同じ画面で、下から盛り上げていくシステムなど良いのではないかと思う。

- 一番下のマスにプヨを追加し、追加された列のみ最下段に新しいプヨが追加され、その列のもといたプヨは一つずつ上にあがっていく。
- 画面上のプヨの配置か色を入れ替えることができる

暫定的にこの2種類のアイディアのバリエーションなど良いのではと思う。





*2011/8/4
私の地元加古川駅中に賞をとったおいしいパン屋があるのです。
パンの形が奇麗なのもさることながら油の使い方が絶妙。

これ以上油が多いとギトギト、少ないとぱさぱさ、その中間の絶妙な油の量で食べやすい。
組み合わせも面白いのですよ。

その一つにトマト揚げパンなるものがありまして、カレーパンのカレーの代わりにトマトを挟んであげたパンなのです。
カレーパンはおいしい、王道です。
ただおしいかな、カレーと揚げパンというダブル油ギトギトがどうしてもネックなのです。
トマト揚げパンはこれを克服。

みじん切りオニオンと酢で味付けされたトマトのさわやかな酸味と水分が揚げパンの油っぽさを中和。
なんともさわやかでおいしい味付けなのです。
他にもおいしいパンが色々あるのですがどれもこれもおいしい。

所で山崎パンってなんかまずいよね。
あれはまずいよなあ。


2011/7/25
ゲームの記号性? 
ゲームのなかで記号化されていて結果が一意に定まる場合は、余計な演出などなくさくさく操作できる方がうれしいなあ。 
例えばシミュレーションゲームで戦闘結果が一意に定まる場合は映像を飛ばしたいし、調合などは選択したら余計な演出なく一瞬で終わる方がうれしい。

演出がうれしいのは数回目まで、その数回目を過ぎたら後は結果の決まりきった記号になる。 
一過性の結果となる演出でも決まり切った記号になり飽きるまでの回数が多い演出はうれしい。

演出途中に操作による分岐があるなら演出は大事だ。 
こういうものは、ドラマティックな演出や疑似体験といったものと並列して扱うべきだ。 
でないなら記号として即座に操作できるレスポンス性の高さを重視して欲しいなあ。

人間は多分記号を操作する時は0.1秒でも素早く操作したいという欲求がある。
擬似体験や高度な演出や操作の分岐が関わる時だけレスポンスが悪くても、演出が長くても耐えられる。

なんというか上手く表現できない、かゆい所に手が届かない感じ。









2011/7/13
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0066
リンク先を解くコード。
人生で初めてハッカーぽいコードが書けた。
ハッカーを小中高大学に例えるならハッカー小学一年生ってレベルかな。
条件判断をもう少し縮められる?

#include<stdio.h>

int main(){
	char m[10],k;
	int s[]={0,1,2,0,3,6,0,2};
	int d[]={3,3,3,1,1,1,4,2};
	while(scanf("%s",m)!=EOF){
		k='d';
		for(int i=0;i<8;i++){
			if((m[s[i]]&m[s[i]+d[i]]&m[s[i]+2*d[i]])=='o'){
				k='o';
				continue;
			}
			if((m[s[i]]&m[s[i]+d[i]]&m[s[i]+2*d[i]])=='x'){
				k='x';
				continue;
			}
		}
		
		printf("%c\n",k);
	}
}

上記コード小学生でもしない間違いを犯している。
同じ計算を2度もしているのは間抜けなので修正。
これで小学校のテストなら△が○になったというところかな。
しかしこれよりもさらに短くできるらしい。
どうやってんだろ?

#include<stdio.h>

int main(){
	char m[10],k,t;
	int s[]={0,1,2,0,3,6,0,2},d[]={3,3,3,1,1,1,4,2};
	while(scanf("%s",m)!=EOF){
		k='d';
		for(int i=0;i<8;i++){
			t=m[s[i]]&m[s[i]+d[i]]&m[s[i]+2*d[i]];
			if(t=='o' || t=='x'){
				k=t;
				break;
			}
		}
		printf("%c\n",k);
	}
}

さて上記コードを掲示板で質問したらこんなコードになって帰ってきた
一応私なりに短くする工夫を付加している。

main(i,t,b,c){char *s="3331114201203602",k,m[9];for(;gets(m);){k='d';for(i=0;i<8;){t=m[b=s[i+8]%8]|m[c=b+s[i++]%8]|m[2*c-b];k=(t&18)<17?t:k;}printf("%c\n",k);}}
少し変態チックなコードになっている(誉め言葉)がまだまだだな。
縦横斜めを単純に調べるという素朴なチェック方法ではこの辺がコード短縮の限界だと思う。
素朴な方法でなくもう少し賢いチェック方法を導入できればもう10文字は短くなると思う。
一部コンパイラでしかコンパイルが通らないというのはご愛嬌。




*2011/7/15
永遠に生きるミミズ。
そんなものが小説にいたとしてたいしたことはない。
生物学的興味の対象になっても、小説世界に何の意味も与えないだろう。
永遠に生きる鶏というのがいたとしてもたいしたことはない。
せいぜい鶏のイデアだ。
永遠に生きるチンパンジーがいたとしても群れをちょっと賢く率いる程度で倫理的意味でも社会的意味でも小説的にたいしたことはない。

これが永遠に生きる人間となると、小説などでいきなり悪者になったり、求めること自体が間違いのようになってしまう。
少し不思議である。
人間からみて永遠に生きるチンパンジーがたいしたことをなしえない存在であるように、人間より賢い存在からみれば永遠に生きる人間など永遠に生きるチンパンジーと大差ないのにである。
これはちょっと不思議な扱いだなあと思う。
小説の話だけど。


*2011/7/16
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2191
うーんこの問題を解くコードを愚直に実装してみたもののポカミスが怖くて投稿ができない。
せめて東京大学のサイトが復活してテストデータさえ手に入ればなと思う。
生半可なテストデータでテストしたくらいじゃあ、永遠に挨拶が続くパターンを検証しきれない。
テストデータを作るのも、テストデータによる検証なしで通る一発でプログラムをかけるのも実力のうちだと思うが3流高卒のおいらにそんな難しいことは出来ない。
徹底的にテストデータで検証してから投稿したいし正答率は下げたくない。

http://www14.atwiki.jp/c21coterie?cmd=upload&act=open&pageid=446&file=2191ABookShopWithaFrequentGreetings3.txt


*2011/7/18
地球防衛軍の続編がアメリカ産で出るらしい。
買いかな?
地球防衛軍といえば3はかなりの神ゲーにして糞ゲーだった。

なにせ、大挙して迫りくる巨大生物の群れ圧倒的な攻撃力と速度。
こいつら相手にあまり役立たない歩兵部隊を引き連れて敵を倒すゲームなのだが。
味方の火力は弱くあまりあてにならず死ぬ時は一瞬で壊滅する味方というよわっぷり。

主人公の武器と行ったら、大群を相手に一発打つと次弾発射に時間のかかるスナイパーライフルでちまちま倒す。
近場の巨大生物に誤射してあてでもしたら爆風で主人公が即死になるバズーカ。
あまり命中率も射程もよくなく威力も少し頼りないマシンガン。
迫りくる大群に発射するには爆風の威力が頼りないグレネード。
どう使えばいいのか全く使い道が分からない貧弱武器、火炎放射器敵に囲まれているというのに射程も威力も短すぎる武器でどうしろと?
使い道がよくわからない地雷。
あっという間に壊れて威力も頼りない巨大人型兵器ベガルター。
地上攻撃がとても難しく紙装甲、地上からの攻撃で一瞬で落ちるヘリ。
一回攻撃を喰らえばHP半減戦車。
主人公に従う弱い味方歩兵部隊。


そして理不尽な最高難易度の敵の攻撃力と速度、弱い武器のバランス、ちょっと間違えれば即座に敵に囲まれ瞬殺される主人公。
糞ゲーである。

しかしこのゲーム、理不尽を跳ね返す工夫を始めた途端、ゲームバランスが一変する。
ステージに合わせて武器を選び、武器にあったトリッキーな戦い方を選択。
戦闘中の移動経路を適切にきめ、敵を罠に誘い込み、敵を賢く散らし、味方をおとりに使い、バグ的に存在する安全地帯を探しだす。


的確に近距離から長距離までの敵をリズムよくほ振っていくスナイパーライフル。
敵の大群を爽快に吹きとばし、敵増援ポイントを気持ちよく吹き飛ばせるバズーカ。
敵の群れを牽制するのに便利なマシンガン。
敵の大群を的確に吹っ飛ばし敵増援拠点を効率よく破壊、道を切り開くグレネード。
敵の大群を足止めするのに便利な火炎放射器。
設置型爆弾の森に敵を誘い込み一気に爆弾で殲滅する快感。
敵の大群の中蹴散らしながら悠然と進み、時に敵の巨大ロボとタイマンを張って次々ほふっていく超強力巨大人型兵器ベガルター。
地上の敵を安全に悠々自適と叩きまくり爆弾を投下し敵を撹乱し敵カッコ撃破の要となるヘリ。
地上における最高の足にして機動戦闘の要、戦車。

という工夫ひとつで頼もしい味方に支えられた神ゲーになるのである。


さてこんな地球防衛軍だが。
その本質は油断すると一瞬でやられるドキドキ感と、理不尽を工夫で覆す詰将棋的快感にある。
この要素がきちんと継承されているなら、相手が巨大生物でなかろうとも買いだ。
全く違うゲームシステムや、新しいゲームバランスがゲーム内で提案されていたとしてもそれも買いである。

新作は新しい方面を開拓したか、はたまた順当に本質を継承したのか。
楽しみ。