http://www.future-planning.net/x/modules/news/article.php?storyid=3565
http://d.hatena.ne.jp/miyakichi/20081116/1226808216
備忘録二つ。
後者は詭弁のガイドラインとして有用ですね。
Apeman氏を思い出します。
2008年8月6日水曜日
河野太郎発行メルマガ「ごまめの歯ぎしり」ブログ版 国籍法改正へに対する反論と誘導
衆議院議員 河野太郎発行メルマガ「ごまめの歯ぎしり」ブログ版
http://www.taro.org/blog/index.php/archives/885
エントリ「国籍法改正へ」のコメントの件です。
------------
29.>国籍法の重国籍の選択が、現実的には全く機能していないことから、
重国籍は容認すべきか、すべきでないかには賛否両論があります。
しっかり議論し、拙速にならないよう検討すべきでしょう。
「機能してないし、不要だから解消する」「機能してないなら、機能させるように改正する」
選択肢は大きく二つです。
今回の違憲判決はあくまで認知にかかわる国籍付与の件です。
それにしたって急ぐ必要はあるものの、問題点の検討がおろそかになってはいけません。
まして、国籍選択制度が違憲なんて話はありません。
重国籍容認という結論ありきにならぬよう、反対意見も聞き入れて頂きますよう。
コメント by NEET1Fyfuc — 2008/6/29 日曜日 @ 12:48:36
------------
このコメントは削除されずに残して頂いたのですが、
---------
42.29の方へ
国籍選択制度が違憲なんて話はありません。
重国籍容認という結論ありきにならぬよう、反対意見も聞き入れて頂きますよう。
===>実際の判決ではないですが、移民4大国(カナダ、オーストラリア、アメリカ、ブラジル)では、「国籍選択」自体が相手にされないレベルの考え方です。
反対意見を排除するつもりはありませんが、論破しまくる知識武装はすでにできています。
コメント by 皮卡丘 — 2008/7/27 日曜日 @ 5:16:11
----------
皮卡丘に反論頂いたため、返答した書き込みが削除されてしまいます。
------------
42. ピカチュウ様(私の環境では漢字表記できませんでした)
日本国は移民国家ではありません。
日本国の法律は日本国憲法に従うべきで、移民国家のルールに従う必要はありません。
議論は歓迎いたしますが、ブログのコメント欄で利用者同士が勝手に議論を始めるのは、
管理者の迷惑になってしまう恐れがあります。
ttp://yy45.60.kg/test/read.cgi/utopian/1170697183/
このような掲示板スレッドがあります。みなさん移動しませんか?
---------
というわけで、私のブログに転載しておきます。
もちろん、このブログコメント欄でも反論を受け付けますが、ルールが制定され、ルールに基づいて公正を保証されている掲示板での議論がより好ましいと思います。
というわけで、皮卡丘様およびその他議論を望む方々は、この記事を目にいたしましたら、ぜひ掲示板「解放された世界」に移動しませんか?
http://yy45.60.kg/utopian/
http://yy45.60.kg/test/read.cgi/utopian/1170697183/
「☆現実的移民受け容れ案です◎」
ここならそもそも管理人が左派の方ですので、多民族共生に好意的な方々も多くいらっしゃいます。
もちろん、右派でもルールに従う限り自由に意見できます。
http://www.taro.org/blog/index.php/archives/885
エントリ「国籍法改正へ」のコメントの件です。
------------
29.>国籍法の重国籍の選択が、現実的には全く機能していないことから、
重国籍は容認すべきか、すべきでないかには賛否両論があります。
しっかり議論し、拙速にならないよう検討すべきでしょう。
「機能してないし、不要だから解消する」「機能してないなら、機能させるように改正する」
選択肢は大きく二つです。
今回の違憲判決はあくまで認知にかかわる国籍付与の件です。
それにしたって急ぐ必要はあるものの、問題点の検討がおろそかになってはいけません。
まして、国籍選択制度が違憲なんて話はありません。
重国籍容認という結論ありきにならぬよう、反対意見も聞き入れて頂きますよう。
コメント by NEET1Fyfuc — 2008/6/29 日曜日 @ 12:48:36
------------
このコメントは削除されずに残して頂いたのですが、
---------
42.29の方へ
国籍選択制度が違憲なんて話はありません。
重国籍容認という結論ありきにならぬよう、反対意見も聞き入れて頂きますよう。
===>実際の判決ではないですが、移民4大国(カナダ、オーストラリア、アメリカ、ブラジル)では、「国籍選択」自体が相手にされないレベルの考え方です。
反対意見を排除するつもりはありませんが、論破しまくる知識武装はすでにできています。
コメント by 皮卡丘 — 2008/7/27 日曜日 @ 5:16:11
----------
皮卡丘に反論頂いたため、返答した書き込みが削除されてしまいます。
------------
42. ピカチュウ様(私の環境では漢字表記できませんでした)
日本国は移民国家ではありません。
日本国の法律は日本国憲法に従うべきで、移民国家のルールに従う必要はありません。
議論は歓迎いたしますが、ブログのコメント欄で利用者同士が勝手に議論を始めるのは、
管理者の迷惑になってしまう恐れがあります。
ttp://yy45.60.kg/test/read.cgi/utopian/1170697183/
このような掲示板スレッドがあります。みなさん移動しませんか?
---------
というわけで、私のブログに転載しておきます。
もちろん、このブログコメント欄でも反論を受け付けますが、ルールが制定され、ルールに基づいて公正を保証されている掲示板での議論がより好ましいと思います。
というわけで、皮卡丘様およびその他議論を望む方々は、この記事を目にいたしましたら、ぜひ掲示板「解放された世界」に移動しませんか?
http://yy45.60.kg/utopian/
http://yy45.60.kg/test/read.cgi/utopian/1170697183/
「☆現実的移民受け容れ案です◎」
ここならそもそも管理人が左派の方ですので、多民族共生に好意的な方々も多くいらっしゃいます。
もちろん、右派でもルールに従う限り自由に意見できます。
2008年7月21日月曜日
部分的な誤りの指摘をもって「マンガ嫌韓流」は全否定されうるか?
http://yy45.60.kg/test/read.cgi/utopian/1161281837/134
ここで、
http://d.hatena.ne.jp/yamaki622/archive?word=%b7%f9%b4%da%ce%ae
blog*色即是空さんの、嫌韓流に関するエントリーを紹介いただきました。
この本エントリーは、それに関する返答を移転したものです。
元々は、「東亜備忘録」を紹介した際に、「嫌韓流」へのリンクがあることを理由に読むに値しないと評じられたという流れがあるわけです。
http://kyouji.seesaa.net/
私は「嫌韓流」がそれほど信頼性の置けるものだとは認識してませんし、東亜備忘録の人もそうでしょう。
「とにかく日本が悪い」というレベルで固まってる人に、まず読め、という意味での紹介でしょうね。
さて、blog*色即是空さんの、嫌韓流に関するエントリーも、部分的にはなるほど興味深い情報があります。
「嫌韓流」で不正確な部分は、確かに指摘するべき問題です。
ただ、それで「嫌韓流」の論旨が否定されるほどの問題ではないにもかかわらず、全否定しようと必死ですね。
「全否定しようと無理してる」部分に限れば、私などが簡単に突っ込むことが出来ます。
以下、軽く指摘しておきます。
--------
・在日の就職差別は一部だけだった?
例えば一流企業では学歴により採用が左右されます。当時の在日朝鮮人の進学率はいかほどだったでしょうか。
・通名は学歴詐称と同じ?
ま、確かに違います。これは偽名問題です。判例は当時の社会情勢をみて止む無しとしただけで、一般的に
履歴書に偽名を使うことが許されるわけではありません。
・ハングルは、すべて「かな」だけで書くようなもの?
嫌韓流の例文はズレるが、表意文字を表音文字で置き換えてしまった弊害という問題が消えるわけではない。
・同音異義語に対応できない?
かなよりもハングルが音が多いために同音異義語に対応しやすいからといって、問題が消えるわけではない。
・韓国は漢字語を廃止した?その1
漢字と漢字語の混同があるからといって、漢字が姿を消していった事実は変わりません。
・韓国は漢字語を廃止した?その2
「同音異義語に対応できない」から「漢字を併記」してるわけで、何を言いたいのか?
・韓国では新たな造語は作られてないという嘘
こりゃそんなことはないでしょう(笑)
せいぜい、漢字を使わずに漢字語の造語を作るより、漢字使ってたほうが漢字語の造語は作りやすい、ぐらい。
・韓国では目上の人にしか敬語を使わない?
相対敬語と絶対敬語の違いには、敬語体系の成熟度が現れています。
・韓国人が併合を望んだという嘘
日本の影響を受けたと言っても、韓国人自身の意見なのは変わりません。
・朝鮮総督府が学校を増やしたというウソ
2250校から5000校なら、やはり増えてるじゃないですか。教育救国運動の経緯とかは気になりますね。
・朝鮮総督府が「朝鮮語辞典」を作ったという嘘
「朝鮮語の国語辞典」は存在したのでしょうか?
たぶん存在したと信じたいのですが、そうでなければ全く本当になってしまいます。
・朝鮮語の授業を廃止したのは朝鮮人というウソ
喜んで廃止しようが、苦渋の選択で廃止しようが、自らの選択であることは事実でしょう。
・安重根に伊藤博文を暗殺されたため併合したというウソ
閣議決定は最終決定ではありません。
・井上角五郎がハングルを普及させたというウソ
これだけじゃ判りませんね。以前にも文献が存在したというだけじゃ。統計データが無いと。
・朝鮮総督府がハングルを普及したという嘘
文盲率の推移が出てくれば終わる話です。
・日本統治下で人口が倍に増えたというウソ
信頼できる統計すら無かった、という点でむしろ論旨を補強してしまいます。
・インフラ整備は朝鮮人の生活向上のためだったというウソ
「朝鮮人の生活向上のため」という一文だけを否定しても主たる論旨に影響しません。
・農業生産力の向上が朝鮮人の生活を向上させたという嘘
ttp://www.vsp3.com/rentalfile/b2c3/korea/shuchou-166.htm
ここでは全く別の見解ですね。
・近代医療の導入は朝鮮人の生活向上のためだったというウソ
そりゃ先に近代医療を導入した日本人の受診者が多いのは当然でしょう。漢方の問題は日本でも同様です。
・日本が併合しなければ韓国はロシア領になっていたというウソ
「領有しても開発や防衛を維持するためのコストがかかるだけで、利益が少ないと判断していました」
日本がその判断を出来ていれば・・・
・韓国が日清戦争前に中立宣言をしたという嘘
これは間違いっぽいです。日露戦争時にも似たようなことしてるようですが。
・韓国人がW杯の歴史を汚したという嘘
4つが韓国戦でかつ韓国有利の判定であることはどう説明をつけるのか。応援ネタは他にもありますし。
・日本政府は個人補償を主張したという嘘
そりゃ名簿は終戦前は日本政府が管理するでしょう。終戦後は誰が管理できたと考えるべきでしょうか。
・日本は韓国の請求をはるかに超える資産を残してきたという嘘
資産の請求権が既に無かったというところを突いても、論旨に影響しません。
・日本と韓国は戦争していないので賠償する必要がないというウソ
確かにズレてますね。あまり良い論述ではありません。ですが賠償する必要がないというのは事実です。
・サンフランシスコ平和条約は日本が領有する地域に竹島(=独島)を含んでいない
>平和条約の第2条a項(日本が放棄すべき地域)に竹島の記述がないことだけを理由に、日本領土であるという解釈は成り立たない
この論法だと、日本列島そのものが日本領土であるとはいえないという矛盾に至ります。
もちろん否です。それ以前に日本領土であり、放棄すべき地域に該当しない場所は日本領土です。
・経済協力という名目で補償をしたというウソ
「日本経済にとっても利点がある」=単なる周辺事情。「法律上は関係無い」=実質はそうである。
これらは「経済協力という名目で補償」の否定ではありません。
・日本は莫大な経済協力金を支払ったという嘘
wikiの金額と、フィリピンは同じですがミャンマーとインドネシアが違ってますね。どちらが正解でしょうか。
さて、正規の賠償と少なくとも同程度の金額が既に支払われたのは事実です。
対フィリピンより少なかったのは意外でしたが。
・日韓協定で補償問題は解決済みという嘘
「国家の請求権及び外交保護権の放棄」が一番重要なとこです。
・韓国側が国際法廷で争うことを一方的に拒否しているというウソ
「拒否した」のは事実。「外交上の経路を通じて解決」できていないのも事実。
・『マンガ嫌韓流』のここがデタラメ…「植民地支配は絶対悪」について
事実関係の解明の前に善悪を持ち出しては行けません。が、解明された事実関係を評価するのは善悪です。
・強制連行はなかったという嘘
本当に末端の朝鮮人役人の行為が処罰されることなく黙認されたのなら、日本側に応分の責任はあります。
だからといってそれだけでは「政策として強制連行が行われた」といえるわけではありません。
・在日韓国人が強制連行数を誇張しているというウソ
72万人であれ、徴用人数及びそのうち本当に強制された割合を掛けた人数とかけ離れていれば誇張でしょう。
・「軍慰安所従業婦等募集に関する件」は、軍が強制連行を取締まった証拠だという嘘
警察が取り締まり、軍もそれに協力した証拠なのは事実です。内地の話ですが。
------
ここで、
http://d.hatena.ne.jp/yamaki622/archive?word=%b7%f9%b4%da%ce%ae
blog*色即是空さんの、嫌韓流に関するエントリーを紹介いただきました。
この本エントリーは、それに関する返答を移転したものです。
元々は、「東亜備忘録」を紹介した際に、「嫌韓流」へのリンクがあることを理由に読むに値しないと評じられたという流れがあるわけです。
http://kyouji.seesaa.net/
私は「嫌韓流」がそれほど信頼性の置けるものだとは認識してませんし、東亜備忘録の人もそうでしょう。
「とにかく日本が悪い」というレベルで固まってる人に、まず読め、という意味での紹介でしょうね。
さて、blog*色即是空さんの、嫌韓流に関するエントリーも、部分的にはなるほど興味深い情報があります。
「嫌韓流」で不正確な部分は、確かに指摘するべき問題です。
ただ、それで「嫌韓流」の論旨が否定されるほどの問題ではないにもかかわらず、全否定しようと必死ですね。
「全否定しようと無理してる」部分に限れば、私などが簡単に突っ込むことが出来ます。
以下、軽く指摘しておきます。
--------
・在日の就職差別は一部だけだった?
例えば一流企業では学歴により採用が左右されます。当時の在日朝鮮人の進学率はいかほどだったでしょうか。
・通名は学歴詐称と同じ?
ま、確かに違います。これは偽名問題です。判例は当時の社会情勢をみて止む無しとしただけで、一般的に
履歴書に偽名を使うことが許されるわけではありません。
・ハングルは、すべて「かな」だけで書くようなもの?
嫌韓流の例文はズレるが、表意文字を表音文字で置き換えてしまった弊害という問題が消えるわけではない。
・同音異義語に対応できない?
かなよりもハングルが音が多いために同音異義語に対応しやすいからといって、問題が消えるわけではない。
・韓国は漢字語を廃止した?その1
漢字と漢字語の混同があるからといって、漢字が姿を消していった事実は変わりません。
・韓国は漢字語を廃止した?その2
「同音異義語に対応できない」から「漢字を併記」してるわけで、何を言いたいのか?
・韓国では新たな造語は作られてないという嘘
こりゃそんなことはないでしょう(笑)
せいぜい、漢字を使わずに漢字語の造語を作るより、漢字使ってたほうが漢字語の造語は作りやすい、ぐらい。
・韓国では目上の人にしか敬語を使わない?
相対敬語と絶対敬語の違いには、敬語体系の成熟度が現れています。
・韓国人が併合を望んだという嘘
日本の影響を受けたと言っても、韓国人自身の意見なのは変わりません。
・朝鮮総督府が学校を増やしたというウソ
2250校から5000校なら、やはり増えてるじゃないですか。教育救国運動の経緯とかは気になりますね。
・朝鮮総督府が「朝鮮語辞典」を作ったという嘘
「朝鮮語の国語辞典」は存在したのでしょうか?
たぶん存在したと信じたいのですが、そうでなければ全く本当になってしまいます。
・朝鮮語の授業を廃止したのは朝鮮人というウソ
喜んで廃止しようが、苦渋の選択で廃止しようが、自らの選択であることは事実でしょう。
・安重根に伊藤博文を暗殺されたため併合したというウソ
閣議決定は最終決定ではありません。
・井上角五郎がハングルを普及させたというウソ
これだけじゃ判りませんね。以前にも文献が存在したというだけじゃ。統計データが無いと。
・朝鮮総督府がハングルを普及したという嘘
文盲率の推移が出てくれば終わる話です。
・日本統治下で人口が倍に増えたというウソ
信頼できる統計すら無かった、という点でむしろ論旨を補強してしまいます。
・インフラ整備は朝鮮人の生活向上のためだったというウソ
「朝鮮人の生活向上のため」という一文だけを否定しても主たる論旨に影響しません。
・農業生産力の向上が朝鮮人の生活を向上させたという嘘
ttp://www.vsp3.com/rentalfile/b2c3/korea/shuchou-166.htm
ここでは全く別の見解ですね。
・近代医療の導入は朝鮮人の生活向上のためだったというウソ
そりゃ先に近代医療を導入した日本人の受診者が多いのは当然でしょう。漢方の問題は日本でも同様です。
・日本が併合しなければ韓国はロシア領になっていたというウソ
「領有しても開発や防衛を維持するためのコストがかかるだけで、利益が少ないと判断していました」
日本がその判断を出来ていれば・・・
・韓国が日清戦争前に中立宣言をしたという嘘
これは間違いっぽいです。日露戦争時にも似たようなことしてるようですが。
・韓国人がW杯の歴史を汚したという嘘
4つが韓国戦でかつ韓国有利の判定であることはどう説明をつけるのか。応援ネタは他にもありますし。
・日本政府は個人補償を主張したという嘘
そりゃ名簿は終戦前は日本政府が管理するでしょう。終戦後は誰が管理できたと考えるべきでしょうか。
・日本は韓国の請求をはるかに超える資産を残してきたという嘘
資産の請求権が既に無かったというところを突いても、論旨に影響しません。
・日本と韓国は戦争していないので賠償する必要がないというウソ
確かにズレてますね。あまり良い論述ではありません。ですが賠償する必要がないというのは事実です。
・サンフランシスコ平和条約は日本が領有する地域に竹島(=独島)を含んでいない
>平和条約の第2条a項(日本が放棄すべき地域)に竹島の記述がないことだけを理由に、日本領土であるという解釈は成り立たない
この論法だと、日本列島そのものが日本領土であるとはいえないという矛盾に至ります。
もちろん否です。それ以前に日本領土であり、放棄すべき地域に該当しない場所は日本領土です。
・経済協力という名目で補償をしたというウソ
「日本経済にとっても利点がある」=単なる周辺事情。「法律上は関係無い」=実質はそうである。
これらは「経済協力という名目で補償」の否定ではありません。
・日本は莫大な経済協力金を支払ったという嘘
wikiの金額と、フィリピンは同じですがミャンマーとインドネシアが違ってますね。どちらが正解でしょうか。
さて、正規の賠償と少なくとも同程度の金額が既に支払われたのは事実です。
対フィリピンより少なかったのは意外でしたが。
・日韓協定で補償問題は解決済みという嘘
「国家の請求権及び外交保護権の放棄」が一番重要なとこです。
・韓国側が国際法廷で争うことを一方的に拒否しているというウソ
「拒否した」のは事実。「外交上の経路を通じて解決」できていないのも事実。
・『マンガ嫌韓流』のここがデタラメ…「植民地支配は絶対悪」について
事実関係の解明の前に善悪を持ち出しては行けません。が、解明された事実関係を評価するのは善悪です。
・強制連行はなかったという嘘
本当に末端の朝鮮人役人の行為が処罰されることなく黙認されたのなら、日本側に応分の責任はあります。
だからといってそれだけでは「政策として強制連行が行われた」といえるわけではありません。
・在日韓国人が強制連行数を誇張しているというウソ
72万人であれ、徴用人数及びそのうち本当に強制された割合を掛けた人数とかけ離れていれば誇張でしょう。
・「軍慰安所従業婦等募集に関する件」は、軍が強制連行を取締まった証拠だという嘘
警察が取り締まり、軍もそれに協力した証拠なのは事実です。内地の話ですが。
------
2008年2月6日水曜日
MATLABでピクロス
DSのピクロスを借りてやってみたんですよ。
やってみると解き方が単純だったので、こりゃMATLABあたりで解くプログラム作れそうかな、と思ってやっちゃいました。
人間が解く場合、縦横のラインで確定しているマスを埋めていきますよね。
そこを、全組み合わせのうち、数字の列が一致するもののANDをとって埋めていく、って形で落とし込んでみました。
それだけでほとんど解けるわけですが、それだけだと確定するマスが無くなって、仮説・検証しないと解けない問題もあります。
それを解けるように仮説・検証のアルゴリズムも入れて、完成させました。
ほぼ必然的に、解を持たない問題や、解が一意に決まらない問題も判定できるようになりました。
そこで最後に、仮説・検証しないと解けない問題をしらみつぶしに調べてみました。
------------
% picros.m を使った、Fix法で解けないが解が一意に決まるピクロス問題を検索する
% テストmファイル。2×2~4×4を検索します。4×4以上にしかないけど。
clear
for PicDim = 2 : 4
SingleFixed = 0;
MultiPicros = 0;
MultiFixed = 0;
tois = PicDim^2;
mon = dec2bin( linspace( 0 ,2^tois -1, 2^tois) );
for cnt=1 : 2^tois
mondai = reshape(mon(cnt,:,:),PicDim,PicDim);
[x,y]=makepic(mondai);
[ans , state ] = picros( x,y );
if state == 'MF'
mondai
MultiFixed = MultiFixed + 1;
elseif state == 'SF'
SingleFixed = SingleFixed + 1;
elseif state == 'MP'
MultiPicros = MultiPicros + 1;
else
'ErrorPicros'
break
end
end
PicDim
SingleFixed
MultiPicros
MultiFixed
end
------------
代表的パターンは2×4で、
1
21
1□■
1■□
1■□
1□■
4×4の全組み合わせ65536のうち、確定するマスを埋めるだけで解けるのが51234、仮説・検証が必要なのが1124、解が一意に決まらないのが13178でした。
つまり、ランダムにマスを埋めてピクロスの問題にすると、2割が解けない問題になり、2%が仮説・検証が必要な難問になるわけです。(4×4の場合ですが)
問題を作るだけなら比較的簡単そうですが、うまいこと難問を作るのは難しそうですね。
感想として、ピクロスはただ解くこと、解法を作ること、問題を作ること、の三段階で楽しめるパズルと思いました。
ピクロス解答 picros.m
-------------
function [ ans , state ] = picros( x , y )
%picros ピクロスを解きます。
% ピクロス数列を受けて、解と状態を返します。
% 状態は、SF:Fix法のみで解けた、MF:Fix法では解けないが一意の解に至った、
% MP:複数の解があり、一意に解が定まらない、EP:解が存在しない、です。
sx = size( x , 1 );
sy = size( y , 2 );
pans = repmat( 'N' , sx , sy ) ;
[ ans , state ] = fixfil( pans , x , y );
if find( ans == 'N' )
for cnt = 1 : 100
[ ans , state ] = fixchance( ans , x , y );
if state == 'OK'
[ ans , state ] = fixfil( ans , x , y );
if length(find( ans == 'N' )) == 0
state = 'MF';
break
end
end
end
else
state = 'SF';
end
function [ ans , state ] = fixchance( ans , x , y )
%fixchance Fix法で解けないピクロス問題を、仮説と検証により判断します。
% 不明ピクロスを'N'で埋めたピクロス像とピクロス数列を受けて、解と状態を返します。
% 状態は、MP:複数解の可能性が発生した場合、EP:エラーピクロスが発生した場合、
% OK:仮説により、何らかのピクロスが埋まった場合。
kansN = find( ans == 'N' );
Ncnt = length( kansN );
state = 'OK';
for cnt = 1 : Ncnt
kans0 = ans;
kans1 = ans;
kans0( kansN( cnt ) ) = '0';
kans1( kansN( cnt ) ) = '1';
[ ans0 , state0 ] = fixfil( kans0 , x , y );
[ ans1 , state1 ] = fixfil( kans1 , x , y );
if state0 == 'NG' & state1 == 'OK'
state = 'OK';
ans = kans1;
break
elseif state0 == 'OK' & state1 == 'NG'
state = 'OK';
ans = kans0;
break
elseif state0 == 'OK' & state1 == 'OK'
state = 'MP';
break
else
state = 'EP';
break
end
end
function [ pans , state ] = fixfil( pans , x , y )
%fixfil ピクロス数列より確定するピクロスだけを埋めます。
% 不明ピクロスを'N'で埋めたピクロス像とピクロス数列を受けて、確定解と状態を
% 返します。状態は、エラーピクロスになるものだけをNG、ならないものはOKです。
sx = size(x,1);
sy = size(y,2);
state = 'OK';
dx = dec2bin( linspace( 0 ,2^sx -1, 2^sx) )';
dy = dec2bin( linspace( 0 ,2^sy -1, 2^sy) )';
[kari ,tmpy] = makepic(dy);
[kari ,tmpx] = makepic(dx);
tmpx = tmpx( 1:size( x,2 ) , : );
tmpy = tmpy( 1:size( y,1 ) , : );
for cnt = 1 :100
oldans = pans;
index = zeros(sy,1);
for cy = 1 : sy
ci = 0;
nofi = find( pans( : , cy ) == 'N' );
alfi = find( pans( : , cy ) ~= 'N' );
for ct = 1 : 2^sy
if tmpy(: ,ct) == y(: , cy)
if length(alfi) ~= 0
if dy(alfi , ct) == pans(alfi , cy)
ci = ci + 1;
index(cy,ci) = ct;
end
else
ci = ci + 1;
index(cy,ci) = ct;
end
end
end
utmp = dy( :, (index(cy,find(index(cy,:)))));
utmpl = utmp == repmat( '1' , size(utmp));
if size(utmp , 2) == 0
elseif size(utmp , 2) == 1
pans( : , cy ) = utmp;
else
nowfi = find(~any(utmpl'));
if length(nowfi) ~= 0
pans( nowfi , cy ) = utmp(nowfi);
end
nowfi = find(all(utmpl'));
if length(nowfi) ~= 0
pans( nowfi , cy ) = utmp(nowfi);
end
end
if ci == 0
state = 'NG';
break
end
end
%%%%%%%
index = zeros(sx,1);
for cx = 1 : sx
ci = 0;
nofi = find( pans( cx , : ) == 'N' );
alfi = find( pans( cx , : ) ~= 'N' );
for ct = 1 : 2^sx
if tmpx(: ,ct) == x(cx , :)'
if length(alfi) ~= 0
if dx(alfi , ct) == pans(cx , alfi)'
ci = ci + 1;
index(cx,ci) = ct;
end
else
ci = ci + 1;
index(cx,ci) = ct;
end
end
end
utmp = dx( :, (index(cx,find(index(cx,:)))));
utmpl = utmp == repmat( '1' , size(utmp));
if size(utmp , 2) == 0
elseif size(utmp , 2) == 1
pans( cx , : ) = utmp;
else
nowfi = find(~any(utmpl'));
if length(nowfi) ~= 0
pans( cx , nowfi ) = utmp(nowfi);
end
nowfi = find(all(utmpl'));
if length(nowfi) ~= 0
pans( cx , nowfi ) = utmp(nowfi);
end
end
if ci == 0
state = 'NG';
break
end
end
if oldans == pans
cnt;
break
end
end
function [ x , y ] = makepic( a )
%makepic ピクロス像を、ピクロス数列に変換します。
% ピクロス像はCHARの二次元配列で受けて、ピクロス数列は二次元の数列2つで返します。
[sx, sy] = size(a);
x= zeros(sx,sy);
y= zeros(sx,sy);
for cntx = 1 :sx
n = 1 ;
nn = 0;
for cnty = 1:sy
if a(cntx , cnty) == '1'
nn = nn + 1;
x(cntx,n)=nn;
elseif nn ~= 0
nn = 0;
n = n + 1;
else
end
end
end
for cnty = 1 :sy
n = 1 ;
nn = 0;
for cntx = 1:sx
if a(cntx , cnty) == '1'
nn = nn + 1;
y(n,cnty)=nn;
elseif nn ~= 0
nn = 0;
n = n + 1;
else
end
end
end
やってみると解き方が単純だったので、こりゃMATLABあたりで解くプログラム作れそうかな、と思ってやっちゃいました。
人間が解く場合、縦横のラインで確定しているマスを埋めていきますよね。
そこを、全組み合わせのうち、数字の列が一致するもののANDをとって埋めていく、って形で落とし込んでみました。
それだけでほとんど解けるわけですが、それだけだと確定するマスが無くなって、仮説・検証しないと解けない問題もあります。
それを解けるように仮説・検証のアルゴリズムも入れて、完成させました。
ほぼ必然的に、解を持たない問題や、解が一意に決まらない問題も判定できるようになりました。
そこで最後に、仮説・検証しないと解けない問題をしらみつぶしに調べてみました。
------------
% picros.m を使った、Fix法で解けないが解が一意に決まるピクロス問題を検索する
% テストmファイル。2×2~4×4を検索します。4×4以上にしかないけど。
clear
for PicDim = 2 : 4
SingleFixed = 0;
MultiPicros = 0;
MultiFixed = 0;
tois = PicDim^2;
mon = dec2bin( linspace( 0 ,2^tois -1, 2^tois) );
for cnt=1 : 2^tois
mondai = reshape(mon(cnt,:,:),PicDim,PicDim);
[x,y]=makepic(mondai);
[ans , state ] = picros( x,y );
if state == 'MF'
mondai
MultiFixed = MultiFixed + 1;
elseif state == 'SF'
SingleFixed = SingleFixed + 1;
elseif state == 'MP'
MultiPicros = MultiPicros + 1;
else
'ErrorPicros'
break
end
end
PicDim
SingleFixed
MultiPicros
MultiFixed
end
------------
代表的パターンは2×4で、
1
21
1□■
1■□
1■□
1□■
4×4の全組み合わせ65536のうち、確定するマスを埋めるだけで解けるのが51234、仮説・検証が必要なのが1124、解が一意に決まらないのが13178でした。
つまり、ランダムにマスを埋めてピクロスの問題にすると、2割が解けない問題になり、2%が仮説・検証が必要な難問になるわけです。(4×4の場合ですが)
問題を作るだけなら比較的簡単そうですが、うまいこと難問を作るのは難しそうですね。
感想として、ピクロスはただ解くこと、解法を作ること、問題を作ること、の三段階で楽しめるパズルと思いました。
ピクロス解答 picros.m
-------------
function [ ans , state ] = picros( x , y )
%picros ピクロスを解きます。
% ピクロス数列を受けて、解と状態を返します。
% 状態は、SF:Fix法のみで解けた、MF:Fix法では解けないが一意の解に至った、
% MP:複数の解があり、一意に解が定まらない、EP:解が存在しない、です。
sx = size( x , 1 );
sy = size( y , 2 );
pans = repmat( 'N' , sx , sy ) ;
[ ans , state ] = fixfil( pans , x , y );
if find( ans == 'N' )
for cnt = 1 : 100
[ ans , state ] = fixchance( ans , x , y );
if state == 'OK'
[ ans , state ] = fixfil( ans , x , y );
if length(find( ans == 'N' )) == 0
state = 'MF';
break
end
end
end
else
state = 'SF';
end
function [ ans , state ] = fixchance( ans , x , y )
%fixchance Fix法で解けないピクロス問題を、仮説と検証により判断します。
% 不明ピクロスを'N'で埋めたピクロス像とピクロス数列を受けて、解と状態を返します。
% 状態は、MP:複数解の可能性が発生した場合、EP:エラーピクロスが発生した場合、
% OK:仮説により、何らかのピクロスが埋まった場合。
kansN = find( ans == 'N' );
Ncnt = length( kansN );
state = 'OK';
for cnt = 1 : Ncnt
kans0 = ans;
kans1 = ans;
kans0( kansN( cnt ) ) = '0';
kans1( kansN( cnt ) ) = '1';
[ ans0 , state0 ] = fixfil( kans0 , x , y );
[ ans1 , state1 ] = fixfil( kans1 , x , y );
if state0 == 'NG' & state1 == 'OK'
state = 'OK';
ans = kans1;
break
elseif state0 == 'OK' & state1 == 'NG'
state = 'OK';
ans = kans0;
break
elseif state0 == 'OK' & state1 == 'OK'
state = 'MP';
break
else
state = 'EP';
break
end
end
function [ pans , state ] = fixfil( pans , x , y )
%fixfil ピクロス数列より確定するピクロスだけを埋めます。
% 不明ピクロスを'N'で埋めたピクロス像とピクロス数列を受けて、確定解と状態を
% 返します。状態は、エラーピクロスになるものだけをNG、ならないものはOKです。
sx = size(x,1);
sy = size(y,2);
state = 'OK';
dx = dec2bin( linspace( 0 ,2^sx -1, 2^sx) )';
dy = dec2bin( linspace( 0 ,2^sy -1, 2^sy) )';
[kari ,tmpy] = makepic(dy);
[kari ,tmpx] = makepic(dx);
tmpx = tmpx( 1:size( x,2 ) , : );
tmpy = tmpy( 1:size( y,1 ) , : );
for cnt = 1 :100
oldans = pans;
index = zeros(sy,1);
for cy = 1 : sy
ci = 0;
nofi = find( pans( : , cy ) == 'N' );
alfi = find( pans( : , cy ) ~= 'N' );
for ct = 1 : 2^sy
if tmpy(: ,ct) == y(: , cy)
if length(alfi) ~= 0
if dy(alfi , ct) == pans(alfi , cy)
ci = ci + 1;
index(cy,ci) = ct;
end
else
ci = ci + 1;
index(cy,ci) = ct;
end
end
end
utmp = dy( :, (index(cy,find(index(cy,:)))));
utmpl = utmp == repmat( '1' , size(utmp));
if size(utmp , 2) == 0
elseif size(utmp , 2) == 1
pans( : , cy ) = utmp;
else
nowfi = find(~any(utmpl'));
if length(nowfi) ~= 0
pans( nowfi , cy ) = utmp(nowfi);
end
nowfi = find(all(utmpl'));
if length(nowfi) ~= 0
pans( nowfi , cy ) = utmp(nowfi);
end
end
if ci == 0
state = 'NG';
break
end
end
%%%%%%%
index = zeros(sx,1);
for cx = 1 : sx
ci = 0;
nofi = find( pans( cx , : ) == 'N' );
alfi = find( pans( cx , : ) ~= 'N' );
for ct = 1 : 2^sx
if tmpx(: ,ct) == x(cx , :)'
if length(alfi) ~= 0
if dx(alfi , ct) == pans(cx , alfi)'
ci = ci + 1;
index(cx,ci) = ct;
end
else
ci = ci + 1;
index(cx,ci) = ct;
end
end
end
utmp = dx( :, (index(cx,find(index(cx,:)))));
utmpl = utmp == repmat( '1' , size(utmp));
if size(utmp , 2) == 0
elseif size(utmp , 2) == 1
pans( cx , : ) = utmp;
else
nowfi = find(~any(utmpl'));
if length(nowfi) ~= 0
pans( cx , nowfi ) = utmp(nowfi);
end
nowfi = find(all(utmpl'));
if length(nowfi) ~= 0
pans( cx , nowfi ) = utmp(nowfi);
end
end
if ci == 0
state = 'NG';
break
end
end
if oldans == pans
cnt;
break
end
end
function [ x , y ] = makepic( a )
%makepic ピクロス像を、ピクロス数列に変換します。
% ピクロス像はCHARの二次元配列で受けて、ピクロス数列は二次元の数列2つで返します。
[sx, sy] = size(a);
x= zeros(sx,sy);
y= zeros(sx,sy);
for cntx = 1 :sx
n = 1 ;
nn = 0;
for cnty = 1:sy
if a(cntx , cnty) == '1'
nn = nn + 1;
x(cntx,n)=nn;
elseif nn ~= 0
nn = 0;
n = n + 1;
else
end
end
end
for cnty = 1 :sy
n = 1 ;
nn = 0;
for cntx = 1:sx
if a(cntx , cnty) == '1'
nn = nn + 1;
y(n,cnty)=nn;
elseif nn ~= 0
nn = 0;
n = n + 1;
else
end
end
end
登録:
投稿 (Atom)