「直交」を含む日記 RSS

はてなキーワード: 直交とは

2011-09-15

コンピュータ基礎理論ハンドブック2 形式的モデル意味論」の目次

第1章  有限オートマトン
	D.Perrin:橋口攻三郎
1. 序論
2. 有限オートマトン認識可能集合
3. 有理表現
4. Kleeneの定理
5. 星の高さ
6. 星自由集合
7. 特殊なオートマトン
8. 数の認識可能集合


第2章  文脈自由言語
	J.Berstel and L.Boasson:富田 悦次

1. 序論
2. 言語
	2.1 記法と例
	2.2 Hotz 群
	2.3 曖昧性と超越性
3. 反復
	3.1 反復補題
	3.2 交換補題
	3.3 退化
4. 非生成元の探求
	4.1 準備
	4.2 生成元
	4.3 非生成元と代入
	4.4 非生成元と決定性
	4.5 主錐の共通部分
5. 文脈自由群
	5.1 文脈自由群
	5.2 Cayleyグラフ
	5.3 終端


第3章  形式言語とべき級数
	A.Salomaa:河原 康雄

1. 序論
2. 準備
3. 書換え系と文法
4. Post正準系
5. Markov系
6. 並列書換え系
7. 射と言語
8. 有理べき級数
9. 代数的べき級数
10. べき級数の応用


第4章  無限の対象上のオートマトン
	W.Thomas:山崎 秀記

序論
Ⅰ部  無限語上のオートマトン
	記法
1. Buchiオートマトン
2. 合同関係と補集合演算
3. 列計算
4. 決定性とMcNaughtonの定理
5. 受理条件とBorelクラス
6. スター自由ω言語と時制論理
7. 文脈自由ω言語
Ⅱ部  無限木上のオートマトン
	記法
8. 木オートマトン
9. 空問題と正則木
10. 補集合演算ゲームの決定性
11. 木の単項理論と決定問題
12. Rabin認識可能な集合の分類
	12.1 制限された単項2階論理
	12.2 Rabin木オートマトンにおける制限
	12.3 不動点計算


第5章  グラフ書換え:代数的・論理アプローチ
	B.Courcelle:會澤 邦夫

1. 序論
2. 論理言語グラフの性質
	2.1 単純有向グラフの類S
	2.2 グラフの類D(A)
	2.3 グラフの性質
	2.4 1階のグラフの性質
	2.5 単項2階のグラフの性質
	2.6 2階のグラフの性質
	2.7 定理
3. グラフ演算グラフ表現
	3.1 源点付きグラフ
	3.2 源点付き超グラフ
	3.3 超グラフ上の演算
	3.4 超グラフの幅
	3.5 導来演算
	3.6 超辺置換
	3.7 圏における書換え規則
	3.8 超グラフ書換え規則
4. 超グラフの文脈自由集合
	4.1 超辺置換文法
	4.2 HR文法に伴う正規木文法
	4.3 超グラフの等式集合
	4.4 超グラフの文脈自由集合の性質
5. 超グラフの文脈自由集合の論理的性質
	5.1 述語の帰納的集合
	5.2 論理構造としての超グラフ
	5.3 有限超グラフの可認識集合
6. 禁止小グラフ定義される有限グラフの集合
	6.1 小グラフ包含
	6.2 木幅と木分解
	6.3 比較図
7. 計算量の問題
8. 無限グラフ
	8.1 無限グラフ表現
	8.2 無限グラフの単項性質
	8.3 超グラフにおける等式系
	8.4 関手の初期不動点
	8.5 超グラフにおける等式系の初期解
	8.6 等式的超グラフの単項性質


第6章  書換え系
	N.Dershowitz and J.-P.Jouannaud:稲垣 康善,直井 徹

1. 序論
2. 構文論
	2.1 項
	2.2 等式
	2.3 書換え規則
	2.4 決定手続き
	2.5 書換え系の拡張
3. 意味論
	3.1 代数
	3.2 始代数
	3.3 計算能代数
4. Church-Rosser性
	4.1 合流性
	4.2 調和性
5. 停止性
	5.1 簡約順序
	5.2 単純化順序
	5.3 経路順序
	5.4 書換え系の組合せ
6. 充足可能性
	6.1 構文論的単一化
	6.2 意味論的単一化
	6.3 ナローイング
7. 危険対
	7.1 項書換え
	7.2 直交書換え系
	7.3 類書換え
	7.4 順序付き書換え
	7.5 既約な書換え系
8. 完備化
	8.1 抽象完備化
	8.2 公平性
	8.3 完備化の拡張
	8.4 順序付き書換え
	8.5 機能定理証明
	8.6 1階述語論理定理証明
9. 書換え概念拡張
	9.1 順序ソート書換え
	9.2 条件付き書換え
	9.3 優先度付き書換え
	9.4 グラフ書換え


第7章  関数型プログラミングラムダ計算
	H.P.Barendregt:横内 寛文

1. 関数計算モデル
2. ラムダ計算
	2.1 変換
	2.2 計算可能関数表現
3. 意味論
	3.1 操作意味論:簡約と戦略
	3.2 表示的意味論ラムモデル
4. 言語拡張
	4.1 デルタ規則
	4.2 型
5. 組合せ子論理と実装手法
	5.1 組合せ子論理
	5.2 実装の問題


第8章  プログラミング言語における型理論
	J.C.Mitchell:林 晋

1. 序論
	1.1 概論
	1.2 純粋および応用ラムダ計算
2. 関数の型をもつ型付きラムダ計算
	2.1 型
	2.2 項
	2.3 証明系
	2.4 意味論健全性
	2.5 再帰関数論的モデル
	2.6 領域理論モデル
	2.7 カルテシアン閉圏
	2.8 Kripkeラムモデル
3. 論理的関係
	3.1 はじめに
	3.2 作用構造上の論理的関係
	3.3 論理的部分関数論理同値関係
	3.4 証明論的応用
	3.5 表現独立性
	3.6 論理的関係の変種
4. 多相型入門
	4.1 引数としての型
	4.2 可述的な多相的計算系
	4.3 非可述的な多相型
	4.4 データ抽象存在型
	4.5 型推論入門
	4.6 型変数をもつλ→の型推論
	4.7 多相的宣言の型推論
	4.8 他の型概念


第9章  帰納的な関数プログラム図式
	B.Courcelle:深澤 良彰

1. 序論
2. 準備としての例
3. 基本的な定義
	3.1 多ソート代数
	3.2 帰納的な関数プログラム図式
	3.3 同値な図式
4. 離散的解釈における操作意味論
	4.1 部分関数と平板な半順序
	4.2 離散的解釈
	4.3 書換えによる評価
	4.4 意味写像
	4.5 計算規則
5. 連続解釈における操作意味論
	5.1 連続代数としての解釈
	5.2 有限の極大要素と停止した計算
6. 解釈クラス
	6.1 汎用の解釈
	6.2 代表解釈
	6.3 解釈方程式クラス
	6.4 解釈代数クラス
7. 最小不動点意味論
	7.1 最小で唯一の解を得る不動点理論
	7.2 Scottの帰納原理
	7.3 Kleeneの列と打切り帰納法
8. プログラム図式の変換
	8.1 プログラム図式における同値性の推論
	8.2 畳込み,展開,書換え
	8.3 制限された畳込み展開
9. 研究歴史,他の形式のプログラム図式,文献ガイド
	9.1 流れ図
	9.2 固定された条件をもつ一様な帰納的関数プログラム図式
	9.3 多様な帰納的関数プログラム図式
	9.4 代数理論
	9.5 プログラムの生成と検証に対する応用


第10論理プログラミング
	K.R.Apt:筧 捷彦

1. 序論
	1.1 背景
	1.2 論文の構成
2. 構文と証明論
	2.1 1階言語
	2.2 論理プログラム
	2.3 代入
	2.4 単一化子
	2.5 計算過程―SLD溶融
	2.6 例
	2.7 SLD導出の特性
	2.8 反駁手続き―SLD木
3. 意味論
	3.1 1階論理意味論
	3.2 SLD溶融の安全性
	3.3 Herbrand模型
	3.4 直接帰結演算子
	3.5 演算子とその不動点
	3.6 最小Herbrand模型
	3.7 SLD溶融の完全性
	3.8 正解代入
	3.9 SLD溶融の強安全性
	3.10 手続き的解釈と宣言的解釈
4. 計算力
	4.1 計算力と定義力
	4.2 ULの枚挙可能性
	4.3 帰納的関数
	4.4 帰納的関数計算力
	4.5 TFの閉包順序数
5. 否定情報
	5.1 非単調推論
	5.2 閉世界仮説
	5.3 失敗即否定規則
	5.4 有限的失敗の特徴付け
	5.5 プログラムの完備化
	5.6 完備化の模型
	5.7 失敗即否定規則の安全性
	5.8 失敗即否定規則の完全性
	5.9 等号公理と恒等
	5.10 まとめ
6. 一般目標
	6.1 SLDNF-溶融
	6.2 SLDNF-導出の安全性
	6.3 はまり
	6.4 SLDNF-溶融の限定的な完全性
	6.5 許容性
7. 層状プログラム
	7.1 準備
	7.2 層別
	7.3 非単調演算子とその不動点
	7.4 層状プログラム意味論
	7.5 完全模型意味論
8. 関連事項
	8.1 一般プログラム
	8.2 他の方法
	8.3 演繹データベース
	8.4 PROLOG
	8.5 論理プログラミング関数プログラミング統合
	8.6 人工知能への応用


第11章  表示的意味論
	P.D.Mosses:山田 眞市

1. 序論
2. 構文論
	2.1 具象構文論
	2.2 抽象構文
	2.3 文脈依存構文
3. 意味論
	3.1 表示的意味論
	3.2 意味関数
	3.3 記法の慣例
4. 領域
	4.1 領域の構造
	4.2 領域の記法
	4.3 記法上の約束事
5. 意味記述法
	5.1 リテラル
	5.2 式
	5.3 定数宣言
	5.4 関数抽象
	5.5 変数宣言
	5.6 文
	5.7 手続抽象
	5.8 プログラム
	5.9 非決定性
	5.10 並行性
6. 文献ノート
	6.1 発展
	6.2 解説
	6.3 変形


第12意味領域
	C.A.Gunter and D.S.Scott:山田 眞市

1. 序論
2. 関数帰納定義
	2.1 cpoと不動点定理
	2.2 不動点定理の応用
	2.3 一様性
3. エフェクティブに表現した領域
	3.1 正規部分posetと射影
	3.2 エフェクティブに表現した領域
4. 作用素関数
	4.1 積
	4.2 Churchのラム記法
	4.3 破砕積
	4.4 和と引上げ
	4.5 同形と閉包性
5. べき領域
	5.1 直観的説明
	5.2 形式的定義
	5.3 普遍性と閉包性
6. 双有限領域
	6.1 Poltkin順序
	6.2 閉包性
7. 領域の帰納定義
	7.1 閉包を使う領域方程式の解法
	7.2 無型ラム記法モデル
	7.3 射影を使う領域方程式の解法
	7.4 双有限領域上の作用素表現


第13章  代数仕様
	M.Wirsing:稲垣 康善,坂部 俊樹

1. 序論
2. 抽象データ型
	2.1 シグニチャと項
	2.2 代数計算構造
	2.3 抽象データ型
	2.4 抽象データ型の計算可能性
3. 代数仕様
	3.1 論理式と理論
	3.2 代数仕様とその意味論
	3.3 他の意味論的理解
4. 単純仕様
	4.1 束と存在定理
	4.2 単純仕様表現能力
5. 隠蔽関数と構成子をもつ仕様
	5.1 構文と意味論
	5.2 束と存在定理
	5.3 隠蔽記号と構成子をもつ仕様表現能力
	5.4 階層仕様
6. 構造仕様
	6.1 構造仕様意味論
	6.2 隠蔽関数のない構造仕様
	6.3 構成演算
	6.4 拡張
	6.5 観測的抽象化
	6.6 構造仕様代数
7. パラメータ仕様
	7.1 型付きラムダ計算によるアプローチ
	7.2 プッシュアウトアプローチ
8. 実現
	8.1 詳細化による実現
	8.2 他の実現概念
	8.3 パラメータ化された構成子実現と抽象化子実現
	8.4 実行可能仕様
9. 仕様記述言語
	9.1 CLEAR
	9.2 OBJ2
	9.3 ASL
	9.4 Larch
	9.5 その他の仕様記述言語


第14章  プログラム論理
	D.Kozen and J.Tiuryn:西村 泰一,近藤 通朗

1. 序論
	1.1 状態,入出力関係,軌跡
	1.2 外的論理,内的論理
	1.3 歴史ノート
2. 命題動的論理
	2.1 基本的定義
	2.2 PDLに対する演繹体系
	2.3 基本的性質
	2.4 有限モデル特性
	2.5 演繹的完全性
	2.6 PDLの充足可能性問題の計算量
	2.7 PDLの変形種
3. 1階の動的論理
	3.1 構文論
	3.2 意味論
	3.3 計算量
	3.4 演繹体系
	3.5 表現力
	3.6 操作的vs.公理意味論
	3.7 他のプログラミング言語
4. 他のアプローチ
	4.1 超準動的論理
	4.2 アルゴリズム論理
	4.3 有効的定義論理
	4.4 時制論理


第15章  プログラム証明のための手法論理
	P.Cousot:細野 千春,富田 康治

1. 序論
	1.1 Hoareの萌芽的な論文の解説
	1.2 C.A.R.HoareによるHoare論理のその後の研究
	1.3 プログラムに関する推論を行うための手法に関するC.A.R.Hoareによるその後の研究
	1.4 Hoare論理概観
	1.5 要約
	1.6 この概観を読むためのヒント
2. 論理的,集合論的,順序論的記法
3. プログラミング言語の構文論と意味論
	3.1 構文論
	3.2 操作意味論
	3.3 関係的意味論
4. 命令の部分正当性
5. Floyd-Naurの部分正当性証明手法とその同値な変形
	5.1 Floyd-Naurの手法による部分正当性証明の例
	5.2 段階的なFloyd-Naurの部分正当性証明手法
	5.3 合成的なFloyd-Naurの部分正当性証明手法
	5.4 Floyd-Naurの部分正当性の段階的な証明と合成的な証明同値性
	5.5 Floyd-Naurの部分正当性証明手法の変形
6. ライブネス証明手法
	6.1 実行トレース
	6.2 全正当性
	6.3 整礎関係,整列集合,順序数
	6.4 Floydの整礎集合法による停止性の証明
	6.5 ライブネス
	6.6 Floydの全正当性証明手法からライブネスへの一般化
	6.7 Burstallの全正当性証明手法とその一般化
7. Hoare論理
	7.1 意味論的な観点から見たHoare論理
	7.2 構文論的な観点から見たHoare論理
	7.3 Hoare論理意味論
	7.4 構文論と意味論の間の関係:Hoare論理健全性と完全性の問題
8. Hoare論理の補足
	8.1 データ構造
	8.2 手続き
	8.3 未定義
	8.4 別名と副作用
	8.5 ブロック構造局所変数
	8.6 goto文
	8.7 (副作用のある)関数と式
	8.8 コルーチン
	8.9 並行プログラム
	8.10正当性
	8.11 プログラム検証の例
	8.12 プログラムに対して1階論理拡張した他の論理


第16章  様相論理時間論理
	E.A.Emerson:志村 立矢

1. 序論
2. 時間論理の分類
	2.1 命題論理 対 1階述語論理
	2.2 大域的と合成的
	2.3 分岐的 対 線形
	2.4 時点と時区間
	2.5 離散 対 連続
	2.6 過去時制 対 未来時制
3. 線形時間論理技術的基礎
	3.1 タイムライン
	3.2 命題線形時間論理
	3.3 1階の線形時間論理
4. 分岐的時間論理技術的基礎
	4.1 樹状構造
	4.2 命題分岐的時間論理
	4.3 1階の分岐的時間論理
5. 並行計算:その基礎
	5.1 非決定性と公平性による並列性のモデル化
	5.2 並列計算抽象モデル
	5.3 並列計算の具体的なモデル
	5.4 並列計算の枠組みと時間論理の結び付き
6. 理論見地から時間論理
	6.1 表現可能性
	6.2 命題時間論理の決定手続き
	6.3 演繹体系
	6.4 モデル性の判定
	6.5 無限の対象の上のオートマトン
7. 時間論理プログラム検証への応用
	7.1 並行プログラム正当性に関する性質
	7.2 並行プログラム検証証明論的方法
	7.3 時間論理による仕様からの並行プログラム機械合成
	7.4 有限状態並行システム自動検証
8. 計算機科学における他の様相論理時間論理
	8.1 古典様相論理
	8.2 命題動的論理
	8.3 確率論理
	8.4 不動点論理
	8.5 知識


第17章  関係データベース理論の構成要素
	P.C.Kanellakis:鈴木 晋

1. 序論
	1.1 動機と歴史
	1.2 内容についての案内
2. 関係データモデル
	2.1 関係代数と関係従属性
	2.2 なぜ関係代数か
	2.3 なぜ関係従属性か
	2.4 超グラフデータベーススキーマの構文について
	2.5 論理データベース意味について
3. 従属性データベーススキーマ設計
	3.1 従属性の分類
	3.2 データベーススキーマ設計
4. 問合わせデータベース論理プログラム
	4.1 問合わせの分類
	4.2 データベース論理プログラム
	4.3 問合わせ言語と複合オブジェクトデータモデル
5. 議論:関係データベース理論のその他の話題
	5.1 不完全情報の問題
	5.2 データベース更新の問題
6. 結論


第18章  分散計算モデル手法
	L.Lamport and N.Lynch:山下 雅史

1. 分散計算とは何か
2. 分散システムモデル
	2.1 メッセージ伝達モデル
	2.2 それ以外のモデル
	2.3 基礎的概念
3. 分散アルゴリズムの理解
	3.1 挙動の集合としてのシステム
	3.2 安全性と活性
	3.3 システム記述
	3.4 主張に基づく理解
	3.5 アルゴリズムの導出
	3.6 仕様記述
4. 典型的な分散アルゴリズム
	4.1 共有変数アルゴリズム
	4.2 分散合意
	4.3 ネットワークアルゴリズム
	4.4 データベースにおける並行性制御


第19章  並行プロセス操作的および代数意味論
	R.Milner:稲垣 康善,結縁 祥治

1. 序論
2. 基本言語
	2.1 構文および記法
	2.2 操作意味論
	2.3 導出木と遷移グラフ
	2.4 ソート
	2.5 フローグラフ
	2.6 拡張言語
	2.7 その他の動作式の構成
3. プロセスの強合同関係
	3.1 議論
	3.2 強双模倣関係
	3.3 等式による強合同関係の性質
	3.4 強合同関係における置換え可能性
	3.5 強等価関係上での不動点の唯一性
4. プロセスの観測合同関係
	4.1 観測等価性
	4.2 双模倣関係
	4.3 観測合同関係
	4.4 プロセス等価性上での不動点の唯一性
	4.5 等式規則の完全性
	4.6 プロセス等価性に対するその他の概念
5. 双模倣等価関係の解析
	5.1 等価性の階層構造
	5.2 階層構造論理的特性化
6. 合流性をもつプロセス
	6.1 決定性
	6.2 合流性
	6.3 合流性を保存する構成子
7. 関連する重要な文献

2011-02-14

「ぶっとんでる作品」と「ぶっとんでる作者」

漫画


あらゆる漫画作品を、何らかの直交する二変数の平面上に置くことを考える。方眼紙に目盛りをうったものを考えてもらえるとありがたい方眼紙の端が、あなた想像しうる作品の限界

このとき、「頭おかしい作品」というのは、方眼紙の外にある作品。あなた想像の埒外にあるもの。

たとえば「ケンペーくん」。

内容はいちいち書かない。ググッてください。

その一方で、「作品自体は方眼紙の中にあるけど、とにかく『すごい』作品」というものもある。これは主観的に二つに分けられる。つまり、「理解できる」か「できない」か。

理解できる作品というのは、フォロワーがでやすい作品と言ってもいいかも知れない。アイデアが模倣可能で、しか商業ベースでいけると判断されたもの。たとえば、個人的には「ヒカルの碁」がそう。

もちろん「マイナージャンルの競技を取り扱った作品」というのは昔からあったけど、特に現代的な少年漫画の範疇では、ヒカ碁で一気に火がついた感がある。同時期にライジングインパクトがあったのも大きかった。両者ともテーママイナーであるということに甘えず、また「ぶっとんだ」、言い換えれば「マニア向けの」面白さを求めず、純粋ストーリー漫画として面白かったのが良かったのだと思う。

真に頭おかしい作品というのは、「方眼紙の中にあるのに理解出来ない」作品。

個人的には藤崎竜やゴトウユキコ釣巻和もそう。あと植芝理一自分方眼紙の中にあると思うんだけど、絶対に理解出来ない。

2010-11-19

http://anond.hatelabo.jp/20101119184511

横だが、結婚してる奴を妬んでる以上、結婚したいという気持ちもあるんだろうと思う。

結婚したいという欲求と性欲はたぶん別物だよねえ…。

仕事上の評価軸」と「女としての評価軸」という直交する座標軸を入れた時、元増田自身のベクトルはほぼ「女としての評価軸」と直交してるってことじゃないかな。

2010-01-24

同じ風景を何度も夢で見てしまう

自分メモ

  • 時間帯は真昼。季節は春から夏頃。
  • 実在しない場所(のはず)。
  • 一面田んぼだけど、県道らしき道路が通っているので車は結構頻繁に走ってる。
  • 高速道路とか国道バイパスだかの高架道路が近くを通ってる。県道とは直交している。
  • 家が数件密集している場所が道路沿いに点在している(周囲の田んぼ農家の家らしい)。
  • その近くを用水路が通っている。田んぼに水を引くため?
  • 県道のずっと先に小さな山が見える。
  • なぜか自分はその一帯に土地勘がある。
  • にもかかわらず、歩いてどこかへ向かおうとしているがいつも道に迷ってたどり着けない。約束時間に間に合わず焦るばかり。

…という夢をここ数年、年に数回の頻度で見ている事に気づいた。

2009-11-18

http://anond.hatelabo.jp/20091118122712

「あなたが他の研究者より優れた発見をして,なんになるというのか.その理論がつくれなかったらダメなのか.」と言われたらどうする?

そりゃどういうリスクヘッジ戦略を持ってるのかを言えばいいだろ。

そもそもその「優れた」の尺度が不明過ぎて、いくら仕分け人が馬鹿だと言ってもそこまで馬鹿な質問はしないだろうけど。

その「優れた理論」とやらを作ろうとする過程で複数の問題が発生して、それぞれを解決するために色々な手法を考えることになるだろうがよ。

その手法は「優れた理論」が作れなかった時点で無に帰するのか?そんなわけねーだろ。

知的興味でやるのはいいけどよ、何がどう嬉しいのかくらいしっかり考えろよ。

しっかり考えてそれを適切に伝えれば理解してくれるかもしんねーだろうがよ。

要するに薄っぺらいんだよ。それで許されるのは天才だけだっつーの。

何でもかんでも「国民メリット」とかほざく馬鹿仕分け人の問題とは別次元直交空間)だよ。

研究者なんだったら専門以外のことも少しは勉強しとけっつの。

専門以外何もわからないようなやつは天才以外いらない。



ブクマのやつは何でそう思うのか述べろ。全く否定になってない。

2009-07-22

http://anond.hatelabo.jp/20090722135045

クロージャとは何ぞやとつきつめてくと曖昧なところは出てくるんだけれど、広く解釈しても「名前の有無」とは直交する概念でしょう。

よっぽどひねくれた実装でない限り、ファーストクラスクロージャを実現したら無名関数も簡単に実現できるから、現実的には無名関数クロージャだろうけれども。クロージャを持つが無名関数は許さないという仕様を持つ言語も考えられなくはない。やっても別にメリットがないから誰もやらないだけで。

2009-04-08

http://anond.hatelabo.jp/20090408220355

まぁそりゃそうだろうね。

だから金と同じに、自己組織化的に線引きを決定できるシステムを導入する必要があるだろうね。

金に直交するような別の評価軸をなるだけ自然な形で導入する。金の軸は導入できたわけだから、それもできる方法があるはず。

2009-01-01

http://anond.hatelabo.jp/20090101130653

「2進法」は表現の問題。アナログデジタルか(連続値か離散値か)とは直交する話。

2008-10-17

http://anond.hatelabo.jp/20081006220009

YourFileHostのCAPTCHA画像をなんとかするの続き。

その後、適当にいじったら、手元環境で1枚あたり25秒くらい→だいたい2.5秒くらいで判別できるようになった。このくらいなら使えるかな。

速度向上に一番効いたのは、Token#importで画像を比較しているところの修正。他は細かい手直し。

使い方は前のやつと変わってません。

あと、テストに100枚くらいCAPTCHA画像食わせてみたけど、とりあえず全部正しく判定できた。

動作確認用のスクリプト (run.rb)

カレントディレクトリ以下にある*.gifCAPTCHA画像ファイル適当に判別するスクリプト。動作確認用にどうぞ。

後述のdecaptcha.rbと同じディレクトリ適当に置いてchmod +xしてね。

#!/usr/local/bin/ruby
$LOAD_PATH << File::dirname(File::expand_path($0))
require 'decaptcha'

STDOUT.sync = true

Dir.glob('*.gif').sort.each do |file|
  correct = File::basename(file, '.*')
  puts "Processing file: #{file}"
  start_time = Time.now
  ret = DeCAPTCHA.decode(file)
  elapsed = Time.now - start_time

  puts "  Result: #{ret} (=> #{(correct == ret) ? "Ok" : "Fail"})"
  puts "  Elapsed time: #{elapsed}"
  puts
end

コード (decaptcha.rb)

#!/usr/local/bin/ruby
require 'rubygems'
require 'gd2'
require 'pp'

#
#= CAPTCHA画像解析モジュール
# CAPTCHA画像ファイルを食わすとあら不思議Stringが出てくるよ。
# YourFileHostのやつに対応。
#
#== Usage
# decoded_str = DeCAPTCHA.decode("some_captcha_image.gif")  #=> String
# 失敗したらnilが返る。
#
module DeCAPTCHA
  DEBUG = false

  #=== CAPTCHA画像デコード
  # file::    画像ファイル名のパス
  # method::  未指定でよい。男は細かい事を気にするな。
  # returns:: CAPTCHA画像解析結果(String) or nil (デコード失敗時)
  def self.decode(file, method = DeCAPTCHA::Site::YourFileHost)
    return method.new(file).decode
  end



  #= CAPTCHA画像デコードクラス
  # このクラスサブクラスはimport, tokenize, stream_parseメソッドの
  # 実装を含む必要がある。
  class Site
    def initialize(file = nil)
      @pix = nil
      self.import(file) unless file.nil?
    end
    def decode
      return stream_parse(tokenize())
    end
  end

  #= YourFileHostのCAPTCHA画像を解析するクラス
  class Site::YourFileHost < Site
    def import(file)
      @pix = PixelMatrix.new.import(file)
      return self
    end

    # importしたイメージ(PixelMatrix)から、文字と思わしきパターンを
    # 抽出して上下マージンを切り取ってArrayにして返す。
    # returns:: Array of PixelMatrix
    def tokenize
      ret = []
      state = :initial
      for x in 0...@pix.width
        case state
        when :initial
          if !@pix.vline_blank?(x) then
            state = :tokenize
            pixel = PixelMatrix.new(0, 0, true)
            ret << pixel
            redo
          end
        when :tokenize
          if @pix.vline_blank?(x) then
            state = :initial
            next
          end
          x0 = pixel.width
          for y in 0...@pix.height
            pixel[x0, y] = @pix[x, y]
          end
        else
          raise 'NOTREACHED'
        end
      end

      ret.map! {|token| Token.new.import(token.cutoff_vmargin!) }
    end


    # PixelMatrixのArrayを受け取り、数字を判別。
    # tokens:: Array of PixelMatrix
    # returns:: String (判別結果)
    def stream_parse(tokens)
      rs = tokens.map {|x| x.guess.to_s }.join('')
      if rs.length != 4 then
        rs = nil
        if DEBUG then
          puts '- guess failed. dumping guess result of each token:'
          tokens.each_index do |i|
            print "##{i}:#{tokens[i].guess} "
            pp tokens[i].candidate
          end
          puts
        end
      end
      return rs
    end

    class Token
      @@digits = nil
      attr_accessor :candidate

      def initialize
        if @@digits.nil? then
          # 文字画像サンプルを作っておく
          @@digits = DIGITS_ASSOC.map {|digit|
            PixelMatrix.new(0, 0, true).import_array(digit) }
        end

        @candidate = Hash.new
      end

      # PixelMatrixを受け取り、文字画像サンプルと比較して
      # 一致率を計算しておく。
      # pixel:: PixelMatrix
      # returns:: self
      def import(pixel)
        @@digits.each_index do |i|
          digit = @@digits[i]

          if (digit.width - pixel.width).abs   > 4 or
             (digit.height - pixel.height).abs > 4 then
            @candidate[i] = -1  # サイズが違いすぎな場合、一致させない
            next
          end

          correct_bits = 0
          enlarged_width  = [digit.width,  pixel.width ].max
          enlarged_height = [digit.height, pixel.height].max
          for y in 0...enlarged_height
            dy = (y.to_f / digit.height * enlarged_height).to_i
            py = (y.to_f / pixel.height * enlarged_height).to_i
            for x in 0...enlarged_width
              dx = (x.to_f / digit.width * enlarged_width).to_i
              px = (x.to_f / pixel.width * enlarged_width).to_i
              correct_bits += 1 if digit[dx, dy] == pixel[px, py]
            end
          end

          @candidate[i] = correct_bits * 100 /
                          (enlarged_width * enlarged_height)
        end

        return self
      end

      # importのときの比較結果をもとに文字を推測
      # returns:: Fixnum or nil(失敗時)
      def guess
        digit, ratio = @candidate.sort {|a, b| a.last <=> b.last}.last
        digit = nil if ratio < 0 or ratio < 65
        return digit
      end
    end
  end


  #= 画素マトリックスクラス
  # 画像ファイルを食わせると、各ピクセル(画素)を2値(black(1) or white(0))に
  # 変換して、内部で保持する。
  # 以後、Matrixクラスのような感じで個々の画素アクセスできる。
  class PixelMatrix
    BLACK = 1
    WHITE = 0

    attr_accessor :width
    attr_accessor :height

    # width::  幅
    # height:: 高さ
    # is_flexible:: 自動的に伸張するか
    def initialize(width = 0, height = 0, is_flexible = false)
      @matrix = Hash.new {|hash, key| hash[key] = Hash.new(WHITE)}
      @width, @height, @flexible = width, height, is_flexible
    end

    # file:: 画像ファイル名のパス
    # brightness_threshold:: 画素を黒とみなす閾値 (0 - 255, default: 0x40)
    # returns:: self (DeCAPTCHA::PixelMatrix)
    def import(file, brightness_threshold = 0x40)
      gd = GD2::Image.import(file)
      @width, @height = gd.width, gd.height

      self.each_with_axis do |x, y|
        color = gd[x, y]
        greyscale = (color.red + color.green + color.blue) / 3
        self[x, y] = (greyscale > brightness_threshold) ?
          WHITE :
          BLACK
      end
      return self
    end

    def import_array(array)
      array.each_with_index do |str, y|
        str.split('').each_with_index do |c, x|
          self[x, y] = c.to_i
        end
      end
      return self
    end

    # PixelMatrixを画像ファイルとしてexport
    # file:: 新たに作る画像ファイル名のパス
    def export(file)
      gd = GD2::Image::IndexedColor.new(@width, @height)
      gd.palette << GD2::Color::WHITE
      gd.palette << GD2::Color::BLACK
      self.each_with_axis do |x, y|
        gd[x, y] = {
          WHITE => GD2::Color::WHITE,
          BLACK => GD2::Color::BLACK,
        }[self[x, y]]
      end
      gd.export(file)
      return self
    end

    # 指定された位置の画素を返す。
    # returns:: PixelMatrix::BLACK(1) or WHITE(0)
    def [](x, y)
      if !@flexible and !in_range?(x, y) then
        raise RangeError
      end
      return WHITE if !@matrix.has_key?(y)  # XXX: for optimize
      return @matrix[y][x]
    end

    # 画素に値を設定。
    # returns:: PixelMatrix::BLACK(1) or WHITE(0)
    def []=(x, y, val)
      unless in_range?(x, y) then
        raise RangeError unless @flexible
        @width  = (x >= @width)  ? x + 1 : @width
        @height = (y >= @height) ? y + 1 : @height
      end

      @matrix[y][x] = val
    end

    def in_range?(x, y)
      ((0...@width) === x and (0...@height) === y)
    end

    # 指定された軸をもとに画素を走査し、Arrayに変換。
    # 例えば、to_a(:vertical, 10) とすると、x == 10 な列を取り出して
    # Arrayにして返す。
    #
    # axis:: 軸を指定 (:vertical または :horizontal)
    # pos:: 位置を指定。_axis_で指定した軸と直交する軸における位置を指定。
    def to_a(axis, pos)
      {:vertical => lambda {
        (0...@height).map {|y| self[pos, y]}
       },
       :horizontal => lambda {
        (0...@width).map  {|x| self[x, pos]}
       },
      }[axis].call
    end

    # returns:: Array
    def hline(y)
      self.to_a(:horizontal, y)
    end

    # returns:: Array
    def vline(x)
      self.to_a(:vertical, x)
    end

    # X軸方向に画素を走査。
    # y:: どの位置で走査するか
    # returns:: 指定された軸の上にドットが存在: false, 無い: true
    def hline_blank?(y)
      return true if @matrix.has_key?(y) == false # XXX: for optimize
      for x in 0...@width
        return false if self[x, y] == BLACK
      end
      return true
    end

    # Y軸方向に画素を走査。
    # x:: どの位置で走査するか
    # returns:: 指定された軸の上にドットが存在: false, 無い: true
    def vline_blank?(x)
      for y in 0...@height
        return false if self[x, y] == BLACK
      end
      return true
    end

    # 上下のマージン削除した新しいPixelMatrixを返す。
    # returns:: PixelMatrix
    def cutoff_vmargin
      pixel = PixelMatrix.new(0, 0, true)
      head = 0
      tail = self.height - 1

      head.upto(tail) do |y|
        if !self.hline_blank?(y) then
          head = y
          break
        end
      end
      tail.downto(head) do |y|
        if !self.hline_blank?(y) then
          tail = y
          break
        end
      end

      head.upto(tail) do |y|
        0.upto(self.width - 1) do |x|
          pixel[x, y - head] = self[x, y]
        end
      end

      return pixel
    end
    
    # 自身の上下のマージン削除する。cutoff_vmarginの破壊版。
    # 速度稼ぎのために直接@matrixを触ったり、すこしずるをしている。
    # 効率は、ほんの少しだけ速くなったような誤差の範囲のような感じ。
    # returns:: self (PixelMatrix)
    def cutoff_vmargin!
      head = 0
      tail = self.height - 1

      head.upto(tail) do |y|
        if !self.hline_blank?(y) then
          head = y
          break
        end
      end
      tail.downto(head) do |y|
        if !self.hline_blank?(y) then
          tail = y
          break
        end
        @matrix.delete(y) if @matrix.has_key?(y)  # XXX
      end

      if head > 0 then
        head.upto(tail) do |y|
          next if !@matrix.has_key?(y)            # XXX
          @matrix[y - head] = @matrix.delete(y)   # XXX
        end
      end
      self.height = tail - head + 1

      return self
    end
    
    def each_with_axis
      for x in 0...@width
        for y in 0...@height
          yield(x, y)
        end
      end
    end
  end
end

class DeCAPTCHA::Site::YourFileHost::Token
DIGITS_ASSOC = [
  # 0
  ["00000000011111110000000000",
   "00000001111111111110000000",
   "00000011111000001111000000",
   "00001111111100010011110000",
   "00011111100000110000111000",
   "00111111000000100001111000",
   "00111111110001000001111100",
   "01111111000010000011111110",
   "01111100000110000111111110",
   "01111111000100000111111110",
   "11111100001000001111111111",
   "11100000001000011111111111",
   "11111000010000011111111111",
   "11111000110000111111111111",
   "10000000100001111111111111",
   "01100001000001111111111110",
   "01100010000011111111111110",
   "01100010000111111111111110",
   "00111100000111111111111100",
   "00011100001111111111111000",
   "00001100011111111111111000",
   "00001111111111111111100000",
   "00000011111111111111000000",
   "00000000111111111100000000"],
  # 1
  ["00001",
   "00111",
   "11111",
   "11111",
   "10001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001",
   "00001"],
  # 2
  ["0000011111111110000000",
   "0001111111111111000000",
   "0011110000000010000000",
   "0110000000000100000000",
   "1100000000001100011110",
   "1000000000001000001111",
   "1000000000010000000111",
   "1000000000110001111111",
   "1000000000100001111111",
   "1000000001000000011111",
   "0100000011000001111111",
   "0011000010000111111110",
   "0011000110000001111110",
   "0000001100000111111100",
   "0000001000011111110000",
   "0000011000000111100000",
   "0000110000000000000000",
   "0000111111111111111111",
   "0001111111111111111110",
   "0011111111111111111100",
   "0011111111111111111100",
   "0111111111111111111000",
   "0111111111111111110000"],
  # 3
  ["000000011111111110000000",
   "000001111111111111100000",
   "000011100000011111111000",
   "000111000000111111111000",
   "000110000001111111111100",
   "000100000001111111111100",
   "000100000011111111111100",
   "000110000111111111111000",
   "000010000111111111111000",
   "000000001111111111100000",
   "000000011111111111000000",
   "000000011111111110000000",
   "000000000000001100000000",
   "000000000000011100011100",
   "000000000000111000111110",
   "000000000000110000001110",
   "000000000001110001111111",
   "110000000011100011111111",
   "111000000111000000111110",
   "011100000110001111111100",
   "001111001110000111111000",
   "000011111100000011100000",
   "000000011000111000000000"],
  # 4
  ["0000000000011",
   "0000000000011",
   "0000000000111",
   "0000000001111",
   "0000000001111",
   "0000000011111",
   "0000000111111",
   "0000000110111",
   "0000001100111",
   "0000011100111",
   "0000011000111",
   "0000110000111",
   "0001110000111",
   "0001100000111",
   "0011000000111",
   "0111000000111",
   "0111111111111",
   "1111111111111",
   "0000000000111",
   "0000000000111",
   "0000000000111",
   "0000000000111",
   "0000000000111"],
  # 5
  ["000000001111111111111110",
   "000000011111111111111100",
   "000000111111111111111100",
   "000000111111111111111000",
   "000001111111111111110000",
   "000011100000000000000000",
   "000011011111111110000000",
   "000111111111111111000000",
   "001111100000000111000000",
   "001110000000000110001100",
   "000000000000000100011110",
   "000000000000001100000110",
   "000000000000011000011111",
   "000000000000011001111111",
   "000000000000110000011111",
   "000000000001100000111111",
   "110000000001100111111110",
   "011000000011000001111110",
   "011100000110000011111100",
   "001111000110011111111000",
   "000111111100001111110000",
   "000001111100000011000000",
   "000000001000011000000000"],
  # 6
  ["000000000000000110000000",
   "000000010001111111111000",
   "000001110000011100111100",
   "000011100000011000001000",
   "000111000011111000000000",
   "001111000001110000000000",
   "001110000000111100000000",
   "011110001111111111100000",
   "011100000111000011110000",
   "011000000010000001111000",
   "011000011110000011111100",
   "010000111100000111111110",
   "100000001000000111111110",
   "100001111000001111111111",
   "000011110000011111111111",
   "000000100000011111111111",
   "000011100000111111111111",
   "001111000001111111111110",
   "000010000001111111111110",
   "001110000011111111111100",
   "000111000111111111111000",
   "000011111111111111110000",
   "000000111111111111000000",
   "000000000111111000000000"],
  # 7
  ["0011111111111110001111",
   "0011111111111100000011",
   "0111111111111000000110",
   "1111111111111000111100",
   "1111111111110000001100",
   "0000000000000000011000",
   "0000000000000011111000",
   "0000000011000000110000",
   "0000001110000011100000",
   "0000011110001111100000",
   "0000111100000011000000",
   "0001111000000110000000",
   "0001111000111110000000",
   "0011110000001100000000",
   "0011110000001000000000",
   "0011100011111000000000",
   "0011000001110000000000",
   "0001000000110000000000",
   "0000000111100000000000",
   "0000000111000000000000",
   "0000000011000000000000",
   "0000001110000000000000",
   "0000001100000000000000"],
  # 8
  ["0000000111111111110000000",
   "0000011111111111111100000",
   "0000001111100000011110000",
   "0000000001110000000111000",
   "0011000011111000000011100",
   "0011100001111100000011100",
   "0011110000001110000011100",
   "0001111000011111000111000",
   "0000111100000111101110000",
   "0000011110000001111100000",
   "0000001111000011111110000",
   "0000111111110000011111000",
   "0011110011111000001111100",
   "0111100001111100011111100",
   "0111000000111110000111110",
   "1111000000011111000000111",
   "1111000000001111100011111",
   "1111000000000011111000010",
   "0111100000000001111100000",
   "0011110000000000111110000",
   "0001111110000001111110000",
   "0000011111111111111000000",
   "0000000011111110000000000"],
  # 9
  ["000000111111111110000000",
   "000001111111111111100000",
   "000111111111111001111000",
   "001111111111110000010000",
   "011111111111110000010000",
   "011111111111100000100000",
   "011111111111000001100000",
   "111111111110000001000111",
   "111111111110000010000001",
   "111111111100000110000111",
   "011111111000000100011111",
   "011111111000001000001111",
   "001111110000011000011111",
   "001111100000010001111110",
   "000111110000100000011110",
   "000001111111100000111110",
   "000000011111000111111100",
   "000000000010000001111100",
   "000000000110000001111000",
   "000100001100011111110000",
   "000111001100001111100000",
   "000011111000001111000000",
   "000000010000110000000000"],
]
end
__END__

2008-10-06

YourFileHostのCAPTCHA画像をなんとかする

破ろうぜ!CAPTCHA画像♪(うっうーん)

そんなわけで、みんな大好きなYourFileHostだけども、最近みてみたら、なんかCAPTCHA認証がついているわけじゃないですか。

でもこれってさーCAPTCHAといっても見るからに危ういというか、見れば見るほど簡単に破れてしまいそうな気がして、どうにもむずがゆいアンニュイな気分になってしまうわけです。

そんで、このたび適当にいじってみたところ、それなりに推測できるコードが書けたので、ここに張ってみますね。

やってることは単純で、こんな感じ

  1. CAPTCHA画像ファイルをよみこむ
  2. ピクセルごとにグレイスケールにして、それで2値にする
  3. この時点でじゃまな背景が消えて、文字の形がわかってしまうわけです
  4. 縦軸に点がないところで切って、文字ごとにばらばらにする
  5. 文字画像のサンプルと比較して、一致率が高いものを採用

使い方は、こんな感じで

require 'decaptcha.rb'
captcha_string = DeCAPTCHA.decode(filename)
if !captcha_string.nil? then
  # 判別成功時の処理
else
  # 判別失敗時の処理。失敗することもあるのでよしなに。
end

あ、Ruby/GD2入れといてね。sudo gem install gd2とかで入ります。多分。

判別率はそこそこ良い感じになったんだけども、富豪プログラミングがたたってか、いかんせん遅いです。

手元だと1枚判別するのに20秒くらいかかることもある。

そんなわけで誰かチューニングしてくれるとうれしい。

追記

実行速度を上げた改良版はこっちにうpしました。以下のコードは参考程度に。

コード (decaptcha.rb)

#!/usr/local/bin/ruby
require 'rubygems'
require 'gd2'
require 'pp'

#
#= CAPTCHA画像解析モジュール
# CAPTCHA画像ファイルを食わすとあら不思議Stringが出てくるよ。
# YourFileHostのやつに対応。
#
#== Usage
# decoded_str = DeCAPTCHA.decode("some_captcha_image.gif")  #=> String
# 失敗したらnilが返る。
#
module DeCAPTCHA
  DEBUG = false

  #=== CAPTCHA画像デコード
  # file::    画像ファイル名のパス
  # method::  未指定でよい。男は細かい事を気にするな。
  # returns:: CAPTCHA画像解析結果(String) or nil (デコード失敗時)
  def self.decode(file, method = DeCAPTCHA::Site::YourFileHost)
    return method.new(file).decode
  end



  #= CAPTCHA画像デコードクラス
  # このクラスサブクラスはimport, tokenize, stream_parseメソッドの
  # 実装を含む必要がある。
  class Site
    def initialize(file = nil)
      @pix = nil
      self.import(file) unless file.nil?
    end
    def decode
      return stream_parse(tokenize())
    end
  end

  #= YourFileHostのCAPTCHA画像を解析するクラス
  class Site::YourFileHost < Site
    def import(file)
      @pix = PixelMatrix.new.import(file)
      return self
    end

    # importしたイメージ(PixelMatrix)から、文字と思わしきパターンを
    # 抽出して上下マージンを切り取ってArrayにして返す。
    # returns:: Array of PixelMatrix
    def tokenize
      getter, tokenizer = lambda {|queue|
        [ lambda { return queue },
          lambda {|x, pixel|
            if pixel.nil? then
              x, pixel = tokenizer.call(x, PixelMatrix.new(0, 0, true))
              queue << pixel
              return x
            end
  
            if !@pix.in_range?(x, 0) or @pix.vline_blank?(x) then
              return [x, pixel]
            end
            x0 = pixel.width
            @pix.vline(x).inject(0) do |y, color|
              pixel[x0, y] = color
              y + 1
            end
            return tokenizer.call(x + 1, pixel)
          }
        ]
      }.call([])

      x = 0
      while (x < @pix.width)
        x = @pix.vline_blank?(x) ?
          x + 1 :
          tokenizer.call(x, nil)
      end

      getter.call.map do |token|
        # Token.new.import(token.cutoff_vmargin.shrink)
        Token.new.import(token.cutoff_vmargin)
      end
    end

    # PixelMatrixのArrayを受け取り、数字を判別。
    # tokens:: Array of PixelMatrix
    # returns:: String (判別結果)
    def stream_parse(tokens)
      r = []
      tokens.inject(nil) do |prev, cur|
        r << cur.guess
      end

      rs = r.map {|x| x.to_s}.join('')
      if rs.length != 4 then
        if DEBUG then
          puts '- guess failed. dumping guess result of each token:'
          tokens.each_index do |i|
            print "##{i}: "
            pp tokens[i].candidate
          end
          puts
        end
        return nil
      end
      return rs
    end

    class Token
      @@digits = nil
      attr_accessor :candidate

      def initialize
        if @@digits.nil? then
          # 文字画像サンプルを作っておく
          @@digits = DIGITS_ASSOC.map {|assoc|
            PixelMatrix.new(0, 0, true).import_assoc(assoc) }
        end

        @candidate = Hash.new
      end

      # PixelMatrixを受け取り、文字画像サンプルと比較して
      # 一致率を計算しておく。
      # pixel:: PixelMatrix
      # returns:: self
      def import(pixel)
        gcd = lambda {|a, b|
          a, b = [b, a] if a < b
          return a if b == 0
          r = a % b
          return gcd.call(b, r)
        }
        lcm = lambda {|a, b| a * b / gcd.call(a, b) }
        mul_to_lcm = lambda {|a, b|
          g = gcd.call(a, b)
          [b / g, a / g]
        }

        0.upto(@@digits.size - 1) do |i|
          if (@@digits[i].width - pixel.width).abs   > 4 or
             (@@digits[i].height - pixel.height).abs > 4 then
            @candidate[i] = -1  # 比較対象とサイズが違いすぎ
            next
          end

          mul_ax, mul_bx = mul_to_lcm.call(@@digits[i].width,  pixel.width)
          mul_ay, mul_by = mul_to_lcm.call(@@digits[i].height, pixel.height)
          enlarged_width  = @@digits[i].width  * mul_ax
          enlarged_height = @@digits[i].height * mul_ay

          # 文字画像サンプルと比較対象画像のサイズをあわせる
          # 幅・高さをそれぞれ適当整数倍して、最小公倍数に合わせて比較
          # (めんどうだから)
          correct_bits = 0
          (0...enlarged_width).each do |x|
            (0...enlarged_height).each do |y|
              if @@digits[i][x/mul_ax, y/mul_ay] ==
                 pixel[x/mul_bx, y/mul_by] then
                correct_bits += 1
              end
            end
          end
          
          @candidate[i] = correct_bits * 100 /
                          (enlarged_width * enlarged_height)
        end

        return self
      end

      # importのときの比較結果をもとに文字を推測
      # returns:: Fixnum or nil(失敗時)
      def guess
        digit, ratio = @candidate.sort {|a, b| a.last <=> b.last}.last
        digit = nil if ratio < 0 or ratio < 80
        return digit
      end
    end
  end


  #= 画素マトリックスクラス
  # 画像ファイルを食わせると、各ピクセル(画素)を2値(black(1) or white(0))に
  # 変換して、内部で保持する。
  # 以後、Matrixクラスのような感じで個々の画素アクセスできる。
  class PixelMatrix
    BLACK = 1
    WHITE = 0

    attr_accessor :width
    attr_accessor :height

    # width::  幅
    # height:: 高さ
    # is_flexible:: 自動的に伸張するか
    def initialize(width = 0, height = 0, is_flexible = false)
      @matrix = Hash.new {|hash, key| hash[key] = Hash.new(WHITE)}
      @width, @height, @flexible = width, height, is_flexible
    end

    # file:: 画像ファイル名のパス
    # brightness_threshold:: 画素を黒とみなす閾値 (0 - 255, default: 0x40)
    # returns:: self (DeCAPTCHA::PixelMatrix)
    def import(file, brightness_threshold = 0x40)
      gd = GD2::Image.import(file)
      @width, @height = gd.width, gd.height

      self.each_with_axis do |x, y|
        color = gd[x, y]
        greyscale = (color.red + color.green + color.blue) / 3
        self[x, y] = (greyscale > brightness_threshold) ?
          WHITE :
          BLACK
      end
      return self
    end

    # reverse function of to_assoc
    def import_assoc(assoc)
      assoc.inject(0) do |y, columns|
        columns.inject(0) do |x, color|
          self[x, y] = color
          x + 1
        end
        y + 1
      end
      return self
    end

    # PixelMatrixを画像ファイルとしてexport
    # file:: 新たに作る画像ファイル名のパス
    def export(file)
      gd = GD2::Image::IndexedColor.new(@width, @height)
      gd.palette << GD2::Color::WHITE
      gd.palette << GD2::Color::BLACK
      self.each_with_axis do |x, y|
        gd[x, y] = {
          WHITE => GD2::Color::WHITE,
          BLACK => GD2::Color::BLACK,
        }[self[x, y]]
      end
      gd.export(file)
      return self
    end

    def to_assoc
      (0...@height).map do |y|
        (0...@width).map do |x|
          self[x, y]
        end
      end
    end

    # 指定された位置の画素を返す。
    # returns:: PixelMatrix::BLACK(1) or WHITE(0)
    def [](x, y)
      if !@flexible and !in_range?(x, y) then
        raise RangeError
      end
      return @matrix[y][x]
    end

    # 画素に値を設定。
    # returns:: PixelMatrix::BLACK(1) or WHITE(0)
    def []=(x, y, val)
      unless in_range?(x, y) then
        raise RangeError unless @flexible
        @width  = (x >= @width)  ? x + 1 : @width
        @height = (y >= @height) ? y + 1 : @height
      end

      @matrix[y][x] = val
    end

    def in_range?(x, y)
      ((0...@width) === x and (0...@height) === y)
    end

    # 指定された軸をもとに画素を走査し、Arrayに変換。
    # 例えば、to_a(:vertical, 10) とすると、x == 10 な列を取り出して
    # Arrayにして返す。
    #
    # axis:: 軸を指定 (:vertical または :horizontal)
    # pos:: 位置を指定。_axis_で指定した軸と直交する軸における位置を指定。
    def to_a(axis, pos)
      {:vertical => lambda {
        (0...@height).map {|y| self[pos, y]}
       },
       :horizontal => lambda {
        (0...@width).map  {|x| self[x, pos]}
       },
      }[axis].call
    end

    # returns:: Array
    def hline(y)
      self.to_a(:horizontal, y)
    end

    # returns:: Array
    def vline(x)
      self.to_a(:vertical, x)
    end

    # X軸方向に画素を走査。
    # y:: どの位置で走査するか
    # returns:: 指定された軸の上にドットが存在: false, 無い: true
    def hline_blank?(y)
      hline(y).find {|color| color == BLACK }.nil? ?
        true : false
    end

    # Y軸方向に画素を走査。
    # x:: どの位置で走査するか
    # returns:: 指定された軸の上にドットが存在: false, 無い: true
    def vline_blank?(x)
      vline(x).find {|color| color == BLACK }.nil? ?
        true : false
    end

    # 上下のマージン削除した新しいPixelMatrixを返す。
    # returns:: PixelMatrix
    def cutoff_vmargin
      pixel = PixelMatrix.new(0, 0, true)
      head = 0.upto(self.height - 1) do |y|
        break(y) if !self.hline_blank?(y)
      end
      tail = (self.height - 1).downto(0) do |y|
        break(y) if !self.hline_blank?(y)
      end

      head.upto(tail) do |y|
        y0 = pixel.height
        self.hline(y).inject(0) do |x, color|
          pixel[x, y0] = color
          x + 1
        end
      end

      return pixel
    end
    
    def each_with_axis
      (0...@width).each {|x|
        (0...@height).each {|y|
          yield(x, y)}}
    end
  end
end

class DeCAPTCHA::Site::YourFileHost::Token
DIGITS_ASSOC = [
# 0
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
],
# 1
[[0, 0, 0, 0, 1],
 [0, 0, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1]],
# 2
[[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
 [0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]],
# 3
[[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
# 4
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]],
# 5
[[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
 [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
# 6
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
 [0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
# 7
[[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1],
 [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0],
 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0],
 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
# 8
[[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
 [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
 [0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0],
 [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1],
 [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0],
 [0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
# 9
[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1],
 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1],
 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1],
 [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
 [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0],
 [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
 [0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
 [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
]
end


__END__
Dir.glob('*.gif').each do |file|
  puts "Processing file: #{file}"
  p DeCAPTCHA.decode(file)
end

__END__

2008-08-19

http://anond.hatelabo.jp/20080819215700

ベクトル空間の話とかは、確かに「概念を数式化した」って感じがするなあ。直交性とかね。

2008-07-30

http://anond.hatelabo.jp/20080730192503

どうしても理解できないみたいだからもう一度言うぞ。


レベル」の定義男と女で異なるという前提に立て。

女にとって低レベルなことが男にとってもそうであるとは限らない。

それは男にとって低レベルex:感情面を強調する)なことが女にとって低レベルとは限らないのと同じだ。

評価軸となるベクトル直交してるんだよ。プロジェクションはゼロだ。どちらかの尺度に落して考えるのは意味がない。

プロジェクションの意味http://ja.wikipedia.org/wiki/%E5%B0%84%E5%BD%B1参照)

2008-06-21

http://anond.hatelabo.jp/20080621184000

連立方程式行列で一般化されるのは、行列がそういう目的で作られたから。

逆行列を使って解けるのは便利だし、解けない場合が存在するというのも逆行列

経由すると理解しやすい。


指数対数も便利。掛け算や割り算が、足し算と引き算になるから。

対数を使った単位のdBなんかもある。

でも平均する場合は、いったん逆対数変換をしないといけないのが面倒。


電気関係を学ぶと虚数が実際に存在する数だと感じられる。

複素数の表示に直交座標のガウス平面でなくて、スミスチャートを使うと無限の範囲が

有限に収まるのでこれまた便利。実はよくわかっていないんだけど。

2008-05-25

http://anond.hatelabo.jp/20080525234029

民主主義者」だの「民主主義を否定している」だのというような言説は

それ自体がかなり電波レッテル貼りと化しているのと思われ。

だわなぁ。

左翼民主主義者を自称している」と言い張ってる増田は、綺麗に一周して新しい感じの電波を発してるようだが。

経済政策民主主義直交した概念だし、右翼にしろ左翼にしろ「相手は○○だが自分は民主主義者だ」なんて言ってる奴見たことねえ。

共産主義民主主義に反するといった言説は時々見かけないでもないが。

2008-05-10

ファッション宗教である。お返事

いろいろお返事いただいたようで、それについて。まずはブクマ

b:id:kennak 増田 極論気味だが内面は外に滲み出るものだと思う いわば外への自分の表現方法のひとつ それも解りやすく汎用化されたもの それに興味がないと言う事は他人にも興味のない自分の内面を外に出そうともしないって事に

内面を表現しないといけない理由がありません。どこかの「実名ブログで自分を『見える化』しよう!」なんて言ってたなんちゃってコンサルじゃないんだから。自分の心の繊細な部分は信頼する相手にだけ見せるという考え方もあって然るべきだし、ましてそれを服飾で表現しないといけない理由なんてどこにもありません。

b:id:b_say_so 変わる気があってだけどできません><だったらまぁやってみとはいうが…/受験勉強が面白いならファッションも同軸上だと思うけどねぇ

むしろ俺計量によればファッション受験勉強はほぼ完全に直交しております。受験勉強は最先端の科学技術あるいは文化芸術へのアクセス手段を与えてくれますし、勉強の過程でその片鱗を垣間見て胸をときめかせることもできますが、ファッションからそのようなものが得られるわけがあるとも思えません。これほど水と油なものはないでしょう。

b:id:mirrorperson >なぜなら、漏れなく彼氏彼女という御利益がついてくるからです ←んなことない というかおしゃれとかじゃなくケミカルウォッシュはやめておくとかいうマナーレベルはこなしておこう。

ケミカルウォッシュ」って何ですか?「ぐぐれカス」とか言われそうなのでぐぐってみましたが全然わかりません。ですがまあ、普通の人が普通に出入りする店で売っているようなものを買って着ることが「マナー違反」であるというのはどう考えても常識外れでしょう。そういう私は"Levi=Strauss"を「レヴィ・ストロース」と読んだところ人に馬鹿にされましたYO!


次に、d:id:hrkt0115311氏のこの記事

自分が気に入ったもの、もしくはいいと思ったものを、「いい」と信じて着るわけだから、宗教っちゃ、宗教かもしれませんねぇ。

いや、それを宗教だと言ってるんじゃありません。自分が好感を持ったものを「いい」と信じるのは単なる「趣味」でしょう。しかし、その趣味同調しない他人を「お前は愚かだ」だの「悔い改めよ」だの「地獄に堕ちるぞ」だのと脅かし、「キモい」「ウザい」「死ねばいいのに」と差別・弾圧するのであればこれは宗教です。それもかなりたちの悪い宗教です。それを私は批判しているわけです。

でも、例えばCSSの着せ替えやデザインの配色などをイメージしていただきたいのですが、あれって丸暗記でしたっけ?

俺にとっちゃ丸暗記ですなあ。正直、ITの世界は次から次へと新しい言語だの仕様だのが出てきて辟易する。プログラミングだのデザインだなんてのは俺の仕事にとっては非本質的なので、そんなことに時間を使われたくないです。

私は、ファッションに関してスキルが高い人は、話がうまい人や聞き上手同様、頭悪いとできないと思うんですけれども。

当然ですよ。むしろ、その自覚を持って欲しいと私は思います。自分が頭がよいという自覚のある人は、「俺がこれだけできるのだからお前もそれだけできて当然、できないのは努力が足りないサボりなのだから自己責任」なんて無茶なことは言いません。

頭がいいから丸暗記できたのか、試行錯誤しているうちに頭も磨かれたのか、あるいは別の理由なのか。

好きな人にとっては知識を身に付けていくことが至福の過程、興味のない人間にとっては丸暗記はまさに「苦悶式」そのもの、それは普通のことだとおもいます。


その他。

俺もジーパン派。

ジーンズもありえないだろうJK

http://anond.hatelabo.jp/20080509121831

ジーンズ」と「ジーパン」は区別される語だったのか。「フィレンツェ」と「フローレンス」が同じ街だということを知ったとき以上の衝撃です。

2008-05-09

http://anond.hatelabo.jp/20080509083551

元より知識と論理性は直交した概念ですがな

知識量は論理性を何ら助けない

2008-05-06

「爆発音がした」まとめ 上

2009.05.08 長すぎて1つの記事では全てを表示できないようなので、2分割しました。

「爆発音がした」まとめ 下 - http://anond.hatelabo.jp/20090508095607



小説

「後ろで大きな爆発音がした。俺は驚いて振り返った。」

ケータイ小説

「ドカーン!俺は振り返った。」

ライトノベル

「背後から強烈な爆発音がしたので、俺はまためんどうなことになったなぁ、とかそういや昼飯も食っていないなぁとか色々な思いを巡らせつつも振り返ることにしたのである。」

作家

石田衣良

「ふー、びっくりした」

サイレントマジョリティーを考慮に入れて振り返るかどうか決めさせていただきます

宇能鴻一郎

「あたしの後ろで、大きな音がしたんです。あたし、もう、ビックリしちゃって、振り向いた。」

「あたし,ムッチリとした女子高生なんですけど,後ろですっごく大きくて背筋がぞっとしちゃうような爆発音が(以下略

大江健三郎

「後ろから大きな爆発音が聞こえた。女の膣がこすれるような音だった。こいつは、勃起させる!」

神林長平

「爆発したのかしらん」

背後で爆発音。ラテル、即座に対衝撃姿勢。ラジェンドラが衝撃回避の機動を取る。ショートΩドライブでは間に合わない。衝撃回避機動と同時に無照準でCDSバラージ。目標は沈黙。

アプロ、舌なめずり。「うまそうな爆弾キャンディ

「振り返るんじゃない」

「なぜだ」

「君は何かを感じたようだが、わたしは違う。わたしにとっては、今のところ、何も起こってはいない」

「ばかな。確かに後ろで爆発が──」

「その目で見たわけではないだろう。背後の風景とは、非連続的なものだ。振り向くよりも先に何らかの方法で破壊痕を見せつける、などの欺瞞工作も考えられる」

「おれ一人の視覚や聴覚を騙すことに意味があるとは、思えない」

「可能性はある、ということだ。それに君一人とも限らん。君かわたし、あるいは両方とも、この状態に陥っているんだ。人為的なものではないかも知れない」

「空間が、おれの、あんたの、認識を撹乱しているというのか」

「もっと単純に、病気の一種かもな」

「あんたはもっと真面目に自分の病気を疑うべきだ」

「健康な人間にしても、自分の感覚しか信じていないものさ。みな異なる主観に生きているんだ。認識のずれなどは、どこにでもある」

「フムン」

「問題は、今回のそれが些か極端ということだ。空間の例えはよかったな。このままずれが進めば、我々は互いの姿を見失うかも知れん。だから、振り返るな。この先に集中しろ」

菊地秀行

「轟音がアルタ前に響いた。続いて爆風が彼の白衣を撫でた。

だが、轟音や爆風ですら、彼の前では礼節を弁えて静寂を保っているかのように見えた。

それが彼――メフィストなのだから。

彼は振り返らなかった。その背中を、月が照らしていた。」

ダニエル・キイス

どーかついでがあったらアルジャーノンのおはかに爆発をそなえてやてください。

kiki

「アタシ     




爆発?     




しない訳ないじゃん     




みたいな」

北方謙三

「不意に、背後から、爆音が轟いた。俺はまだ、死んでいない。足を懸命に、動かした。天地が、ひっくり返った。何も、聞こえなくなった。」

「後ろ。爆発。振り返った。風。」

「後ろで、大きな、爆発音が、した。

振り返る。

刃が、せまって、いた。皮膚が、粟立つ」

「音。振り返る。爆発。今ではそう、思い定めている。

そんなことより、童貞ども、ソープに行け。」

京極夏彦

「凄まじい音とともに地面が揺れる。

――爆発、ですか?

私が問うと、彼は白湯とさして変わらぬ出涸らしをすすり、

――だから何だと言うのか。

と答えた。

――何だ、と言うが、あの爆発が君に何の関わりがあるのかね。

――危険じゃないのか?

言いながら私は、その問いに彼がどう答えるかを予測していた。

予測していながらそれを問う。あまりにも愚かだ。

――危険などと言うが、あんな爆発などなくても、危険などは市井のそこらに転がっている。

――不発弾など何処に埋もれているか知れたものではない。

――車に轢かれる事も、誰かに刺される事もあるかも知れない。

――体の何処かが遣い物にならなくなる事だってある。

――特に君のような不摂生は、危険の塊ではないか。

りん、と、何処かで風鈴の音がした。」

「爆發音がしたので、中禅寺は逃げた方が良いと云った。」

スティーブン・キング

そのとき背後でとてつもない音がした。いや、単に音がしたなどという生易しいものではなかった。それは西海岸に住む者なら誰もが「いつか来るでかいやつ」と恐れるあの巨大地震がついに来たのかと思わせるほどの圧倒的な音量で炸裂した。そして音そのものがまるでコミックブックに出てくる大げさな擬音の書き文字のような存在感を持って背中にぶち当たり、打ちのめし、気がつけば私は埃っぽい床に額をこすりつけたまま伸びていたのだった。


一体どのくらい気を失っていたのだろうか。世界を覆いつくす大惨事の予感から最早どうとでもなれという諦めに囚われかけた刹那、しばらく前に買出しに出たまま戻らない妻と幼い娘の顔が私の心をよぎった。その顔は、娘を抱いた妻がポンコツのビュイックに乗り込む直前、あなたは疲れているんだから家で休んでいなさいと言って譲らなかったときの -そのときの妻の顔は眩いばかりの春の陽光に金色に縁取られてまるで世界中のあらゆるものを祝福しているかのように見えた -どこかいたずらっぽい小娘めいた笑顔だった。


私はまだくらくらする頭を抱えながらゆっくりと立ち上がり、何事もなかったかのように静まり返った部屋の中央で馬鹿のように突っ立ったまましばらく考えた。そしてようやく先ほど背後から聞こえた凄まじい音の正体が、自分のひり出した屁に過ぎないことに思い至った。

アーサー・C・クラーク

「高名だが年配の科学者が爆発であると言った場合、その主張はほぼ間違いない。また不発であると言った場合には、その主張はまず間違っている。」

J・D・サリンジャー (野崎孝)

「後ろからインチキ臭い爆発音が聞こえたんだよ。僕は振り返ろうとしたんだけど、そんなことをしたら僕はげえげえ吐いてしまうよ。爆発音の十中八、九は反吐が出るようなカスなんだぜ、本当に。」

椎名誠

ドアのでどん、と大きな音がした気がした。しかし先ほどのやりとりの疲れで休息に酒がまわっていたおれはまあいいや、どうだって…と思うだけで、さっさとベッドにもぐりこんだ。

テントの外でどーん、と大きな音がした。どうせ酔ったサーノが焚き火になにか放り込んだのだろう。「うるさいぞウスラバカ!」とおれはどなり、寝袋を頭からかぶった。

「つまりワタクシが背すじをただして言いたいのは、先程後ろのほうから破壊衝撃的大盛りべらんめえ的なナニモノかがどおんどおおんと音を立ててバクハツした! ということなのであります。」

志賀直哉

「背後で轟音が鳴った。自分は振り返った。」

司馬遼太郎

「(爆発--)

であった。

余談だが、日本に初めて兵器としての火薬がもたらされたのは元寇の頃である…」

高千穂遥

「きれいに終わったわね~」

「事件も全部解決したし、今度という今度は誰にも文句言わせないよね~」

「………」

「そういえばさ、発進の時、なんか紐みたいなの燃えてなかった?」

「ああ、なんかあったね。ロープじゃない?」

「あたし、聞いたことあるんだけど…。あの星って地核が爆薬でできてるじゃない」

「うん。前の大戦が終わって不要になったのを全部あそこに集めたんだよね~」

「そんな星あぶないから誰も住まないだろうと思っていたら、ならず者たちが集まってきて、そういう人目当てに商売する人もやってきていつの間にかそこそこ大きな星になっちゃったんだって。」

「ふーん。それで誰も管理してなかったんだ。連邦の人、私たち以外には1人しかいなかったもんね。あれだけ人住んでるのに。」

「でね、連邦も考えたらしいのよ。住民が住民だからよからぬことを考えかねないじゃん」

「そっか。連邦もバカじゃないからね。だから私たちみたいなスターを送り込んだんだ!」

「そうじゃなくてさ、あの星でおとなしくしているぶんにはいいけれど、ひとたび事が起こったら星ごと爆発させられるように地核の最深部につながっている導火線作ったらしいのよ。」

「ふーん…」

「…………」

「ま、まさか、その導火線に火を付けちゃったなんて都合のいい展開あるわけないよね」

「そ、そうだよね。そんな偶然あるわけないわよ…」

「ねー」

「ねー」

次の瞬間、惑星コリプトは683万3582人の住民とともに宇宙から消えた。

谷甲州

「赤外反応、新たな爆雷の爆散円、後方の輸送船団に直交します」

増田少尉がうわずった声で言った。CRTの一箇所に固まっていた輝点が徐々に分散しはじめた。輸送船団が退避行動に入ったようだ。しかし最大加速度0.1G程度の鈍足の輸送船では、これだけ近距離で爆発した爆雷の破片から逃れることは不可能だろう。

後ろで大きな爆発音がした。そう思った瞬間、増田は体が宙に浮いたような感覚を覚えた。そして次の瞬間にザックに衝撃が来た。増田の体は振り回され、雪崩に巻き込まれたと気づいたときには、不自然な体勢で凍りついた斜面を滑落していた。

筒井康隆

「あっ。爆発した。今爆発しました。

私がここであなたとこうしている間に爆発しました。爆発。

きっとこれから火がでます。げほっ。出ます。火が出ます。

さあ逃げましょう。逃げなくてはなりません。げほごほ。げほ。」

おれは彼女の手を引くと半裸のまま髪を振り乱して走った。

歩道の通行人どもが白い目をしておれたちを見た。

http://f.hatena.ne.jp/n_euler666/20080212172154

フョードルドストエフスキー (江川卓)

「そしたら、後ろで大きな爆発音がしたんですよ、ヘ!へ!」

中沢晶子

マドンナB「ねえ、この爆発……まだ温かいわ」

西村京太郎

「後ろで、大きな、爆発音が、した。十津川は、驚いて、振り返った。」

ダン・ブラウン

「事実ではない」オリベッティが言い切った。「外部の人間が爆発に近づくことは、絶対に不可能だ。」

「もし万が一、この爆発が事実で」ロシェは繰り返した。「爆発がほんとうに行われたのだとしたら、捜索のあり方も根本から見直さなければなりません。そういった爆発行為が行われたのであれば、われわれの想像よりはるかに奥まで侵入されたことになります。ホワイトゾーンだけの捜索だけでは不十分でしょう。もしそこまで深く侵入されているとなると、時間内に見つからない可能性が出てきます」

 オリベッティは冷ややかな視線を大尉にぶつけた。「大尉、今後どうするかはわたしが指示を出す」

「いいえ」カメルレンゴが急に振り返って言った。「指示を出すのはわたくしです」まっすぐにオリベッティを見つめる。

星新一

「おめでとうございますまことにけっこうなことで」

エヌ氏が振り返ると愛想笑いを浮かべた小柄な老人が立っていた。その声を聞きエヌ氏はため息をついた。

やれやれ、なんてことだ。あれほど苦労したあげく手に入れたのが、のろわれた爆弾とは」

ジェイ・マキナニー

「きみが街を歩いていると背後で爆発音がする。でもきみはすぐには振り返らない。コカインの過剰摂取でイカレてしまったきみの頭には、それが現実の音なのか幻聴なのか判断できないからだ」

宮澤賢治

その時ふたりの後ろの方でどぉと烈しい音がしました。ジョバンニが驚いて振り返ると地面の一部が空にすいこまれるように抛り出されて煙が柱のように立つのが見えました。目をこらすとその柱のようになった煙はひとつひとつが黒々とした金剛石の粒なのでした。「発破だよ、発破だよ。」カムパネルラはこおどりしました。

村上春樹

やれやれ、そして僕は爆発した。」

「後ろで大きな爆発音がした。あるいは気のせいかもしれない。とりあえず今は驚いて振り返る前に、まずパスタをゆでようと思った。」

「後ろでシュワルツシルト・アルフィエーリの文章を思わせるような繊細な爆発がした。ステンレススティールの上にあるライトスタンドとペーパー・クリップクローゼットにしまいガソリンの味がするコーヒーを飲み干し後ろを振り返った。やれやれ、と僕は思った。」

「完璧な爆発などといったものは存在しない。完璧な絶望が存在しないようにね。」

「家の周りの道を歩いていると、後ろから大きな爆発音が聞こえてきた。

僕はウォークマンから流れる『泥棒かささぎ』の序曲を口笛で吹いていた。道を歩きながら聴くにはまずうってつけの音楽だった。

爆発の音が聞こえたとき、無視しようかとも思った。散歩の歩調はリズムに乗り、クラウディオ・アバドは今まさにロンドン交響楽団をその音楽的ピークに持ちあげようとしていたのだ。しかしやはり僕は足を止め、振り返ってそちらをみた。なにか言い知れない大きなものが、漸進的に僕の方へと近づいてくるのを感じたからだ。」

村上龍

「後ろで爆発音がした、汚い猫が逃げる、乞食の老婆が嘔吐して吐瀉物が足にかかる、俺はその中のトマトを思い切り踏み潰し、振り返った。」

「その時、後ろで大きな爆発音が聞こえ、俺はハシシを吸いながら女のビラビラを手で弄くっていたのだが驚いて女をぶちながら振り向いた。」

山田悠介

「後ろからの爆発音がした。俺は驚きながら爆発音に振り返った。それは、結局爆発音だった。」

「"ドカーン"遥か後ろで不意に爆発音がした。俺は後ろを振り返った。別にどうでもよいが…」

「後ろで大きな爆発音の音が背中でした。俺はびっくりと驚いて、ランニング状態で足を止めたまま後ろが振り返った。」

夢枕漠

一瞬の光の後、ごう、という音と共に周りの空間が歪んだ。

「爆発か」

「そのようだな」

「確かめなければなるまいよ」

「うむ」

「行くか」

「行こう」

そういうことになった。

「どぉん。

爆発した。

しなやかな獣のような肉体が、振り向く。

みしり、と音を立てる体に、ふふ、と笑った。」

ライトノベル作家

浅井ラボ

閃光が夜を切り裂いた。

緋と橙と臙脂色の炎が噴きあがり、轟音と衝撃派が街角を吹きぬけた。唐突に爆発

したそれはなおも炎上を続け、焦げ臭い熱風が頬を叩く。火の粉を散らして舞踊る火柱のなか、爆発に巻き込まれた車の骨格や人間の影が揺らめいていた。

「…誰か生きていると思うか?」

「あの業火の中で生身の人間が生きていられるなら、辞書から焼死という単語が消えるな」

相棒が呟き、俺は退屈な感想を返すしかなかった。二人そろって炎の照り返しで顔を血色に染めていた。

時雨沢恵一

「エクスプロージョン。燃焼などで気体が急激に熱膨張を起こす現象で、僕のエンジン内部でも起きてる奴だよ。托鉢ってやつさ」

「……爆発?」

「そうそれ」

奈須きのこ

――鈍、という炸裂音が、私の頭を掴み、後ろへと捻じ枉げる。

「――突如、背後から爆発音が鳴り響いた。その刹那、俺はダレよりも疾く振り返る―――ッ!」

      鈍という爆音

       轟たる爆風

背後から襲い来る圧倒的な大気の奔流に体が軋みをあげる

             ケ イ

      嫌な予感がする

       リ  テハ ケ イ

逃げようとする意識とは裏腹に、身体はゆっくりと反転していく

      フリ イテハイケ イ

  振り向くまいと必死に力を入れた首まで難なく回され

      フリムイテハイケナイ

     体が反転しきった瞬間

イケナイイケナイイケナイイケナイイケナイイケナイイケナイイケナイイケナイイケ

      意識までが反転した

「―――――――――」

閃光、爆発、衝撃―――。

消える視界、音を超え無音、予測し得る破滅。

走る石塊、破裂する風。混沌と矛盾、破壊と再生。目の前にある絶望。

気付くな。忘れろ。振り向くな振り向くなふりむくなフリムクナ―――!

――――――ああ。

それでも振り向かなくてはならない。

元よりそれは、永劫不変に定められた因果なのだから―――

竜騎士07

ドカァァン!!!後ろで大きな爆発音がした…!

瞬間的に頭の中に冷たい液体が満ち…俺のまわりの風景は動作をやめ凍りつく………………

ッッ!!!!

俺は自分の置かれた状況を整理した…。

一人…だだっ広い道…後方で爆発………ッ!!

爆発物の正体は分からないが…音は遠くから聞こえていた…。

炸裂した破片の危険はないだろう。

脳内に満ちた液体が取り除かれ、時間が動き出す…………ッッ!

即座に俺は後ろを振り向く…ッ!

ろくごまるに

「俺の左耳が爆発音を聞いたと同時に俺は可能な限り素早く体を回し回し回るその合間にに黒煙を視認する大爆発じゃないか俺は振り返った」

ラノベ

「まるで手榴弾が半ダースまとめて爆発したような轟音が背後から聞こえた。俺はここが中東の紛争地域でもチェチェンの地雷原でもない、平凡で退屈な県立高校の二階にある、教室棟と特別棟をむすぶ渡り廊下であることを確認すると、どうして俺みたいな善良な一般生徒がこんな目に遭わなければいけないんだと信じてもいない神様に悪態をついた。いっそこのまま振り返らずに立ち去ってしまおうかと思ったが、そんなことをすると後でどんな目に遭うかわからないため、自らの不運を呪いながらも視線を背後に向けないわけにはいかなかった。」

漫画家

蒼樹うめ

ばーーーん (ひだまり荘爆破)

「なーんてねっ!」

青山剛昌

コナン「ペロ…これは硝酸カリ!!」

あさりよしとお

「…つまり、物質の燃焼には可燃物と酸素が必要だということです。それでは爆発、つまり急激な燃焼を起こすにはどうしたらいいでしょうか?」

「簡単よ! 後ろを振り向けばいいのよ!」

ズバゥゥウン!!

吾妻ひでお

5 月 8 日 <何かよくわからないことが起こる>

「………」

「あなた爆弾の前で何してるんですか?」

「………」

「……こうしていると……」

「……そのうち爆発するものですから……」

天野こずえ

「どっかーん」「ほへ!?」「あー燃える男が爆発しただけよ」「でっかいそれだけですね」「あー…やっぱりショックでしたんですね…」

「この素敵な爆発に逢えたのもアクアが奇跡でできているからなんですね」

「ギャース!爆発禁止!」

灯里「あわわあわわわわ、藍華ちゃんなんだかすごい音がしたよー。」

アリス「でっかい爆発です。」

荒木飛呂彦

「僕は仰天した…

普通、背後で音がすれば振り向こうとする!!

爆発音のような大きなものなら、なおのことだ!

その振り向こうとする一瞬の隙に攻撃を仕掛けるはずだった!

しかし!奴は……

逆におもいっきり駆け出した!!

SYAAYAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHA!!!!!」

「背後から『爆発』だアァァァッ!これを待っていたっ!

振り返ると同時にッ!すかさず叩きこむ!」

「ドギュゥーーーゥウン」

「爆発など無駄無駄無駄無駄ァアアアアアアアア!!WRYYYYYYYYY!!」

「爆発だと!」

「バカな!”ありえない”!!」

「”爆弾”はここにあるのだ、後ろはいったいどうなっている!!!」┣”┣”┣”┣”┣”┣”┣”┣”┣”┣”┣”

エコーズACT3! 振り返ったお前の負けだ』

あ、ありのままのことをいうぜ・・・!

背後で凄まじい爆音が聞こえて振り向いたらそこには爆破でオシャカになった戦車が無残にも大破していた・・・!

急展開過ぎる、だとか、話が見えない。とか、そんなチャチャなもんじゃ断じてねぇ…!

これは、なんだかヤバイ事になったッ…!

いしいひさいち

「ちがうそこじゃない。」

石垣ゆうき

キバヤシ「この爆発は・・・ノストラダムスの陰謀だったんだよ!」

石川賢

「ドワオ!!」

板垣恵介

「爆発音がしたら振り返る、そんなふうに考えていた時期が俺にもありました

範馬刃牙爆発ッ!範馬刃牙爆発ッ!範馬刃牙爆発ッ!範馬刃牙爆発ッ!範馬刃牙爆発ッ!範馬刃牙爆発ッ!」

氏家ト全

「もう少しで全身の毛が陰毛になるところでしたね」

マナカ「貞操帯で防いだから大丈夫。…振り返らなくても、よかった」

江口寿史

「ここは…一丁爆発の中にとびこんでゆくほうこうで!!!」

尾田栄一郎

「  ド  ン  ! 」

「立派だった!」

鴨川つばめ

「当然爆発」

トシちゃん感激ーっ!」「もういやっ!こんなせーかつ!」

ぼくトシちゃん25歳後ろで爆発が起きる男

雁屋哲花咲アキラ

海原雄山「この爆発を作ったのは誰だっ!」

山岡士郎やれやれ、この程度で爆発だなんてほんとうにあなたが振り返ったのかさえ疑わしい。

明日もう一度ここに来て下さい、これよりうまい爆発をご覧に入れますよ」

河田雄志・行徒

中二階堂「いやー、友達居ないから暇してたら丁度よく後ろが爆発したんだ。振り返ってみたんだけど危なかったぜ。眼鏡がクッションになったよ」

岸本斉史

「これほどの爆発とは…たいした奴だ」

久保帯人

「爆発…だと…?」

久米田康治

糸色望「爆発・・・・爆発ねえ・・・・。この程度で爆発ですか!世の中には、もっと恐ろしい爆発が存在するのです!

CDの爆発的売上のあとの、ブ●クオフでの買い取り値の値崩れとか!

原子炉の爆発で露見した、ずさんな運用管理とか!

火山の爆発で吹き出した粉じんで起こる、世界的冷夏とか!

とあるゲームなど129人以上に爆発増殖させたら一人しぬだけでゲームオーバーになる始末!

そう、恐ろしいのは爆発そのものでなく、二次災害のほうなのです!」

「爆発出来るだけ良いじゃないですか、17年間の漫画家生活で一度も爆発どころか燃焼すらできない漫画家もいるのです。誰かが言いました、業界の安打製造機イチローとの扱いの差はなんですか?」

糸色望「世の中にはもっと恐ろしい爆発が存在しているのです!勝手に正義漢ぶって大見得切った挙句爆発しちゃったジャーナリストとか! 新解釈を爆発させてしまった所為で一審よりも重い刑になった弁護団とか!! 国民性が爆発してしまったマラソンとか!!!この世には自分の行動の所為でさらに悪循環に陥る、そう、自縄自爆が溢れているのです!」

糸色望絶望した!爆発音がしたら振り返るという脊髄反射社会に絶望した!

クリムゾン

「くっ悔しい、こんな爆発に振り返っちゃうなんて・・・」ビクッビクッ

車田正美

BACOOOOOOM

「なっ、なにィーーーーーーーーーーーーーーー!!」

「ば、ばかなァーーーーーーーーーーーーーーー!!」

「あ、あの爆発はァーーーーーーーーーーーーーッ!?」

「ま、まさか、あの……」

~未完~

原哲夫武論尊

BACOOOOOOM

「う、うぬぅーーーーーーーーーーーーーーー!!」

「ば、ばかなァーーーーーーーーーーーーーーー!!」

「あ、あの爆発はァーーーーーーーーーーーーーッ!?」

「ま、まさか、あの……

「知っているのかレイ!?」

宮下あきら

BACOOOOOOM

「なっ、なにィーーーーーーーーーーーーーーー!!」

「ば、ばかなァーーーーーーーーーーーーーーー!!」

「あ、あの爆発はァーーーーーーーーーーーーーッ!?」

「ま、まさか、あの……」

「知っているのか雷電!?」

ゆでたまご

BACOOOOOOM

「ゲ、ゲゲィーーーーーーーーーーーーーーー!!」

「ば、ばかなァーーーーーーーーーーーーーーー!!」

「あ、あの爆発はァーーーーーーーーーーーーーッ!?」

「ま、まさか、あの……

「知っているのかロビン!?」

許斐剛

「ワシの爆発は108式まであるぞ」

「ば…爆発!?いや…あれはボールにかかる回転が生み出す驚異的なパワーが俺達に爆発の幻影(イメージ)を見せているにすぎない!!」

施川ユウキ

「後ろで爆発してたぜ」(黒い粒はバニラビーンズです)

島本和彦

「ちッ。またヒーロータイムのはじまりかよ。」

空知英秋

「おぃぃぃぃぃ!!やべぇ、やべぇよ絶対これ!後ろで爆発?あ、あれだ、多分アバレンジャーの撮影かなんかだ!そうに違いない。」

「なんか爆発したんですけどォォォ!!!」

「ああ、アレ俺の母ちゃんだから。別に爆発とかじゃないから」

「んなわけあるか!お前の母ちゃんどんだけアグレッシブだよ!!!」

高橋留美子

ちゅどーん

………

「まったくもう最近毎日爆発ばかりでいやになりますわね」

「ほんと、お洗濯物がほこりっぽくなっちゃって…」

高橋和希

「ドカァン☆」「ドン★」 「ドカァン★なぁんて!」

高橋よしひろ

「ドルガハー」熊犬の血がたぎった。

竹内元紀

「どっかーん」「爆発?」「俺のがな」「おや俺だ」「黙れ変態ども!!」 

竹本泉

「どかーん」

「ゲホゲホ、一体何やってるんですかー!」

「…いや、そこにも自爆ボタンがあったのでつい」

「変だぜ」

ゴーン

(どかーん)

「え?なに?なに?」

「ゲホッ、ゲホ。あんた、そこのボタン押したでしょ」

「えーと、えーと」

「押すなと書いてあるのにわざわざ押すのは他にいないわよ」

「あははは…(汗) なんか気になっちゃって」

「そんな理由で押すな~っ!」

「ひえ~、ごめんなさい~」

谷口ジロー久住昌之

井之頭五郎「こういうの好きだなシンプルで、爆発って男のコだよな」

冨樫義博

「作者の急病のため、今週の爆発はお休みです。」

「後方で爆発したという認識は概ね正しい。誤算があるとすれば・・・・」

戸田泰成

カズマ「俺はこの爆発に反逆するっ!!!」

鳥山明

「ち・・地球が壊れちまう!」

「この星の爆発まであと3分しかねぇ・・(3週くらい続く)」

ながいけん

「あの爆発は陰謀じゃよ!ぎゃわー」

畑健二郎

ドーン

「どうなさいました?」

「違うのだ!紅茶を入れようとしていただけなのだ!なのになぜか爆発して…」

「それよりお怪我はありませんか?」

「い、いや…。私は大丈夫だ…。」

「(このあといったい誰が片づけると思っているのかしら)」

ばらスィー

「どっかーん!」「また爆発したよ」「またですか」「まただよね…」「またか…」

平野耕太

「諸君 私は爆発が好きだ

諸君 私は爆発が好きだ

諸君 私は爆発が大好きだ

平原で 街道

塹壕で 草原で

凍土で 砂漠で

海上で 空中で

泥中で 湿原

この地上で行われる ありとあらゆる爆発行動が大好きだ」

福本伸行

「関係ねえ 爆発なんか関係ねえんだよ‥‥‥‥‥!

オレだっ‥‥!オレだっ‥‥‥!オレなんだっ‥‥‥!肝心なのはいつも‥‥!

(ざわ‥‥ざわ‥‥)」

藤子・F・不二雄

ドラえもん「爆発するなんてきみはじつにばかだな。」

ブルル…

ドラ「わーなんだなんだ!のび太のしわざだな!やめろ!おろして!キャーヒー!」

バササ ガサガサ ガツン ドッガーーン

のび「…意外にばくはつがちいさいね」

アルファベータをかぱらったら爆発した。なぜだろう?」

藤子不二雄A

喪黒福造「ドーーーン!m9」

皆川亮二

(爆発音、そして爆炎)

「な…ば、爆発だと?!」

(瓦礫が降ってくる)

「う…うぉおおおおおおおおおおおおお!!」

山上たつひこ

「お。ししおどしか。」

山止たつひこ

「すしは、うみあ。」

ゆうきまさみ

「ちょっと足りないかな?」

なりはら博士「私は爆発するモノが大好きなんだー」

「自爆は男のロマンだぞ」




「爆発音がした」まとめ 下 -> http://anond.hatelabo.jp/20090508095607



ばくはつは、ブログソーシャルブックマークコメントなどが出典元です。

くわしくはトラックバック先の記事やはてなブックマーク等をご覧ください。

はてなブックマークhttp://b.hatena.ne.jp/entry/http://anond.hatelabo.jp/20080506041614

ついかもときどきしていきます。

2008-04-13

http://anond.hatelabo.jp/20080413222306

どうもあなたのバックグラウンドがよくわからない。

まぁ基本的な線形(偏)微分方程式フーリエ級数等の直交系で展開して解析するくらいなら余裕だけど、それだけじゃどうにもならないんですよ。統計予測だってパラメトリック分布で最尤推定するくらいならいいけど、隠れマルコフモデルを変分ベイズ法で扱うなんて話まで半年でできるほど頭良くないんです。

それだけわかってるなら変分ベイズ法なんて難しいことは少しもないように思うけれど。所詮、統計モデルを推定してるだけの話だし、変分法ってのはパラメータ無限次元になっただけだと思えばいい(実際そうだが)んだから。

経済金融勉強すべきだと思いますがね。財務諸表を読めないようじゃビジネスする上で話にならないし、

そんなのは管理職になって技術上の第一線を離れてからでいいと思うけれど。

資金の流れがわからなければ投資はできないし、

投資なんてする必要ないでしょう。せいぜい国債でも買っておけばいい。金融工学の入門書を読んでみた感想としていうのだけれど、理論にぶち込むべきデータを収集するだけでも大変だし、あの理論はだいぶ仮定が乱暴なので現実に合わせようと思えばその都度の手修正が必要だし、いずれにしても素人が下手に手出しをすると火傷するだけだと思った。あんまりそんなに何でもかんでも手を出して器用貧乏にならない方がいいと思いますよ。

http://anond.hatelabo.jp/20080413220407

敢えてマジレスするなら、最適化とか微分方程式とか統計予測とかプログラミングとかアルゴリズムなんてのは大学学部半期分ぐらいの内容だからすぐマスターできるはずだし

いやあ、それをすぐマスターできるほど俺頭良くないんですよ。まぁ基本的な線形(偏)微分方程式フーリエ級数等の直交系で展開して解析するくらいなら余裕だけど、それだけじゃどうにもならないんですよ。統計予測だってパラメトリック分布で最尤推定するくらいならいいけど、隠れマルコフモデルを変分ベイズ法で扱うなんて話まで半年でできるほど頭良くないんです。プログラムアルゴリズムはごく最近始めたばかりなんでやってるんですが。

経済金融勉強すべきだと思いますがね。財務諸表を読めないようじゃビジネスする上で話にならないし、仮に証券会社がまともになったとしても、学生に毛が生えた程度のイケイケドンドンの営業マンのコンサルティング(笑)に手数料払うなんて馬鹿げてますよ。資金の流れがわからなければ投資はできないし、産業の動向が読めなければ自分の仕事をどういう方向に進めていくかを決める際に支障がでます(例えば、現状で半導体産業に手を出してしまったりしかねない)。まぁそれらを全てフォローした上で、数理経済学の専門的な部分までは勉強する必要は無い、と言うのであればその通りだと思います。

2008-02-21

http://anond.hatelabo.jp/20080221013001

つうか、事故起こしたんだから叩かれるのはしょうがないだろう。

事態はもっと簡単なんじゃないの。そんな判断すらなかったとおもうよ。

よくみてなかったら事故っちゃった。原因はそれ以上の何者でもないでないのかな。



・漁船の乗組員は直前までもしかしたらうたたねしていた。(他の船からの無線に答えていない)

イージス艦の乗組員はすくなくとも船団に直前まで気がついていなかった。(自動航行のまま)

イージス艦の乗組員は事故前後直交代で事態をよく把握していなかった。(朝の4時が交代の時間。)


朝だから視界も悪いし、見えないよね。

べたなぎだから気も緩んでる。

で、目の前に船、

漁船「よけろ!  うわーーーー!!」

イージス艦「どかーん!  いまの何!?」


ぶつかるまえに気が付いていたとはあまり思えないな。

漁船の船団に突っ込んでるのに警笛もならしてないんでしょ?

この時期の朝の4時に相手がどれくらい大きい船なのかなんて漁船の肉眼から見えるわきゃないじゃんか。

暗黙のルールだかなんだかしらないけど「事故」はすでにおきちゃってるんだから、

悪者として扱うなという主張はいささか肩入れしすぎじゃございませんかね。


イージス艦と漁船が海洋でぶつかって漁船が沈んだ。


これだけでおなか一杯です。

国際的にも笑いものもいいところじゃないか。

2007-11-30

http://anond.hatelabo.jp/20071130144737

円の中心Cとし、円の外にある任意の点Aを考える。Aにもっとも近い円周上の点をBとする。このとき、線分ABはBに於ける円周の接線と直交する(仮に直交しない場合、Aを中心とし半径ABであるような円と元の円Cは、2点で交わる。これは「Aにもっとも近い円周上の点」という条件を満たさない)。したがって、A,B,Cは一直線上に並ぶ。

このことから、出題されている放物線上の任意の点Pと、それにもっとも近い円周上の点Q、および円の中心Cは一直線上にならぶ。CQの長さは一定であることから、PQを最短にするQは、PCをも最短にする。よって、この問題は「放物線上の点Pと点Cの最短距離」を求める問題に還元できる。

この線分の長さは円の中心座標と放物線の式が与えられることから、簡単に求められる。その長さの計算には平方根の計算が含まれるが、我々が必要とする長さは、求める点で最小かつ常に正であることから平方根の計算は省略していい。平方根の中の式を展開するとxに関する4次の多項式となる。

求める点Pでこの多項式の値が最小になることを思い出せば、多項式導関数が0になる点を求めることによってPの座標を計算できる。

2007-09-02

http://anond.hatelabo.jp/20070901053220

だが問題なのは、タバコに消費していたもの、タバコが与えていたものが減っていると言うことは、何かが増えているはずだと言うことだ。

しょっぱなから理解不能な仮定です><

例えば喫煙医療費を増やすという説がある。では医療費は減ったのか?

医療費」がどのカテゴリを指すのかわからないのですが、1人あたりの平均医療支出は現に喫煙者のほうが高いです。国全体としては高齢化やら物価やらありますし、なかなか減らないでしょう。

例えば喫煙ストレスを和らげるという説がある。

タバコうつ病など精神的な問題を引き起こします。

心の病気タバコ関係http://am.tea-nifty.com/ep/2005/01/smoking.html

患者は減ったか

早くからタバコ規制をした国々では肺がんの年齢調整死亡率が減少しています。こんな感じで(http://ganjoho.ncc.go.jp/professional/statistics/digest/digest03.html)。ここのグラフは縦軸の取り方が意味不明ですが、禁煙運動発祥の国・イギリス男性などは半減してますね。喫煙→肺がんの因果関係がないと主張する人は、最低でもこの半減の理由を説明しなければならないでしょう(他の国のことも考え合わせると答えはひとつだと思うのですが、ねえ)。

日本もご覧のように減少にさしかかったところ。高齢化絶対数は増えてますけど(念のため、年齢構成の違いという要因を除去するツールが「年齢調整」です。詳しくはぐぐってもらって)。まあ、現実に救われている命はたくさんあるわけです。

タバコ喫煙率が減って、麻薬流通量が増えたら元も子もない。

タバコ喫煙利が減って、飲酒量が増えていたらどうするというのか。

喫煙と、麻薬飲酒直交する問題だと思いますが……。とりあえず飲酒は減っていると聞いています。麻薬守備範囲外なので知りません。

今まであった物をなくすと言うことは代用品がないままになくすと言うことはどういう事か。

ニコチンの代用品なんてありませんよ。特定の依存性薬物ですから。禁煙した人はただタバコをやめるだけ。ニコチンを常時摂取する必要のない身体に改造される(というか正常化する?)だけ。

どうせ、他人の迷惑を考えない喫煙者屁理屈乙と言われるのだろう。

屁「理屈」とすら思えないなあ。最初に書いたけど前提からして謎なので。

2007-04-18

犬と組がごっちゃになってませんか

http://anond.hatelabo.jp/20070417214850

同じ勝ち負けでも犬と組は直交する別の概念なので、

勝ち組勝ち犬 (セレブ婚玉の輿、強者連合etc)

勝ち組負け犬 (遠吠え、おひとりさまバリキャリ、etc)

負け組勝ち犬 (貧乏夫婦、旦那がヒモ、etc)

負け組負け犬 (不美人フリーターetc)

の4通りがありえます。

> 30代未婚の女性負け犬だなんて誰が本気で思ってる?自ら望んでその生き方が出来るなら、思いっきり勝ち組じゃないか。

「30代未婚の女性負け犬」というのは単なる定義であって、思うか思わないかの問題ではないし、勝ち組負け組とも別(どっちの場合もあり得る)ですね。その正社員女性たちは勝ち組負け犬(予備軍)で、あなたは負け組負け犬(予備軍)なんだろうなあ、と思いました。

- 転職ならen
- 派遣ならen
 
1ページ中1ページ目を表示(合計:24件)