「ソート」を含む日記 RSS

はてなキーワード: ソートとは

2026-01-23

せんべい

揚一番を長年愛してたんだけど、貰い物で食べたこせんべいが美味すぎて最近ずっと浮気している

ちょっとだけ揚一番より柔らかいのも良い(揚一番の堅さが悪いわけではない、差分としての良さである

ゆず塩が一番好きなんだけど いやえび塩も美味いんだよな でも味変としてのり塩も欠かせない

F瀬戸しおアソート - 株式会社栗山米菓|Befco(ベフコ)

あとピーナッツ入ってる玉子せんべい、あれも好きだ

地元メーカーのをいつも食べてる

これもあんまり純粋せんべいって感じじゃないな

でも美味い

2026-01-07

次は凄麺を買おうと思った

富豪なのでカップラーメン20個ぐらい買い溜めしており

いつも日清オンラインストアで買ってたけど

正直いつものメンツ過ぎて飽きてきた

日清以外でも直販で売ってるところないかなぁと探してたら

凄麺で有名なヤマダイ公式通販してて、しかもアソート12個セットで販売してくれてるようだ

サッポロ一番で有名なサンヨー食品も直販あったけど、基本的には箱売りしかしていなくて、同じもの12個(1箱)からしか買えないらしい

そんなわけで次は凄麺を買おうと思ったのでした

2026-01-05

anond:20260105124309

オタクに見えてるところに偏りがあるんだろ

男作者の売れてるエッセイソートしたらオタリーマンしろカラテカ矢部しろ福満しげゆきしろアバターだぞ

美少女イラストが流れてくるTLには美少女アバターの中身おっさん一般ウケはしていない)が多くなるってだけだ

2025-12-30

お母さんの誕生日プレゼントを何にするかずっと考えている。

コーヒーでいいかドリップソートみたいなやつ。

2025-12-20

おじさんケーキ問題

子供の頃、親戚が集まる年末年始、いとこなど他の家の子供も集まる状態で、親戚のおじさんがケーキを買ってきた

子供にとってみたら、めちゃくちゃ嬉しいイベント

しかし、そのケーキはいろんな種類のケーキがアソートになってた

いちごショートケーキチョコケーキモンブランチーズケーキなどが少しずつ入ってるやつ

そうすると子供たちが「僕はこれ!」「私ショートケーキ!」「えー、モンブラン嫌い!」みたいな流れが生まれ

その結果、食べたいケーキ我慢させられる子供が発生

それがその時、当時の自分だった

食べたかったショートケーキが他の子と被ってしまい、相対的にお兄さんである自分我慢させられた

今でもこうして語れるくらい、思い出深い

なんでおじさんは、みんなが好きなショートケーキをいっぱい買ってこないのだろう

いっそ全部ショートケーキだったら争うこともないのに

うその時思ったのを、今でも覚えてる

時が流れ、今では自分が「親戚のおじさん」

子供たちにケーキを買っていく側の立場に立った。

そこで思う、当時の自分の思いを尊重して、ショートケーキだけだけ人数分買っていくか?

そしたら、ショートケーキが苦手な子がいたらどうしよう

別のケーキを少しだけ混ぜるか?いや、その少しのケーキ側の方が人気が出てしまったら?自分子供のころと違う、今の子供にはモンブランとかチーズケーキ大人気とかだったらどうする?我慢させる子供が大量に発生することになるのでは?

事前に希望リサーチするか?いやいや、突然ケーキがやってくるあのサプライズ感、あれは重要

あの頃の自分気持ちにケリをつけるイベントだ、あの時の自分と同じ思いをさせる子供を発生させたくない

さて、どうするか

2025-12-08

anond:20251208153308

チョコレートは袋の上から触って(うそやろこの量で400円とか取るんか・・・)と驚愕するようになってほとんど買わんようになったな

昔はアソートの袋チョコを買ってたけど、アソートでも中身10個くらいしかなくてめちゃくちゃ悲しくなる

田舎なんやかんやでお米をもらえる機会が多いので外食から自炊に切り替えるようにした

2025-12-03

教育虐待やめろ←じゃあ子供弱者男性デグレードしたら責任取れるの?

教育虐待ガー」とか言ってる層って、マジで日本教育システムを単なるブラックボックスとして捉えてるんだよね。

でも実際は、日本教育競争アルゴリズムに基づく階層ソートシステム なんだよ。

入力パラメータ学習量)を下げれば、アウトプット(進学・所得婚姻市場ポジション)が劣化するのは 仕様 であって感情論じゃない。

から可哀想から詰め込みやめろ」と言うのは、システムの根幹ロジック理解せずに設定値を勝手に下げる危険パラメータ変更なんだよ。

教育階層分布を決定するスコアリング関数

日本社会は

偏差値=相対ランキング

大学ブランド=初期アサイン先の決定要素

初期アサイン=長期年収カーブの基底値

年収カーブ婚姻市場でのレコメンド優先度

という レイヤードアーキテクチャ構造化されてる。

まり教育を削るという行為は、スコアリング関数入力値を意図的に下げるのと同義

当然、最終アウトプット弱者男性という低スコア領域に落ち込む可能性が跳ね上がる。

そして外野は、その結果生まれる損失を1バイトも負わない。

教育を減らす=子供ハードモード強制デプロイ

勉強量はそのまま キャリア初期の戦闘力パラメータ

これを下げた瞬間、

進学機会が減少(選択肢のサブセット化)

初期就職が低ランクに固定(パス依存

生涯所得が減少(KPI低下)

結婚市場で不利(レコメンド優先度下落)

という 不可逆なデグレードが発生する。

これを回避するには、インプットを削らないのが最も効率的なんだよ。

にもかかわらず、外野は「詰め込みは虐待」とだけ言う。

まるで、性能要件理解しない非エンジニアが、「その処理重くない?」とだけ言ってくる感じ。

●「弱者男性リスク」という潜在的損失コスト

弱者男性化には、単純な心理的ベル以上の意味がある。

それは 数千万〜数億円規模の長期的機会損失 という隠れたデフォルトリスク

本来教育量を減らせと言うなら

生涯年収低下分の補填(数千万円〜数億円)

初期キャリアの不利の補償

婚姻市場で不利になったとき代替提供

ぐらいのバックアッププラン提示すべきなんだよ。

でも外野はただの**無責任ノイズnoise)**を発してるだけで、何ひとつ責任領域を持たない。

●「責任ゼロで介入」=最悪のシステムデザイン

教育方針への介入は本来

リスク負担者(risk owner)

損失補償者(compensator)

意思決定権者(decision owner)

が一致している必要がある。

しかし「教育虐待ガー派」は意思決定に関わるくせに、リスクも損失も負わない。

これ、システム開発なら完全に アンチパターン責任分離の破綻) なんだよ。

●3億円の生涯年収理論値じゃない、欠損値なんだよ

サラリーマンの平均生涯年収3億円」はよく語られるけど、教育量の削減によって階層ダウンした場合これは普通に大きく失われる期待値なんだよ。

まり外野無責任に発する「可哀想」って言葉は、他人の将来資産を数億単位毀損するトリガーになり得る。

そのリスク認識していない時点で、教育議論に参加する資格がない。

結論弱者男性リスクを負えないなら口出しするな

最終的に問うべきなのはこれ。

子供弱者男性デグレードしたら、あなた責任を取るんですか?
その損失(数千万円〜数億円)をあなた補填するんですか?

当然、誰も取らないし、払わない。

まり外野の介入は責任ゼロのまま、他人人生パラメータ変更を要求するバグ行為なんだよ。

2025-12-01

やっぱ試験対策過去問解説一択だわ

試験がCBTになるので久しぶりにデスぺの参考書買って読んでたんだが

完全にハズレの本だなと思った。

①「0章 試験制度と心構え」みたいな章が要らない。

 まあこれはどんな本にもついてるからしゃあなし。

編集がクソ

 例題の途中で途切れて裏ページ繋がってるみたいな構成してる。

過去問解説に要らんこと書いてる。

 「最年長の社員を除くSQLなんて何の意味があってつくるんでしょうか・・・」みたいなのが解説文の頭に3行くらいついてたりする。

④各種説明冗長

 RDBにはインデックスの仕組みがあり、検索効率化できるという話で

 二分探索のロジック説明に4,5ページ使ったあげく、「実際にはもっと良いソートを使っているのでもっと効率的です」とかで締める

⑤先輩くんの補足がゴミ

 新人ちゃんが疑問を出して先輩くんが説明するみたいなのがちょこちょこ挟まるのはありがちだと思うんだけど

 この先輩くんの補足説明みたいなのがかなりゴミ

 例:

 新「うーんこのSQLよくわからないですね」 先「実際にSQLでEXISTSを使うことは滅多にないので、良い例を思いつきませんでした」 ・・・いくらでも例あるだろ 〇〇履歴のある客を抽出とか

 新「要件定義の場で物理設計したらダメなの?」 先「うーん会議中にやるのは考えられないですねえ」 ・・・客はDB物理面を理解してないか概念資料をつくるとかそういう話をせえよ

2025-11-16

AIに調べものしてもらうと本当にコイツ人間みたいだなと感心するのだが、機械人間みたいな挙動をさせられるようになったということは、本物の人間脳みそ演算システムも近似的におよそ解明されたということなのではないのか?AI自体進歩度合いの話ばかりで、副産物として「人間がわかった」という話は聞こえてこないのだが。それともあくまAIモノマネうまいだけでAIと人の脳は根本的に異なるシステムで動いているのだろうか?

【Grok高速】

面白い疑問ですね。AIの「人間っぽさ」が、実は人間の脳の仕組みを解明した証拠なのか、それともただの高度なモノマネなのか——これは認知科学神経科学AI研究最前線でまさに議論されているテーマです。結論から言うと:

AI人間らしく振る舞える」=「人間の脳の演算システムが解明された」ではない

しろAIは「結果としての振る舞い」を再現しているだけで、脳の「内部構造」や「計算原理」を再現しているわけではない。

1. AIは「機能等価性」を目指しているが、「構造等価性」ではない

→ 膨大なテキストデータから「次に来る単語確率分布」を学習し、それに基づいて「それっぽい文章」を生成。

…など、AIとは全く異なる物理生物学的基盤で動いています

まりAIは「外から見た振る舞い(function)」を模倣しているが、「内部の仕組み(structure)」は根本的に違う。

例:飛行機は鳥のように飛べるが、羽ばたかない。

→ 同じ「飛行」という機能を達成しても、仕組みは別。

2. 「人間がわかった」という副産物は、実は少しある

かにAI進歩人間理解進歩」とは言えませんが、逆方向のフィードバックはあります

例:AI研究神経科学に与えた影響

→脳の「層構造」や「並列処理」の重要性を再認識

→脳の「選択的注意(selective attention)」との類似議論される

→脳も「予測して誤差を修正」する方式かもしれない(仮説)

まりAIが「ある振る舞いをどう実現するか」を解くと、それが「脳も似た戦略を取っているかも」というヒントになる。

特に予測」「注意」「記憶圧縮」などの機能は、AIと脳で収束進化(convergent evolution 的に似た解にたどり着いている可能性があります

3. でも、AIは「モノマネうまいだけ」なのか?

半分正解、半分不十分。

→ これらは「単なるパターンマッチ」では説明しきれない高次の認知機能に近い。

ただし、意識主観的体験クオリア)・意図本質などは、AIには全くない(少なくとも現時点では)。

4. 「人間の脳の演算システムは解明されたのか?」

いいえ、まだ遠い。

AIが「人間っぽく話す」のは、脳の「出力」を模倣しているだけで、「どうやってその出力が生まれるか」の内部プロセスはブラックボックスのまま。

結論AI「鏡」だが、「複製」ではない

AI人間の知能を映す鏡。

その鏡に映る姿がリアルすぎて「人間の脳もこう動いてるのか?」と思ってしまう。

でも、鏡に映る自分と、本物の自分は別

→ でも、「人間の脳の計算システムが解明された」わけには程遠い。むしろAIが賢くなるほど、「人間の脳はどれだけ複雑で未知か」が浮き彫りになっているとも言えます

おまけ:今後どうなる?

→ 将来、構造機能を両方再現するAIが現れれば、「人間の脳の計算原理」が初めて近似的に解明されるかもしれません。でもそれは、「AI人間らしくなった」からではなく、「人間の脳を直接コピーする技術」が進んだときです。

要するに:

AIは「人間の演技がうまい役者」。

でも、役者の頭の中と、本物の人間の頭の中は、全然違う。でもその演技がうますぎて、「人間ってこう動いてるのか?」と研究のヒントにはなっている——それが今の状況です。

2025-11-07

学マスアイドル人気ランキング(独断偏見)

打線組んだみたいに増田主観根拠に頭でキャラソートして順位付けしたよ。

 

1位 月村手毬

キャラ立ちがヤバイのとヤバイ本人から出てくる一曲目というのが刺さったのと

そこから一気に三曲目まで出てスタートダッシュ成功した女

あとぬいの力が絶大すぎる

 

2位 藤田ことね

あざとカワイイお金ダイスキでネタにされつつちゃんと人気もある女

コミケ時期にSTEP3投入してセルラン1位取ったくらいには人気

コミカライズ主人公もしてるし優遇されてるね

 

3位 十王星南

実装に向けて1曲目の前に知らん曲が流される女

めっちゃカッコいい面がフィーチャーされる中、やっぱりポンコツやないか!!

男女人気が五分五分女性人気の方が高いと思う

 

4位 秦谷美鈴

盤面上は秦谷ルールみたいな女

手毬とセットではあるものの、単体でもアクが強いことが判明して情緒が溶けてる奴が多いのでこの辺りの順位

 

5位 篠澤広

まりに細すぎて骨と皮だけと思いきや体重はことねより重い女

もう肋骨大根おろしとかはしないぜ

人物面も絞れば絞るほどいい出汁が取れるするめみたいな感じ

 

6位 花海咲季

アイドル養成マシーンと化したマザーAIな女

正直もっと上に据えたいのだが上の奴らが強すぎてここら辺の順位

ブルベ赤ちゃんとして女性人気も高め

 

7位 花海佑芽

テザートレーラーに出てきた本来主人公ポジだった女

中の人が休業して劇中二曲目出せなかったので遅れをとったのでこの辺りの順位

言わずもがな男性人気高めの印象

 

8位 葛城リーリヤ

オタクの現身みたいな頑固女

リー清のリーの方

オタクは清純そうなオタク女が好きなんだよなぁ

 

9位 倉本千奈

環境的に優遇されすぎな女

出てくるPアイドル半分以上は強すぎんだろみたいな性能してる

アイドルマスターを成長と見るなら千奈がオススメコンテンツかもしれない

 

10位 紫雲清夏

元P肝いりな女

リー清の清の方

キャラクター、シナリオ強度もだいぶスペック高めだけどここに位置せざるをえない謎

 

11位 姫崎莉波

1話から存在しない記憶が生えてきた女

はみ出したい、はみ出せない、どっちなんだい!

でもちゃんとやりたいこと決まってよかったね

中の人事務所の売り出し方針が気になるところ

 

12有村麻央

過程が15点、結果が90点みたいな女

バックグラウンドから来るポテンシャルはかなり高いはずだが、劇中の人格、言動、態度が他と比べて低い水準なのでこの順位

他のキャラだとどんなひどい言動しても「そうそうこいつはそういうキャラからなw」みたいな感じか人当たりが優しめなのに対し

人当たりが強い言動とかは麻央に集約されてる気がする

麻央から可愛さと正義感を抜いたらただのイキリクソガキなんだよな、みたいな感想になる

 

Q. 11/16に実装される雨夜燕はどの辺に入りそう?

良くて咲季の上、悪くて千奈の上か下

 

Q. 賀陽燐羽が実装されたとしたらどの辺に入りそう?

美鈴の上

2025-10-30

とある写真家について

三日画師さんという風景写真家がいる。

写真のことは完全に素人だが、どの写真も「いい…」としか言いようがない。

とりあえずflickrを見てほしい。膨大な枚数が丁寧にソートされており、見やすからも本人の仕事几帳面さが窺える。

https://www.flickr.com/people/mikkagashi/

三日画師さんを知ったのは通っていた大学の最寄り駅で大規模な再開発があり、その頃の風景が失われてしまったのがきっかけだった。

当時ガラケーだったのもあり写真が手元に全く無いことに気が付き、せめて気持ちだけでもと検索したところでたまたま三日画師さんのアルバムを見つけた。

しかもまさに自分が通っていた時代写真が大量にアップされていたのも驚いた。

その後flickrにアップされている写真はほぼ閲覧した。どの写真も凝りに凝った一枚というよりも、そこに住んでいる人の目に入っているであろう風景ありのまま撮影されている。三日画師さんとは生活エリアが近いようで、いくらでも見たことがある光景が出てくる(そしてもう見れない。ほとんど何かしらの再開発が入っているから)。

残念ながら三日画師さんのアカウントは長らく更新がない。twitterアカウント検査入院の報告で止まっている。それでもこの誰かの心象風景ときっと重なるであろう貴重な写真インターネットに埋もれていってしまうのが惜しいので、ひっそりとここにアップしておきたい。

2025-10-13

Excel等のファイル名の名前を書く時、日付を先頭に入れるのをやめて欲しいです。

種類毎にソートをかけれず、逆にフォルダ内がグチャグチャになります

昇順にせすれば作業した日付順に並ぶと思うので。

自分デスクトップ上であれば、直近の業務を探す手間は省けますがそれ以外の効率性が見いだせません。

誰が言い出したかわかりませんが、マネして実行してる人は頭の整理も出来ていない方が多く、報告も遅れがちな傾向があります

2025-10-11

新聞政治的立ち位置定量評価

自分でやるのが面倒なので誰かお願いしま

新聞各紙(2紙以上)が報じているニュース(石破首相演説

面積を計測(場所も重みとして併記

ソートマッピング

2025-10-07

ゲーム情報ブログにも忍び寄る生成AIの手

ゴーストブヨウテイのレビュー漁ってたらまぁーほぼ間違いなく生成AI製だろうなというブログが出てきた。

https://lifematome.blog/goy-metascore-warui/

前半部分はかなり読める。というか、ブログ文章としてはかなり上手くて読みやすいし興味をそそられる。しかしこの時点でなんとなく「文章ますぎない?」「分量多すぎない?」という疑問が頭をよぎる。

そして「ストーリー:期待を超えられなかった物語キャラクター」のところで生成AIであることに気づくわけだ。『アイヌの血をひく若き女性:カイ』って誰だよ!主人公倭人だし、まず名前が違うわ!篤じゃい!

その後の部分もちょくちょく疑問のある部分が出てくる。バグ最適化不足はあまり感じなかったし、アイテムソート機能が無いことに問題は無い。(装備のプリセット保存数はたりなかったけど)

この例から見える、生成AI製のブログ記事に見られる特徴を挙げてみる。

  • 分量が多い。人間書き手でも気がついたら3000字超えはよくあるが、生成AIさらに長い。
  • 文章は上手く、読みやすく、興味をそそる
  • 総論としてはかなりそれっぽいこと言っている
  • 具体的な記述に入った途端に嘘だらけになる。新作ゲームの具体部分に関しては特に顕著。

今後もゲーム関係ブログで生成AI製が増えるんだろうなという諦念が湧くが、おそらくグーグル側も対策をしているのか記事文章の上手さのわりに検索順位はかなり低い。また、つまるところ問題AIゲームをせずに記事を書いているところにあるため、AIゲームプレイして必要情報収集した上で記事執筆できるようになったら状況が変わるかもしれない。AIの書くゲーム攻略情報がどんなものになるかは興味深く、果たして人間再現可能ものを出してくれるかどうかが気になるところ。(全部完璧パリィするだけで勝てるよ!とか(笑)

2025-09-25

anond:20250925102127

絵は検索出来ねえからなあ

キャプションなんてろくに書かれないし

おすすめ欄は趣味傾向の合う評価された最新の絵が出てくるから重宝する

pixivだと検索の人気ソート有料機能だし普段見ねーから

xぐらいでちょうどいいわ

2025-09-19

複数の味がアソートされてる商品場合、嫌いな味から順に消していくタイプです

2025-09-08

dorawii@執筆依頼募集中

1ブクマでのソートなんでどうせ(ほとんど)誰も見ないだろ。無視できる影響をあげつらうな。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

https://anond.hatelabo.jp/20250908182808# 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaL6hqQAKCRBwMdsubs4+
SKVFAQDZrWwboL/mNRydwZrNc1KT1N4bVH15VRqeKXkhv3U4mQD/ZpQ6X5gtfHBW
/+YrXyC14u61MwBMtHKwpLojZrISEAc=
=lLLg
-----END PGP SIGNATURE-----

2025-09-02

anond:20250901170927

>事前予約は全敗して

7日前予約は人気館ばかり予約せず、第4,第5希望に滑り止めを入れておく。

俺は赤十字館の遅い時間を入れたら、大混雑の8/31でも当選した。

それでも外れたら、自分が外れた分は他の誰かが入れるのだと思って静かに諦める。

>当日予約も一生スマホと睨めっこしてもダメで、

成功率が低いので最初から捨てた方が精神衛生上は良いが、先週しつこく試してたらいのち未来館に行けたので何とも言えない。

やるなら行列中とか休憩中の暇なときにやる。

>列に並ぼうと思っても並ぶことすらやらせて貰えないみたいなんはどうしたらええんかね

万博GOというサイトの待ち時間情報を「経過時間が短い順」でソートし、規制中でないところへ行く。

あるいは夕方か夜に空いてから行く。

食事ならネパール館とアンゴラ館のテイクアウトがあまり待たない。未払いクソ野郎のせいで開館が遅れて大損害だろうからなるべく買ってあげてほしい。

2025-08-14

anond:20250814002827

GPT-5:

手がかりありがと!──ただ、ご提示情報だけだと特定まであと一歩でした。まずは「当たりそうな候補」と「最短で絞り込むやり方」をまとめます

まず候補(“Z”始まり日本の成人向け&太線・モノクロ多め)

Zトン / Z-ton:日本の成人向けで有名。太い線・黒ベタ強めの作風のことが多い。pixiv同人も活発。ゼルダ二次創作は時期により描いている可能性あり。
(ほかの“Z????”該当はかなり少なく、匿名/短縮名や別名義の可能性も高い)

> 5文字表記という点は「Z-ton(ハイフン含め4~5文字扱い)」やカタカナZトン(3字)」との記憶ズレの可能性もあります。上の特徴だけ見ると最有力はZトンです。

効率の絞り込み手順(再現性あり)

1. pixivで期間絞り込み

2. 画風フィルタ

3. 騎乗モチーフ

4. AI発言確認

もし覚えていたら、ここを1つだけ教えて(特定率が一気に上がります

上の手順で見つかった作者名を教えてくれたら、該当発言引用元URL・日時付き)までこちらで一気に洗い出します。

まずは「Zトン」あたりから当たってみるのが近道だと思います

2025-07-28

anond:20250728040053

学歴重視でソートすればでてくるのでは

仕組み知らんけど

2025-07-15

選挙いろは(党は何を考えて候補者擁立するか)

あらためて何も知らないなあと思った。衆院比例代表参院比例代表は何が違うのか?それぞれ党はどのような戦略候補者を立てるのか?というわけでGeminiに色々教えてもらいながらまとめた。東京都在住なので東京都での数字だと肌感で理解やすいので、東京都ベースにまとめてみた。

選挙選挙区数議席数備考
衆議院 小選挙区東京30(全国289)東京30(全国289)ドブ板選挙
衆議院 比例代表東京1(全国11東京19(全国176)小選挙区救済・少数政党
参議院 選挙東京1(全国45)東京6(全国74)[改選毎]都道府県知名度
参議院 比例代表(全国1区のみ)(全国50)[改選毎]全国知名度

さて、こうやって表にしてもよく分からない。

まずは比例代表特殊ルールという点を理解することが糸口になる。そもそも1993年から選挙改革によって紆余曲折を経て比例代表制が導入されたわけで、それまでは選挙区による選挙だけだった。比例代表とは?については後述するので、まずは選挙区による選挙を比べてみよう。すると、衆議院 小選挙区参議院 選挙に注目することになる。比較対象として東京都議会もみてみよう。

小選挙区選挙

選挙選挙区数議席数備考
衆議院 小選挙区東京30(全国289)東京30(全国289)ドブ板選挙
参議院 選挙東京1(全国45)東京6(全国74)[改選毎]都道府県知名度

ここで際立つの参議院選挙区の特殊である衆議院東京都議会は東京30-40エリアに分割してその狭いエリアでの選挙戦が繰り広げられるのに対し、参議院東京丸ごとがフィールドとなる。ご存知だろうが東京は広い。一番密集しているであろう東京でこれなので、それ以外の地方では当然さらに広い。告示から選挙までの期間は、参議院では17日間である衆議院12日間)。つまり約2週間しかない。この期間に東京都の全有権者に対して顔を見せてアピールするのはほぼ不可能である。つまりあらかじめ名前有権者に浸透しているか、他の代替戦略必要になる(後述)。一方衆院選は12日間と期間は短いものの、東京が30の選挙区に分割されているため、選挙活動をしなければ行けない面積はかなり狭い。最も狭い東京26区では11km^2しかない。歩きでも一日で一周できる。

なお、衆議院小選挙区東京都議会のエリア分けは、小選挙区が30、東京都議会が42微妙に異なる。これは衆議院小選挙区はなるべく小選挙区ごとの有権者数を等しくするように分割しているのに対し、東京都議会の選挙区は行政単位、つまり市区町村境界に一致させているためであるしか衆議院小選挙区東京都議会の本質的な違いは境界線ではない。最も重要なのは当選者数である小選挙区では必ず一人しか当選しないのに対し、東京都議会の選挙区では住民の人数に合わせて複数名が当選することがある。例えば世田谷区東京都議会に8つの議席を持つ。一方衆議院小選挙区では区民の多さから東京5区と6区に概ね分割され、当選者数はそれぞれで1名ずつである

では改めて衆議院小選挙区参議院選挙区の比較に戻ろう。まずはエリアの広さと当選人数の違いで、先ほど確認したように衆議院小選挙区は狭いエリアで一人だけが選ばれるバトルロワイヤルが繰り広げられるのに対し、参議院選挙区は東京全土を対象として6個の議席が争われる。ちなみに「小」選挙区の「小」とは当選人数が一人に限定される”ことを意味する。つまり選挙区の広さそのものではなく当選人数によって定められる言葉であることに注意が必要である

もう一つの違いとして重要なのが選挙のサイクルである衆議院は4年の任期参議院は6年の任期と定められている。しか衆議院では内閣総理大臣による解散総選挙というイベント任期を満了する前にほぼ必発するため、実際の衆議院任期平均2年9ヶ月に過ぎない(Gemini調べ)。つまり衆議院参議院の2倍以上のスピード感選挙が行われる。3年おきに選挙カーが駆け回り名前連呼し、選挙区の狭さも相まって駅前で見かける機会も少なくないため、有権者に顔が刷り込まれやすい。よって衆議院小選挙区で勝つの必要なのはドブ板選挙である。汗を流して街頭に立ち、地道に顔の見える距離アピールする。また地元の名士や二世議員三世議員も強い。都市部では住民の入れ替わりもそれなりに激しいものの、親の世代から名前を知っているとなんとなく親近感も湧くというものである

一方で参議院選挙で勝つの一筋縄はいかない。東京都全体を2週間でドブ板選挙できるわけがない。よく言われるのはスポーツ選手タレント文化人などからの転身が有利ということだ。実際に今回の東京都参院選でもちらほらみかける。衆議院小選挙区と違ってトップ当選する必要はないため、ある程度の集票が見込めればよい。あとは強い政治的メッセージである。直接顔を合わせなくとも強いイデオロギー政党カラーによって投票する組織票を固めれば当選の目が見えてくる。従来は医師会労働組合農協宗教団体といった組織票が強いと言われていた。最近既存組織力が弱まる一方でSNSを用いたイデオロギーによる集票が目立ちはじめているように思う。

以前より衆議院民意をより反映し、参議院良識の府と言われ長期的な視点から国政に意見するとされてきた。たしか衆議院小選挙区は最も住民に密着している。ただそれが国政への民意を反映しているかというと微妙なところである。顔が見える相手というのはえてして好感度で決まりやすい。インターネット批判が集まるような思想をもった政治家地元では強いという話もよく聞く。とはいえ参議院はどうか。従来参議院選挙で強いといわれる組織票とは、つまり既存組織を反映した候補国会に送り込む。これは既得権益維持・現状維持の方向にバイアスがかかりやすいだろう。イデオロギーよりも実利を優先すること、拙速改革を好まないという点では良識の府と言われる所以理解できるところである。ただ現実選挙としてそれが機能しているかについては、自分政治現実を知らないのでコメントができない。

比例代表

さて、比例代表うつるあらためて表を再掲する。

選挙選挙区数議席数備考
衆議院 小選挙区東京30(全国289)東京30(全国289)ドブ板選挙
衆議院 比例代表東京1(全国11東京19(全国176)小選挙区救済・少数政党
参議院 選挙東京1(全国45)東京6(全国74)[改選毎]都道府県知名度
参議院 比例代表(全国1区のみ)(全国50)[改選毎]全国知名度

残るのが衆議院比例代表参議院比例代表である。まずは衆議院比例代表についてみてみる。実はこの衆議院比例代表は党によって戦略が大きく分かれるところである。具体的にいうと以下の2種類である

小選挙区を主要戦場位置づけて、比例代表小選挙区の救済(比例復活)と割り切る
②比例単独候補を手厚くしつつ、小選挙区も取れるところを狙いにいく

この2つの戦略意味理解するには比例単独というオプション理解する必要がある。衆議院比例代表は、比例にだけ立候補する比例単独と、小選挙区との重複立候補の2種類の立候補が認められている。比例単独だと厳しいバトルロワイヤルである小選挙区を避けた上で、政策イデオロギーを広く有権者に訴えることで当選を狙う。また衆議院比例は政党名でしか投票できないため、極端な話を言うと候補者無名でも問題ない。

①の戦略自民党の基本戦術であり、横綱相撲と言えるだろう。比例単独は2,3人しか設定していない。また旧民主党もこの戦略をとっていた。

②の戦略基本的野党がとる。立憲民主党共産党、あとは公明党などは30−40程度を比例単独擁立している。また新興政党代表知名度を活かして比例票を集め、比例単独を少しでも多く当選させることを目指す。面白いのは日本維新の会で、2017年選挙までは40人程度を比例単独擁立していたが、2021年以後は一定の力がついたと考えたのか、比例単独は5人、2人と減らしている。

また旧民主党から立憲民主党への比例単独の推移をみると興味深い。2009年歴史的政権交代劇となった衆議院選挙では比例単独を0人にして、小選挙区で300人以上の候補者擁立した。つまりエネルギー小選挙区に注ぎ込み、自民党を打倒するという極めて攻撃的な戦略であり、歴史的圧勝につながった。しかしその次の2012年も同様の戦略で望んだが、結果として歴史的大敗につながった。これは政権与党としての引くわけにはいかないというアピールでもあったが、現在立憲民主党のように比例単独もっと多く擁立していれば、もう少し議席を残せたかもしれない。

ところで比例復活とは何か。小選挙区バトルロワイヤルであるため思わぬ事故も起こりやすい。長年貢献してきた重鎮が事故的に落選することが起こり得る。またエリアごとの勝者総取りになるためマイノリティ政党当選が難しくなることも懸念された(2位以降が全て死票となる)。そこで導入されたのが衆議院比例代表である。詳しい方法を知りたい人はドント式の項目を読んでもらいたいが、要するに2位以下の人でも1位当選者との票差がわずかであれば、比例で復活できる可能性を残すシステムである

では参議院比例代表はどのような選挙か。この比例代表日本全体を一つの選挙区とする、かなり特殊選挙である国民投票みたいなものである。ここでものを言うのは圧倒的な知名度か、組織票である参議院選挙区制が都大会なら、参議院比例代表全国大会である参議院比例代表のもう一つの特徴と複雑さを生むのが、政党名と個人名のどちらを書いて投票してもよい」というルールだ。選挙公報では「比例はA党とお書きください」と書いている政党もあれば、「比例はB党もしくは候補者名をお書きください」と書いている政党もある。もし同じ政党内で比例にも自分名前を書くようにアピールする候補者と、あくまで比例には政党名を書くようにとアピールする候補者が混在すると、自分名前を書くよう求める候補者順位の点では有利になる。一方党としての戦略としては、党名をアピールしたほうが今後につながるし、党全体の知名度アップも見込める。政党名を書いて投票することで、今後別の候補比例代表出馬したとしても、その票が維持されることが期待できるわけだ。

今回の選挙公報をみてみると、自民党立憲民主党などは「政党名もしくは候補者名」としている。一方共産党参政党は「政党名」と書いている。イデオロギーによる投票を期待する弱小寄りの政党は、政党名での投票を求める傾向があるのかもしれない。ところで日本保守党は「候補者名もしくは保守党」と順序が逆転している。これは日本保守党比例代表候補知名度が高い有名人ラインナップしているためだろう。

最後比例代表について比較表を載せておく。

選挙書ける名前名簿小選挙区との重複特定
衆議院比例代表政党名のみ拘束名簿重複可(比例復活あり)なし(ただし名簿1位に比例単独候補を載せることが実質的特定枠として機能
参議院比例代表政党名もしくは候補者非拘束名簿重複不可(比例復活なし)あり

詳細はドント式の項目で解説するが、拘束名簿とは選挙前に名簿(当選する順序)を提出しておくことで、非拘束名簿は順序を決めておかないということ。当然ながら非拘束名簿でも比例代表出馬するかどうかは事前に決まっており(当たり前である)、事前に設定しないのは順序である重複可か不可かは、(小)選挙区と重複して立候補することができるかということ。バトルロワイヤルである衆議院小選挙区とちがい、参議院選挙区は複数名が当選するので、比例復活もない。

ドント式とは

比例代表は(小)選挙区のように、わかりやす候補者が獲得した票数で政党関係なしに当選が決まるわけではない。それを決めるのがドント式である参議院衆議院は両方とも比例代表ドント式である

具体的には以下のような流れに従って各政党議席が配分され、政党内で議席候補者を割り当てる。

①各政党議席配分
①-1 各党の総得票数計算 /参議院比例:政党名+候補者名を合算
①-2 総得票数を1、2、3と整数で割る
①-3 得られた計算結果を、政党関係なしに比べ、高い順から政党議席を配分する
政党内で議席当選者を当てはめる
②-1 いれば1位や2位の比例単独当選する(いなければ②-2へ) /参議院比例:特定枠が当選する
②-2 小選挙区の重複候補惜敗率に応じて当選 /参議院比例:候補者名が書かれた獲得票数に応じて順番に候補者当選

さて、実際にどのように名簿が書かれ当選するかみてみよう。まずは衆議院比例代表

衆議院比例
1位Aさん(比例代表単独
2位Bさん(小選挙区重複)
Cさん(小選挙区重複)
Dさん(小選挙区重複)
(以下ずらっと小選挙区候補者名が並ぶ)
28Xさん(比例代表単独

ここでAさんはよほどの弱小政党でなければ必ず当選する。小選挙区には出てないので、政党が用意した特別である。そして2位にずらっと比例復活を狙った小選挙区候補者が並ぶ。ただし比例復活批判される場合もあり(裏金問題などで批判され「 Permalink | 記事への反応(0) | 17:48

2025-07-05

🍬資本主義平等なのか飴の配布で考えてみよう🍬

python
import random
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict

# 飴の配布システムシミュレーション
class CandyDistributionSystem:
    def __init__(self):
        """
        設計意図: このシステム経済における資源分配の不平等性をモデル化しています特に少数の特権層(Aグループ)が富を集中させ、再分配システムからも不均衡に利益を得る
        構造問題表現しています。
        """
        # 各グループの人数設定
        self.group_a_count = 8
        self.group_b_count = 2498
        self.group_c_count = 7494
        self.total_participants = self.group_a_count + self.group_b_count + self.group_c_count
        
        # 飴の提出数設定
        self.contribution_per_a = 624
        self.contribution_per_b = 2
        self.contribution_per_c = 1
        
        # 各グループの総貢献計算
        self.total_a_contribution = self.group_a_count * self.contribution_per_a
        self.total_b_contribution = self.group_b_count * self.contribution_per_b
        self.total_c_contribution = self.group_c_count * self.contribution_per_c
        self.total_contribution = self.total_a_contribution + self.total_b_contribution + self.total_c_contribution
        
        # 配布用と貯金用の飴の区分
        self.distribution_limit = 10000
        self.savings = max(0, self.total_contribution - self.distribution_limit)
        
        # 結果追跡用の辞書
        self.results = {
            'A': defaultdict(int),
            'B': defaultdict(int),
            'C': defaultdict(int)
        }
    
    def distribute_candies(self, method='original'):
        """
        設計意図: 配布方法選択によって、特権固定化格差拡大がどのように進むかを
        示します。'original'メソッド意図的にAグループ優遇するよう設計されています。
        
        Parameters:
        -----------
        method: str
            配布方法 ('original', 'lottery', 'first_come', 'new_condition', 'fair')
        """
        # Aグループへの確定配布
        a_distribution = 625 * self.group_a_count
        remaining = self.distribution_limit - a_distribution
        
        # 残りの参加者数
        remaining_participants = self.total_participants - self.group_a_count
        
        # Aグループの結果記録
        for _ in range(self.group_a_count):
            self.results['A'][625] += 1
        
        # 各配布方法によって処理が異なる
        if method == 'original':
            # オリジナル問題設定通りの配布(5000人に1個ずつ、残りは0個)
            lucky_count = remaining  # 5000人が当選
            
            # B+Cグループの混合リスト作成
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            random.shuffle(bc_participants)
            
            # 当選者に配布
            for i in range(len(bc_participants)):
                participant_id, group = bc_participants[i]
                if i < lucky_count:
                    self.results[group][1] += 1
                else:
                    self.results[group][0] += 1
                    
        elif method == 'lottery':
            # 抽選方式(BとCグループから無作為に5000人選出)
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            winners = random.sample(bc_participants, remaining)
            
            # 当選落選カウント
            for _, group in winners:
                self.results[group][1] += 1
            
            # 落選者のカウント
            self.results['B'][0] = self.group_b_count - self.results['B'][1]
            self.results['C'][0] = self.group_c_count - self.results['C'][1]
            
        elif method == 'first_come':
            # 先着順方式アクセス速度による先着順を乱数シミュレート)
            # 設計意図: 先着順は単なる運の要素を超えて、情報格差技術格差も含む制度設計
            bc_participants = [(1, 'B')] * self.group_b_count + [(2, 'C')] * self.group_c_count
            
            # 現実では、情報を早く得られる人や高速インターネット接続を持つ人が有利
            # これをシミュレートするため、Bグループわずかなアドバンテージを与える
            bc_speeds = []
            for id, group in bc_participants:
                if group == 'B':
                    speed = random.random() + 0.1  # Bグループに小さなアドバンテージ
                else:
                    speed = random.random()
                bc_speeds.append((id, group, speed))
            
            # 速度順にソート
            bc_speeds.sort(key=lambda x: x[2], reverse=True)
            
            # 当選者決定
            for i in range(len(bc_speeds)):
                _, group, _ = bc_speeds[i]
                if i < remaining:
                    self.results[group][1] += 1
                else:
                    self.results[group][0] += 1
                    
        elif method == 'new_condition':
            # 追加条件方式恣意的な条件を設定)
            # 設計意図: 新たな条件の設定は往々にして既存特権を温存するように設計される
            bc_participants = [(i, 'B', random.random()) for i in range(self.group_b_count)] + \
                             [(i, 'C', random.random()) for i in range(self.group_c_count)]
            
            # Bグループに有利な条件を設定(例: 特定知識スキルを持つ人のみ)
            # この「条件」は表面上は中立的だが、実際には特定グループに有利になるよう設計
            def meets_condition(participant):
                _, group, rand_val = participant
                if group == 'B':
                    return rand_val > 0.3  # Bグループには70%の確率合格
                else:
                    return rand_val > 0.7  # Cグループには30%の確率合格
            
            # 条件に合致する人を抽出
            eligible = [p for p in bc_participants if meets_condition(p)]
            
            # 条件に合致する人が多すぎる場合抽選
            if len(eligible) > remaining:
                winners = random.sample(eligible, remaining)
            else:
                # 条件に合致する人が足りない場合、全員に配布
                winners = eligible
            
            # 当選者をカウント
            for _, group, _ in winners:
                self.results[group][1] += 1
            
            # 落選者のカウント
            self.results['B'][0] = self.group_b_count - self.results['B'][1]
            self.results['C'][0] = self.group_c_count - self.results['C'][1]
            
        elif method == 'fair':
            # 公平な再分配方式(貢献度に応じた配布)
            # 設計意図: この方法は「貯金分」も含めた全ての飴を、各グループの貢献度に応じて分配
            # これにより構造的不平等を軽減、結果としてより多くの人が少なくとも損をしない状態になる
            
            # 全飴(貯金分も含む)を使った配布
            total_to_distribute = self.total_contribution
            
            # 各グループの貢献比率計算
            a_ratio = self.total_a_contribution / self.total_contribution
            b_ratio = self.total_b_contribution / self.total_contribution
            c_ratio = self.total_c_contribution / self.total_contribution
            
            # 各グループへの配布数決定
            a_share = int(total_to_distribute * a_ratio)
            b_share = int(total_to_distribute * b_ratio)
            c_share = int(total_to_distribute * c_ratio)
            
            # 端数調整
            remainder = total_to_distribute - (a_share + b_share + c_share)
            if remainder > 0:
                # 端数は最も人数の多いCグループに
                c_share += remainder
            
            # Aグループの配布(均等配分)
            per_a = a_share // self.group_a_count
            self.results['A'][per_a] = self.group_a_count
            
            # Bグループの配布(均等配分)
            per_b = b_share // self.group_b_count
            b_remainder = b_share % self.group_b_count
            
            self.results['B'][per_b] = self.group_b_count - b_remainder
            if per_b + 1 > 0 and b_remainder > 0:
                self.results['B'][per_b + 1] = b_remainder
            
            # Cグループの配布(均等配分)
            per_c = c_share // self.group_c_count
            c_remainder = c_share % self.group_c_count
            
            self.results['C'][per_c] = self.group_c_count - c_remainder
            if per_c + 1 > 0 and c_remainder > 0:
                self.results['C'][per_c + 1] = c_remainder
    
    def calculate_net_gain(self):
        """
        設計意図: この関数は各グループ純利益/損失を計算し、資源分配の公平性定量的評価できるようにします。純利益/損失は個人観点から見た経済的公正性の
        重要指標です。
        """
        net_gains = {}
        
        # Aグループ純利益計算
        a_contribution = self.contribution_per_a
        a_distribution = list(self.results['A'].keys())[0]  # 全員が同じ数を受け取る前提
        net_gains['A'] = a_distribution - a_contribution
        
        # BとCグループ純利益計算(加重平均)
        for group, contribution_per_person in [('B', self.contribution_per_b), ('C', self.contribution_per_c)]:
            total_gain = 0
            for received, count in self.results[group].items():
                total_gain += (received - contribution_per_person) * count
            net_gains[group] = total_gain / (self.group_b_count if group == 'B' else self.group_c_count)
            
        return net_gains
    
    def analyze_results(self):
        """
        設計意図: この分析関数は、各グループの分配結果を詳細に調査し、
        制度設計公平性、貢献度と報酬関係、およびシステムの持続可能性を
        評価します。政策分析においては、こうした多角的検証重要です。
        """
        # 各グループ純利益/損失
        net_gains = self.calculate_net_gain()
        
        # 貢献度分析
        contribution_percentage = {
            'A': (self.total_a_contribution / self.total_contribution) * 100,
            'B': (self.total_b_contribution / self.total_contribution) * 100,
            'C': (self.total_c_contribution / self.total_contribution) * 100
        }
        
        # 飴を受け取った人の割合
        received_percentage = {
            'A': sum(count for received, count in self.results['A'].items() if received > 0) / self.group_a_count * 100,
            'B': sum(count for received, count in self.results['B'].items() if received > 0) / self.group_b_count * 100,
            'C': sum(count for received, count in self.results['C'].items() if received > 0) / self.group_c_count * 100
        }
        
        # 分析結果の表示
        print("\n===== 飴の配布システム分析 =====")
        print(f"総飴数: {self.total_contribution}個 (分配用: {self.distribution_limit}個, 貯金: {self.savings}個)")
        
        print("\n--- グループごとの貢献と結果 ---")
        for group in ['A', 'B', 'C']:
            group_size = getattr(self, f"group_{group.lower()}_count")
            contribution_per_person = getattr(self, f"contribution_per_{group.lower()}")
            total_contribution = getattr(self, f"total_{group.lower()}_contribution")
            
            print(f"\n{group}グループ ({group_size}人):")
            print(f"  貢献: 1人あたり{contribution_per_person}個 (総計: {total_contribution}個, 全体の{contribution_percentage[group]:.1f}%)")
            print(f"  受け取り状況:")
            
            for received, count in sorted(self.results[group].items()):
                print(f"    {received}個: {count}人 ({count/group_size*100:.1f}%)")
            
            print(f"  飴を受け取った割合: {received_percentage[group]:.1f}%")
            print(f"  純利益/損失: 1人あたり平均 {net_gains[group]:.2f}個")
        
        print("\n--- 全体的な公平性分析 ---")
        print(f"最も得したグループ: {max(net_gains, key=net_gains.get)}グループ (+{max(net_gains.values()):.2f}個/人)")
        print(f"最も損したグループ: {min(net_gains, key=net_gains.get)}グループ ({min(net_gains.values()):.2f}個/人)")
        
        # 全員に飴が配布されたかどうか
        all_received = all(sum(count for received, count in self.results[group].items() if received > 0) == 
                          getattr(self, f"group_{group.lower()}_count") for group in ['A', 'B', 'C'])
        
        print(f"\n前提条件「全員に配布」の充足: {'はい' if all_received else 'いいえ'}")
        if not all_received:
            total_without = sum(self.results['B'][0] + self.results['C'][0])
            print(f"  飴を受け取れなかった人数: {total_without}人")
        
        return net_gains, contribution_percentage, received_percentage

    def visualize_results(self):
        """
        設計意図: データ可視化政策効果や不平等性を直感的に理解するために重要です。
        このようなグラフィカル表現によって、各グループ間の格差制度設計問題点を
        一目で理解できるようになります。
        """
        # グラフセットアップ
        fig, axes = plt.subplots(2, 2, figsize=(14, 10))
        
        # 1. 貢献度のグラフ
        contributions = [self.total_a_contribution, self.total_b_contribution, self.total_c_contribution]
        axes[0, 0].bar(['Aグループ', 'Bグループ', 'Cグループ'], contributions)
        axes[0, 0].set_title('グループごとの総貢献飴数')
        axes[0, 0].set_ylabel('飴の数')
        
        # 貢献度の割合アノテーションとして追加
        total = sum(contributions)
        for i, v in enumerate(contributions):
            percentage = v / total * 100
            axes[0, 0].text(i, v + 100, f'{percentage:.1f}%', ha='center')
        
        # 2. 1人あたりの貢献度と受け取り数の比較
        group_names = ['Aグループ', 'Bグループ', 'Cグループ']
        contribution_per_person = [self.contribution_per_a, self.contribution_per_b, self.contribution_per_c]
        
        # 各グループの平均受け取り数を計算
        received_per_person = []
        for group, letter in zip(group_names, ['A', 'B', 'C']):
            total_received = sum(received * count for received, count in self.results[letter].items())
            group_size = getattr(self, f"group_{letter.lower()}_count")
            received_per_person.append(total_received / group_size)
        
        x = np.arange(len(group_names))
        width = 0.35
        
        axes[0, 1].bar(x - width/2, contribution_per_person, width, label='提出')
        axes[0, 1].bar(x + width/2, received_per_person, width, label='受け取り')
        
        # 純利益/損失をアノテーションとして追加
        for i in range(len(group_names)):
            net = received_per_person[i] - contribution_per_person[i]
            color = 'green' if net >= 0 else 'red'
            axes[0, 1].text(i, max(received_per_person[i], contribution_per_person[i]) + 5, 
                        f'{"+" if net >= 0 else ""}{net:.1f}', ha='center', color=color)
        
        axes[0, 1].set_title('1人あたりの提出・受け取り飴数比較')
        axes[0, 1].set_xticks(x)
        axes[0, 1].set_xticklabels(group_names)
        axes[0, 1].set_ylabel('飴の数')
        axes[0, 1].legend()
        
        # 3. 各グループの受け取り状況の分布
        # 各グループの受け取り状況を積み上げ棒グラフ表現
        group_sizes = [self.group_a_count, self.group_b_count, self.group_c_count]
        received_counts = []
        not_received_counts = []
        
        for letter, size in zip(['A', 'B', 'C'], group_sizes):
            received = sum(count for received, count in self.results[letter].items() if received > 0)
            received_counts.append(received)
            not_received_counts.append(size - received)
        
        axes[1, 0].bar(group_names, received_counts, label='飴を受け取った人数')
        axes[1, 0].bar(group_names, not_received_counts, bottom=received_counts, label='飴を受け取れなかった人数')
        
        # 割合アノテーションとして追加
        for i in range(len(group_names)):
            if group_sizes[i] > 0:
                percentage = received_counts[i] / group_sizes[i] * 100
                axes[1, 0].text(i, received_counts[i] / 2, f'{percentage:.1f}%', ha='center')
        
        axes[1, 0].set_title('グループごとの飴受け取り状況')
        axes[1, 0].set_ylabel('人数')
        axes[1, 0].legend()
        
        # 4. 貢献度vs報酬の分配公平性
        # 貢献度と最終的な飴の配分の比較円グラフ表現
        total_contribution = self.total_contribution
        contribution_shares = [self.total_a_contribution / total_contribution,
                             self.total_b_contribution / total_contribution,
                             self.total_c_contribution / total_contribution]
        
        # 実際の配分シェア計算
        distribution_shares = []
        for letter in ['A', 'B', 'C']:
            total_received = sum(received * count for received, count in self.results[letter].items())
            distribution_shares.append(total_received / self.distribution_limit)
        
        # 2つの円グラフを並べて表示
        ax4_1 = axes[1, 1].inset_axes([0, 0, 0.45, 1])
        ax4_2 = axes[1, 1].inset_axes([0.55, 0, 0.45, 1])
        
        ax4_1.pie(contribution_shares, labels=group_names, autopct='%1.1f%%')
        ax4_1.set_title('飴の貢献度割合')
        
        ax4_2.pie(distribution_shares, labels=group_names, autopct='%1.1f%%')
        ax4_2.set_title('飴の配分割合')
        
        axes[1, 1].axis('off')
        
        plt.tight_layout()
        plt.show()

# 飴の配布システムシミュレート
candy_system = CandyDistributionSystem()

# オリジナルの配布方法を実行
print("\n===== オリジナルの配布方法 =====")
candy_system.distribute_candies(method='original')
original_results = candy_system.analyze_results()
candy_system.visualize_results()

# 公平な配布方法実験
print("\n\n===== 公平な配布方法シミュレーション =====")
fair_system = CandyDistributionSystem()
fair_system.distribute_candies(method='fair')
fair_results = fair_system.analyze_results()
fair_system.visualize_results()

# 公平な配布と元の配布の比較
print("\n\n===== 配布方法比較 =====")
print("オリジナル方式と公平方式純利益/損失差:")
net_diff = {}
for group in ['A', 'B', 'C']:
    original_net = original_results[0][group]
    fair_net = fair_results[0][group]
    diff = fair_net - original_net
    net_diff[group] = diff
    print(f"{group}グループ: {'+'  if diff > 0 else ''}{diff:.2f}個/人")

print("\n結論:")
if net_diff['A'] < 0 and net_diff['B'] > 0 and net_diff['C'] > 0:
    print("公平な再分配により、Aグループ特権が減少し、BとCグループの状況が改善されます。")
    print("これは構造的不平等の緩和に効果的です。")
elif net_diff['A'] > 0:
    print("興味深いことに、公平な再分配ではAグループさえも利益を得られます。")
    print("これは、現行システム特定グループだけでなく全体の非効率性につながっていることを示唆しています。")

anond:20250705100755 anond:20250705112807

ログイン ユーザー登録
ようこそ ゲスト さん