yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2017/11 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
国債に引当金を設定しては
2006/07/13(Thu)21:14:21
 少し以前の話になりますが、ここまでのびのびになっていたので、ここで。
 水谷建設問題。水谷建設が土地の売買を偽装、あるいは貸付後の貸し倒れを偽装し、法人税を圧縮していた問題です。なかなか重要な問題ではあるのですが、手口は巧妙なようで、さっぱり分からない人も多いのでは。当サイトは水谷建設にせよ堀江氏にせよ犯罪者はかばいませんから、少し解説を。
 土地の売却についてはほとんどの人の想像通りです。1億で購入した土地を8億と見せかけ、後に2000万円で売却したとして7億を隠蔽。8億円から土地代金の1億円を引いた差額の7億はダミー会社に流し、それを自社に流し込むというマネーロンダリングのような手法を用いていました。ライブドア同様、巧妙な手口です。
 これはつまり、まず土地を8億円で購入し(たと見せかけ)ます。この土地の帳簿上の価値は8億になります。ここで、例えば土地の価値が暴落すれば「評価損」が計上されますし、また売却を行って損失を出せば「固定資産売却損」が生じます。この売却損は費用ですから、結果として利益を圧縮することになります。
 もう1つの「貸し倒れ」についても。資金を貸し付けたり、掛けや手形などの債権を持っている相手が倒産した場合、これは「貸し倒れ」になります。こちらは話として少し複雑です。先に銀行が増益になった理由について、貸倒引当金が不要になり、大量の戻し入れがあったためとしましたが、概念がなかなか複雑です。
 水谷建設のケースとはあまり関係なさそうですが、貸し倒れについては「当期にはこの程度発生するだろう」と予想し、「貸倒引当金」と呼ばれる費用をあらかじめ債権から控除、拠出しておきます。すると、貸し倒れが予想の範囲内で起きている限り、貸倒引当金から損失分の費用を出せば良いことになります。
 銀行の場合、必要ないだろうと言わんばかりの引当金を用意していたため、企業だけ景気回復し、倒産可能性が減ることで、引当金が大幅に不要になってしまったのです。で、そうして費用として捻出した分を戻し入れた結果、戻し入れ分は収益とみなされるため、利益が水ぶくれしてしまったという。
 今回のケースに関しては、意図的にダミーの貸し倒れを引き起こさせ、資金が回収不能になったと見せかけて損失を計上すれば、利益が圧縮されます。しかも、貸し倒れはダミーですから、実際に資金を拠出した上で還流させればバレにくい上に裏金が手に入ります。
 最近の手口といったら巧妙なことで。ライブドアの場合は商のプロが考えた手口であり、村上ファンドの場合はそこは元役人、今回のケースも政治家がかんでいる可能性があるとか。

 次、先制攻撃論。安倍氏らはどうもこういうのがお好きなようで、「敵ミサイル基地攻撃論」を出し始めました。ほら来た。北朝鮮の水鉄砲に対してロケットランチャーで対抗しようと言い出すバカども、いつも必ず出現するのです。「北朝鮮」を言い出せば、反対派は反論できないだろうと考えてタカをくくっています。
 現実問題として、防衛権による敵ミサイル基地攻撃というのは不可能です。相手がミサイルを撃つことが明白であり、その情報を手にすることができ、そのミサイルの場所が分かり、しかも相手がミサイルを撃つという差し迫った危険(言い換えれば「こちらが攻撃しなければ必ず撃たれていた」という事実)があることを国際社会に証明できる状況でミサイル基地を叩けば、これは政府見解では確かに「防衛権」にみなされるでしょう。
 では、現在このようなことが可能なのか。防衛利権屋には残念ですが、今のところ無理です。まず「ミサイルを撃つことが明白」かどうかですが、相手の意思を見分けるのは至難の業です。撃つとしても訓練であったり、日本とは全く別の方向に撃つ場合もあります。実は撃つつもりがない場合もあります。要するに、ミサイルを撃たれることが明白な場合に攻撃するのでない限り、これは日本語で「先制攻撃」といいます。しかも「ミサイル撃たれる」とでっち上げれば嫌いな相手を自由に攻撃できるので便利です。
 次に、相手がミサイルを撃つとして、その情報は本当に得られるのか。イラクに大量破壊兵器があるなどと称して攻撃を仕掛けた挙句、実際には何もなかったという詐欺連中を見ての通りでしょう。日本だけの情報網では無理ですし、米国の情報網もこういう具合です。無理と結論する他ありません。
 さらに、本当にミサイルを撃たれかねない状態で攻撃を仕掛けたとして、差し迫った危険を国際社会に証明できるかどうか。相手が北朝鮮のようなならず者国家なら、表立って弁護する国はまだ少ないでしょうが、いくら自分らで納得して攻撃を仕掛けても、国際社会に対して脅威の証明ができなければ、それは先制攻撃の蛮行です。
 米国でさえイラクにほとほと手を焼いて困っています。国民からの支持は冷え込み、開戦時には国際社会は分裂しましたが、現状では世界で最も重要な国たる米国でもこういう具合です。日本などがこれを行っても、他国にとって日本は米国ほど重要ではないのですから、とっとと見捨てられる可能性が大きいことになります。
 脅威論をでっち上げればいくらでも相手を攻撃できるものが「先制攻撃論」でなくて一体何なのでしょう。先制攻撃論を持つなら持つで内心の自由ですが、許せないのは安倍氏の「先制攻撃ではない」のような言い訳です。正々堂々やる気があるなら「これは先制攻撃論の一種だ。私はこれを政策として行うことを公約する」と堂々と言えばいいのです。
 その言葉を聞いた上で、国民が反発すれば、いくら尊大な連中といえども軌道修正なり何なりを余儀なくされるでしょうし、逆に国民が支持するようなら、それによって日本が壊滅しようがそれは国民の意思です。許せないのは「先制攻撃ではない」という大嘘です。

 Perlをもう少し使ってみたり。Perlを完全に極めようとすれば、たぶん3度ほど人生やり直さなければなりません。それほど裏技が多い言語です。さて、本日は「関数のプロトタイプ宣言」他、サブルーチンについていくつか。
 何とPerlではサブルーチンをプロトタイプ宣言することができます。しかし、そのスタイルといったら分かりづらいの何の。例えば
sub func($){
	print "func:$_[0]";
}

$arg = "Java";
func($arg);
 こうなります。この場合、引数としてスカラ変数を1つ取ることを意味するようです。しかも引数を渡さなかったりするとエラーになります。
 プロトタイプを使う際に気をつけたいのはサブルーチンの位置。サブルーチンが呼び出し箇所より下にあると、プロトタイプが有効になりません。そこで、サブルーチンは別モジュールにするなり先頭にまとめて書くなりするか、あるいは
sub func($);

# ...

sub func($){
	print "func:$_[0]";
}
 のようにあらかじめ先頭でC風にプロトタイプ宣言をしておくようにします。
 引数プロトタイプの書き方は、スカラ2つなら「$$」、配列なら「@」や「%」になるのですが、ご存知の通りPerlでは引数そのものが配列ですから、途中で配列変数が出たら配列を全部吸い取ってしまいます。
sub classes(@$){
	# 引数自体が配列であるため、意図通りに動作しない
	# ちなみに渡ってくる引数は	
	# $_[0] = Knight , $_[1] = DualKnight , $_[2] = ArcParadin
}

classes(("Knight" , "DualKnight" , "ArcParadin"));
 こういう場合、プロトタイプなしの場合には参照を使うなどして折り合いをつける場合が多いのですが、
sub equip{
	my @equips = @{$_[0]};
	my $name = $_[1];
	print "$name\n\nEquips:\n";
	foreach(@equips){
		print "$_\n";
	}
}

# 配列の参照を渡す
@array = ("Large Sword" , "Blue Armor" , "Gantlet");
&equip(\@array , "Sara");
# もしくは
&equip(["Large Sword" , "Blue Armor" , "Gantlet"] , "Sara");
 プロトタイプ宣言をした場合、配列をそのままポンと渡しても大丈夫です。その場合、プロトタイプの引数にはバックスラッシュを付加し、「\@」のように記述します。すると、配列を自動的に参照として渡してくれます。
sub equip(\@$){
	my @equips = @{$_[0]};
	my $name = $_[1];
	print "$name\n\nEquips:\n";
	foreach(@equips){
		print "$_\n";
	}
}

@array = ("Large Sword" , "Blue Armor" , "Gantlet");
equip(@array , "Sara");
 ごく簡単です。ただ、参照という性質からか、配列の宣言をそのまま引数として渡す(「equip((配列の要素) , "name")」のような使い方)ことはできませんでした。
 引数の宣言としては、意味が広く知られているであろう$%@の他、それらの頭に\をつければ参照型になり、また*でハンドル、&でサブルーチンへの参照を渡せるそうです。また、基本的に引数の渡し方は宣言通りでなければエラーになりますが、「;」以後の引数は「任意」の意味となり、デフォルト引数や可変引数のようなのも作れます。
# A.ハンドルの例

sub output(*$){
	my $hand = $_[0];
	print $hand $_[1];
}

output(STDOUT , "string");
# たぶんファイルハンドルなど他のハンドルでもOK

# B.引数の省略
sub character($$;$){
	print "名前 : $_[0]\n";
	print "クラス : $_[1]\n";
	if($_[2]){
		print "得意な魔法 : $_[2]\n\n";
	}
}

# 魔法を使えるキャラは3つ目の引数を記入できるが...
character("Ilias" , "Revolution Witch" , "All");
character("Shein" , "ArcParadin" , "Recovery");

# 引数の3つ目はセミコロンの後にあるため、省略できる
character("Sara" , "DualKnight");

# C.デフォルト引数(Bの応用)
# 文字列 , カラー , サイズ。文字列以外の引数は省略できる
sub string($;$$){
	my($str , $color , $size) = @_;

	# 未定義ならデフォルト値のセット
	if(!defined($color)){
		$color = "#000000";
	}
	if(!defined($size)){
		$size = "3";
	}

	print "$str";
}

string("文字列" , "#FF0000" , "2");
string("文字列" , "#0000FF");
string("文字列");

# D.可変引数
sub args($$;@){
	my $name = shift;
	my $class = shift;
	my @array = @_;
	print "名前 : $name\n";
	print "クラス : $class\n";
	print "諸データ:\n";
	foreach(@array){
		print "$_\n";
	}
}

args("サーラ" , "デュアルナイト" , "大剣" , "重鎧" , "兜");
# printf のようにいくらでも引数を取れる
 ではここで問題です。例えば次のようなサブルーチンがあるとします。
sub character{
	print "名前 : $_[0]\n";
	print "クラス : $_[1]\n";
	print "LA : $_[2]\n";
	print "MR : $_[3]\n";
}

@chara = ("サーラ" , "デュアルナイト" , 1720 , 0);
&character(@chara);
 Perlの引数は配列ですから、このように配列を渡して引数とすることができます。実用的な場面としては、あるサブルーチンの引数をそのまま他のサブルーチンに引き渡すような場合、「&routine(@_)」という構文が良く用いられます。上の例をそのように改造すると、
sub character{
	print "名前 : $_[0]\n";
	print "クラス : $_[1]\n";
	print "LA : $_[2]\n";
	print "MR : $_[3]\n";
}
sub call_character{
	&character(@_);
}

@chara = ("サーラ" , "デュアルナイト" , 1720 , 0);
&call_character(@chara);
 こうなります。では問題ですが、このcharacterクラスについて、プロトタイプ引数を付加することにしました。
sub character($$$$){
	print "名前 : $_[0]\n";
	print "クラス : $_[1]\n";
	print "LA : $_[2]\n";
	print "MR : $_[3]\n";
}
 すると、今までのコードが動作しなくなってしまうのではないでしょうか。
 とまあ、当然そういう懸念が出てくるわけですが、Perlとは上手くできています。なんと先頭に&をつけたサブルーチンの呼び出しにはプロトタイプを適用しないのです。
 ですから、今までの記述は当然有効ですし、今後このサブルーチンをプロトタイプを適用して呼び出したい場合には「character($arg0 , $arg1 , $arg2 , $arg3)」のように&なしで呼び出せば良いのです。このように、プロトタイプのあるサブルーチンは&記号の有無で動作が変わるため、注意が必要です。ただし、知っていると極めて便利です。
 関数式の呼び出しなら、プロトタイプで指定さえしっかりしておけば、自動的に配列を参照として渡してくれたり、引数チェックを行ってくれるなど、サブルーチンを使いやすくすることができます。サブルーチン式呼び出しの場合には、「プロトタイプのせいでこれまでのコードが動かなくなる」ようなことは回避できますし、引数をそのまま他のサブルーチンに渡すなど、(ルールさえ分かっていれば)便利に使うことができます。

 ついでにもう1つ、サブルーチンへの参照について。これ、関数ポインタのようなものと解釈すべきなのでしょうか。
// C/C++の関数ポインタ
int test(int i){
	return i;
}

int (*p)(int) = test;
int i = (*p)(100);

// PHPの可変関数
$name = "functionname";
$name("args");
 とにかくやってみるとしましょうか。
sub routine{
	print $_[0];
}

$sp = &routine("arg");

&{$sp};	# 呼び出し
 なるほど、これぞまさしく関数ポインタです。ということは、デリゲートも作れるわけですか(引数はポインタ生成時に作るのであり、呼び出し時に設定することはできないようですから、厳密には違いますが。そんなことをするならeval使えばいい、とは言わないお約束)。しめしめ。
# 擬似デリゲート
sub ilias{
	print "Revolution Witch\n";
}
sub sara{
	print "Dual Knight\n";
}

{
	package Delegate;
	sub new(){
		bless([] , shift);
	}
	sub add(&){
		my $this = shift;
		push(@$this , $_[0]);
	}
	sub call(){
		my $this = shift;
		foreach(@$this){
			&{$_};
		}
	}
}

$d = Delegate->new;
$d->add(\&ilias);
$d->add(\&sara);
print "called:\n";
$d->call;
 この辺りが限界でしょうか。いや、特殊変数を使えば、もしかして
sub classes{
	print "Classes : $_[0] : $_[1]\n";
}
sub status{
	print "Status : $_[0] : $_[1]\n";
}

{
	package Delegate;
	sub new{
		my $pack = shift;
		bless([] , $pack);
	}
	sub add(&){
		my $this = shift;
		push(@$this , $_[0]);
	}
	sub call(@){
		my $this = shift;
		foreach(@$this){
			&{$_};
		}
	}
}

$d = Delegate->new;
$d->add(\&classes);
$d->add(\&status);
print "called:\n";
$d->call("サーラ" , "デュアルナイト");
 動いてしまいました
 それから、予約されているサブルーチンについても。何やらPerlでも、デストラクタらしきものが使えるようなのです。少々やってみますか。
{
	package Destruct;
	sub new{
		print "オブジェクトを生成します\n";
		return bless({} , shift);
	}
	sub DESTROY{
		print "オブジェクトを破棄します\n";
	}
}

sub routine{
	my $obj = Destruct->new;
}

print "Routine Start\n";
&routine;
print "Routine End\n";
 ガベージコレクト時に呼ばれるものと考えられます。それほど使いどころがあるわけではありませんが、ないよりマシでしょう。C++のデストラクタは(確保したメモリを解放するなど)ものすごく使用頻度の高いものでしたが、Java以降はガベージコレクトが大体標準化されていて、デストラクタ(実際には「ファイナライザ」か。ガベージコレクトでは任意のタイミングにオブジェクトが破棄するため、明示的なnull代入などでなければ呼ばれる時期が保証されない)の使用頻度も少なくなっています。

 ところで、Encode::Guessなどでは「use Encode::Guess ("shiftjis" , "euc-jp")」のような使い方が認められています。これ、自分でもできたら便利そうなのですが、一体どうすれば使えるのでしょうか。しばらくコードを見回った末、以下のようにしてみました。
# CGI File
use Packed("Sara" , "Harden" , "Shein" , "Shelley");

&Packed::namelist;

# pm file
package Packed;
our @names;
sub namelist{
	print "Value : " . @names . "\n";
	foreach(@names){
		print "$_\n";
	}
}

sub import{
	my @imports = @_;
	shift(@imports);	# 先頭にはパッケージ名が入っているので切り捨て

	foreach(@imports){
		push(@names , $_);
	}
}
1;
 この通り。importサブルーチンに引数として渡ってくるようです。ところで、上で出ている宣言の「our」ですが、これはグローバル変数を定義するもののようです。ただ、C++やJavaに例えるなら「static変数」とした方が分かりやすいでしょうか。この変数に格納された内容は、オブジェクトが作られようが破棄されようが、はたまたオブジェクトがなくても読むことができます。
 ですから、importと組み合わせて、useでパラメータを渡すように使うことができます。Javaのプロパティ値のように使ったり、色々できそうです。

 SQL.78。ナッパ。

剣聖ハードゥン「ついさっきまでシェリー君と話していたのだが・・・サーラ君、それにイリアス君、ゼロワとヒゼロワを知っているか?」
騎士サーラ「ゼロ和ですか・・・。はい」
魔道士イリアス「何よそれ?」
騎士サーラ「各立場の利害関係が合計するとゼロになることです」
魔道士イリアス「?・・・どういう意味?」
騎士サーラ「簡単に説明すれば・・・例えば、私とイリアスさんが50ティルずつ賭けてゲームをしたとします。イリアスさんが完全に勝って100ティルを手にしても、70:30でも、50:50でも、これらは全部ゼロ和です。例えばイリアスさんが70で私が30とすれば、イリアスさんは20ティル得をし、私は20ティル損をしますから、足し合わせるとゼロです。これをゼロ和といいます」
魔道士イリアス「なるほどねぇ・・・。じゃ、もう1つのは?」
騎士サーラ「非ゼロ和というのは、足し合わせてもゼロにならない関係です」
魔道士イリアス「そういうことってあるの?」
騎士サーラ「そうですね・・・。イリアスさんがシェインさんと出撃したとします。そして、お2人とも別々に戦い、1人10人、合計20人を撃破したとしましょう」
魔道士イリアス「でも、2人で行くなら、共闘した方がよくないかしら」
騎士サーラ「そこなのです。2人で力をあわせて戦った結果、1人15人、合計30人を撃破したとします。すると、リソースは同じなのに、共闘しない時は1人10人、した時は合計15人であり、双方ともに+5です。これはゼロ和ではありません」
魔道士イリアス「で、どうしてそんな話をしてたのよ?」
剣聖ハードゥン「これは外交や経済では重要な概念で、両者がゼロ和である限り基本的に対立関係となるのだが・・・非ゼロ和ならそうとは限らない。時として2者以上が共に利益を得る場合もあるということだ」
魔道士イリアス「難しい言葉を使われると良く分からないけど、当たり前じゃない」
剣聖ハードゥン「うむ。それで、きみたちに聞きたいのは・・・シェリー君!」
イリスのシェリー「はい。今回、我がイリス製薬、それに政府崩壊前まで生物兵器開発や流行病の治療薬生成などの目的で国営されていたティラー製薬、また我が国の薬学研究分野では有名であり、島のウィンドシティー辺りを拠点とする南部薬品学問総合研究(南部薬品研究)、この3社が提携協議に入ったのです」
騎士サーラ「それで、何に困っていらっしゃるのでしょうか」
イリスのシェリー「提携に当たって、代表を3名決定したいのですが、この人選でモメているのです。どの組織についても、自分に有利な人間を入れたいですから」
騎士サーラ「利益にメンツまで絡んだ複雑な争い、というわけですか・・・」
イリスのシェリー「実は、交渉はある程度進んでいまして、各組織から1名ずつ、合計3名を代表にすることになっています。また、各人が各組織に与える損益については、以下の表の通り計算されています」
・各組織に与える損益
数値は符号なしをプラス、マイナス記号をマイナスとして扱う。略称は
Iris	イリス製薬
Tirror	ティラー製薬
South	南部薬品研究

各組織に与える損益
Iris	Tirror	South	所属	名前
60	-30	-20	Iris	シェリー
50	-25	-15	Iris	ラディア
80	-50	-25	Iris	シャロン
40	-40	10	Iris	フレデリック
-20	60	-35	Tirror	トニー
0	60	-55	Tirror	マーガレット
-30	50	-10	Tirror	グレース
-40	-40	90	South	エドガー
-50	-20	80	South	ミカエル
-25	-25	55	South	ジョナサン
イリスのシェリー「それぞれの所属組織ごとに1人ずつ、合計3人を選ぶのですが、条件としてはウィン・ウィンの関係でなくてはなりません。ですから、1つでもマイナスもしくはゼロになる組織が存在する組み合わせはいけません。ただし、のれんとして全組織に10の利益を加算しますので、それを加えた上でプラスになれば大丈夫です」
魔道士イリアス「のれん?」
イリスのシェリー「つまり、提携によって生じる利益です」
剣聖ハードゥン「しかし、ここだけの話・・・ティラー製薬にはまだ政府系財閥の資本が流れ込んでいる。それに、南部薬品研究は旧政府系だ。執行部の一部は真っ先に師団を支援したイリスを嫌っている。若い研究者が増えれば、じきに解決するだろうが・・・。提携の際、こいつらに権力を持たせると、ロクなことがないだろう」
騎士サーラ「・・・では、どうすればよろしいのでしょうか?」
剣聖ハードゥン「できるだけイリス製薬の権限を強めるしかない。とりあえず全員プラス査定なら、強引にでも説得できるだろう。それに、本音では2者とも、最大手のイリスが席を蹴るのを恐れているのだ」
イリスのシェリー「そこで、イリアスさんとサーラさんにお願いがあります。次のようなデータを出して欲しいのです」

1.上記の条件を守った場合、組み合わせがいくつできるか、その数量を提示
2.同じく上記の条件を守った上で、イリスの利益が他の2者を上回る(同数ではいけない)パターンを提示

イリスのシェリー「以上、可能ですか?」
騎士サーラ「やってみましょう」

 さあ、最適な組み合わせは見つかるのでしょうか。スマートに求めてみましょう。

模範解答
 またもや何とも複雑な問題が噴出してまいりました。見事に答えを出せるでしょうか。ひとまずテーブルを作ることにしましょう。今回は「組織ごとに1人」ですから、通し番号は不要ですが、一応用意しまして、
CREATE TABLE mem(i INT , o INT , n VARCHAR(16) , iris INT , 
tirror INT , south INT) ENGINE=HEAP;

INSERT INTO mem VALUES(1 , 0 , 'シェリー' , 60 , -30 , -20) , 
(1 << 1 , 0 , 'ラディア' , 50 , -25 , -15) , 
(1 << 2 , 0 , 'シャロン' , 80 , -50 , -25) , 
(1 << 3 , 0 , 'フレデリック' , 40 , -40 , -10) , 
(1 << 4 , 1 , 'トニー' , -20 , 60 , -35) , 
(1 << 5 , 1 , 'マーガレット' , 0 , 60 , -55) , 
(1 << 6 , 1 , 'グレース' , -30 , 50 , -10) , 
(1 << 7 , 2 , 'エドガー' , -40 , -40 , 90) , 
(1 << 8 , 2 , 'ミカエル' , -50 , -20 , 80) , 
(1 << 9 , 2 , 'ジョナサン' , -25 , -25 , 55);
 まず1問目、一体いくつのパターンが存在するのでしょうか。パターンはゼロ和ではありませんから、いくつか出てくることは予想できますが、さていくつでしょう。
SELECT COUNT(*) FROM mem iris , mem tirror , mem south 
WHERE iris.o = 0 AND tirror.o = 1 AND south.o = 2 AND 
iris.iris + tirror.iris + south.iris + 10 > 0 AND 
iris.tirror + tirror.tirror + south.tirror + 10 > 0 AND 
iris.south + tirror.south + south.south + 10 > 0;

// Result
8
 8パターンです。
 それでは、イリスの損益が他より大きくなるパターンは。これは要するに、相手2つのうち大きい方よりイリスの方が大きく、小さい方の数値がゼロを上回っていることですから、
SELECT iris.n AS 'Iris' , tirror.n AS 'Tirror' , south.n AS 'South' 
FROM mem iris , mem tirror , mem south 
WHERE iris.o = 0 AND tirror.o = 1 AND south.o = 2 AND 
iris.iris + tirror.iris + south.iris + 10 > 
GREATEST(iris.tirror + tirror.tirror + south.tirror + 10 , 
iris.south + tirror.south + south.south + 10) AND 
LEAST(iris.tirror + tirror.tirror + south.tirror + 10 , 
iris.south + tirror.south + south.south + 10) > 0;

// Result
Iris	Tirror	South
シェリー	トニー	ジョナサン
 すなわち、イリスはこの組み合わせを推すべきであると分かります。カラムを加えてみれば分かりますが、この場合のイリスの損益は25、ティラーが15、南部薬品研究が10となります。

騎士サーラ「シェリーさんも大変ですね。こういう対立に巻き込まれて、それを何とかしなければならないのですから・・・。よほど頭脳が明晰でないとこなせない大役です」
イリスのシェリー「いえ、私など、サーラさんほどでは・・・」
騎士サーラ「私はこのような状態になることはありませんから・・・」
魔道士イリアス「サーラ、ちょっと来て!助けて!」
騎士サーラ「イリアスさん、今すぐ参り・・・」
剣聖ハードゥン「サーラ君、大変なのだ!とにかく来てくれ!」
騎士サーラ「ハードゥンさん、すみませんが、今しば・・・」
聖騎士シェイン「サーラさん、緊急の要件です!申し訳ございませんが、今すぐ来ていただけますか?」
騎士サーラ「あ、あの・・・」
魔道士イリアス「サーラ、早く!困ったことになってるのよ!」
剣聖ハードゥン「サーラ君、すまぬが、この問題は私の手には負えぬのだ。早くしないと大変なことになる。すぐに何とかしてはくれぬか?」
聖騎士シェイン「サーラさん、どうかお助け願います!」
騎士サーラ「私は一体、どうすれば良いのでしょうか・・・」
イリスのシェリー「相変わらずひっぱりダコなのですね、サーラさん・・・」
騎士サーラ「しかし、とにかく何とかしなければなりません」
イリスのシェリー「この問題はゼロ和ですね・・・。誰か1人を優先すれば、他の2人は確実に遅れるのですから・・・」
騎士サーラ「だからこそ困るのです。しかし、迷っていても仕方ありません。・・・皆さん、一体何が必要なのですか!?」
魔道士イリアス「何って・・・例の件で今すぐ出なきゃいけないんだけど、サーラの護衛がないと困るのよ!」
剣聖ハードゥン「シェリー君が苦手とする諸分野について、すぐにデータが必要なのだが」
聖騎士シェイン「SQLを使わなくてはなりませんが、私では分からないのです」
騎士サーラ「こうなったら・・・イリアスさん、その件は私がやっておきますゆえ、シェインさんの要件をお願いできませんか?」
魔道士イリアス「やってくれるのなら、私は別にいいけど・・・」
騎士サーラ「シェインさん、続きはイリアスさんにやっていただいて、ハードゥンさんの手助けを願えますか?」
聖騎士シェイン「はい、分かりました」
騎士サーラ「それではシェリーさん、私は行って参ります」
イリスのシェリー「はい。・・・しかし、恐るべきドミノ移植・・・」

 このように、SQLは利害計算にも使えるのです。
カテゴリ [開発魔法][社会問題][経済・知的財産] [トラックバック 1][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

Trackback(1)
バトン・レボリューション(from ブログ@うにうに画像倉庫) - 2006/07/14(Fri)19:43:16
神無川雫さんの所でご指名を発見したので、WEBバトンを拾ってきました。どうやら、連投で3本くらい回ってきそうな予感。一気にやろうと思っていたのですが、3本目の回答が何だか止まったので、行きます。しかし、最近本当にバトンだらけです。楽しいですし、回答して下さ..


- Blog by yamicha.com -