【解答】パズルのプログラミング【作成】
■ このスレッドは過去ログ倉庫に格納されています
パズルの問題をプログラムで解いたり
プログラムで面を作成したりする方法を話し合うスレ。 uniqueing()じゃなくて、uniqt(),uniqy()だった。
念の為、確認してみた 方程式に出来たりするんですかね?
マス=??????????
有限で一意なら出来るんでしょうね。意味ないだろうけど 何の言語が向いてるんだろう
LISPとか良さそうな気がするんだが >>727
いずれは公開するつもりだったのですが
テスト用に問題を回転させるアイデアに驚いて早めました
テスト問題ですがランダムなドット絵を使い始めました
安定的に1秒程度で判別できるのは50×50黒6割で
黒が減ったり問題が大きくなると極端に遅くなります
100×100を10秒以内はまだまだ先のようです
ところでとても速いものをみつけました
ttp://sourceforge.net/projects/jsolver/
ソースが読みづらく説明もなくてアルゴリズムがわからないのが残念です >>736
>>725 さん
120818C.mno が確か一番時間の掛かる問題であったかと思います
しかし5年前の C2D で1秒切ってますよ
ARM(Nexus 7(2012)) だと3秒ほどで爆速過ぎます >>736 ランダムなドット絵、そのアイデアいただきます!
僕もランダムな絵の問題作ってみます
100x100は僕の力では100秒かかります。この辺が限界ですわ、C言語で
C言語よりC++の方が向いてると思います。こういうの >>736
>>738
ランダムなドット絵、裁縫のパッチワークをイメージした
元絵(131313A.mno〜131313N.mno,サイズ180x70)のイメージから
ランダムに20x20の布切れを切り取り、100x100のサイズに貼り合わせる
というもの。布切れはランダムに90度、180度回転している
昨晩、作っていた。問題がほぼ無限に作れます 100x100のサイズのパッチワーク風の問題のある場所
ttp://logic777.web.fc2.com/i/paw_mno140424a.zip
00001.mnoは1000秒かかりました
00002.mnoはまだ解けていません
n1=n2=0(黒と白の仮置き、どちらでもOKのとき増え方がどちらも
200ドット以下の時、リスト構造を枝刈りしてもうまくいかないです
500ドット以下の時、枝刈りにしてみます 100*100サイズ固定で問題データの復元用の数値って作れないのかな?
データの受け渡しに便利ですよね。 最近忙しくてコードに手をつけていません……
>>741
理屈から言えば、長さがnある部分のヒント数字は
最大n/2個(nが奇数なら(n+1)/2個)必要なので、
100x100固定なら50×100×2=10000個の数字枠が必要になります
charでも10KBは必要ですね >>736 >>725さんの教えてくれた jsolverで >>740 の内容物
00001.mnoから00010.mnoをtxtにコンバートして動かしてみた
$ ./js1 00005 // mno->txt converting, original program
$ ./jsolver -n 2 00005.txt
どれも2秒もかからない >>743 js1.c のある場所:
ttp://logic777.web.fc2.com/i/js1.zip 00001.mno トレース
No. (X, Y)
1 1 1 両方OK黒から 黒863ドット白0ドットの増加分
2 1 100 両方OK黒から 黒1669白1514
3 98 63 両方OK黒から 黒1634白1629
3は黒でこのまま続けるが、実際はここは白が正解
4 83 100 白のみ 黒65白2
5 82 100 黒のみ 黒120白164
6 79 100 黒のみ 黒164白2
7 78 100 白のみ 黒69白0
8 77 100 白のみ 黒47白1
9 76 100 白のみ 黒41白1
10 75 100 白のみ 黒1220白0
11 74 100 白のみ 黒33白0
Noはこの後11から19まで進むんだけど、No10で疑問に思わなければ
(プログラム的に)1万ドットのうち黒1220ドットも動いているのに
なんで白に決めるんかと。このへんを改良できれば速くなるような気がする >>741さんの意見、心に留めておきましょう。今いろいろ忙しいです。
ちょっとゆっくりやってみます Cパズルプログラミング-再帰編 > ペントミノ > 盤面の1次元配列化 をJAVAに移植中。
ポインタの++使われるときついわぁw
変換じゃなくて元から1次元配列のデータを持たせた方が楽かな。
動かんけどw Javaなら、Cのポインタ演算をエミュレートするクラスを作っておいて
その中で一次元配列なりなんなり使って実装すればいいんじゃね >>747-748
本当なら当該言語(今回はJava)に合わせたコードに
書き直せればいいんだけどなぁ……>ポインタの移植云々
俺?Javaはまだ勉強中で…… >>741 さんの意見で作ってみた
ttp://logic777.web.fc2.com/i/paw_mnx140427.zip
ファイルの中は、mnoファイルと拡張子が.1と.2のファイル
mnxファイル、そしてmnofix.cとmnoprint.cが入っていると思います
.1と.2はイメージファイルで、.1と.2が存在して.3のファイルが存在しない時
.2を読み込みます。このファイルの実装は解析時間が578秒だったとき
578/100+1=6で拡張子が「.6」100秒置きに100秒目で「.1」、200秒目で
「.2」、300秒目で「.3」の拡張子の中断ファイルを作っていた経緯からです。
イメージファイルの書式は、盤面のデータが未確定のとき「_」、
黒は「Q」、白は「x」です。ファイルの中身はその3つと改行とEOFの5つしかありません
mnofix.cはmnoファイルとイメージファイルを読み込んで、
>>741さん用の復元用の数値のファイル.mnxを出力します
mnoファイルで
*Y10
*y001 5
で、イメージファイルが
___QQQQQxx
(未確定が3つ、黒が5つ、白が2つのとき)
mnxファイルでは
*y001 _3,5,x2
というように、数値の前に「_」や「x」が、つきます
例外的に
mnoファイルで
*Y10
*y001 0
のとき、イメージファイルは
xxxxxxxxxx (白が10こ)になりますが、
mnxファイルでは
*y001 0
となる(?こういう仕様にしたはず、ちょっと自信がない)
いずれにしても、mnxファイルからmnoに、いつでも戻せるように
したかったです
mnoprint.cはmnxを読み込んで、実際に絵が出るかCUIで表示
*yのデータは盤面data[]に
*tのデータは盤面data2[]に
data[]とdata2[]に異常がなければ、未確定は「_」黒は「Q」白は「x」
異常があれば「E」を表示します >Cのポインタ演算をエミュレートするクラスを作って
なんぞそれw
再帰の引数にポインタ+1しやがって・・・・・・。どうしろとw >>478
今更だが自己解決
って2009年かよ!書いたのw
検索すれば出てくるんでリンクはしない… >>747
考え方だけ参考にしてプログラムはJavaで書いてあるものを読んでみたら
例えば ttp://oku.edu.mie-u.ac.jp/~okumura/java-algo/ の Tetromino.java ___
/| |
||. 彡⌒ミ|
||. (・ω・`| 誰かいる?
||oと. U|
|| |(__)J|
||/彡 ̄ ガチャ
彡 ⌒ ミ ♪
(( (・ω・` )
♪ / ⊂ ) )) ♪
((( ヽつ 〈
(_)^ヽ__)
♪ 彡⌒ ミ
(´・ω・彡⌒ ミ
彡⌒ ミつ(´・ω・`) )) ♪
(( (´・ω・`) ( つ )
( つ ヽ とノ ♪
〉 とノ )^(_)
(__ノ⌒(_)
___
/| |
|| .彡⌒ ミ
||. ( )|
||oと. |
|| |(__)J|
||/彡 ̄ ガチャ ある知り合いから、virtual host に接続していると書きこめない
(実際書きこめなかった)Jimのやつめ・・・
ミラー:ttp://hello.2ch.net/test/read.cgi/puzzle/1092459010/l50
ここなら書きこめるかテスト githubに貼り付けてみました
内容は、m246k.cで、biglogic_k140430a.zip と変わりませんが一応
ttps://gist.github.com/nekoppy3 おながいします
http://i.imgur.com/Wv1Fx2u.jpg
1〜16までの数字を一個ずつ入れて
各線上の4つの合計が
いずれも34になるように 13
1 2 3 4
12 5
14 15
11 6
10 9 8 7
16
[1,3,14,16,2,7,9,4,8,13,5,15,6,10,12,11] au予報言氷雨デモなぜ末端ディレクター戦争指名タイ米粉ステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらいエバコラア山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり野菜炒めラーメン
au予報言氷雨デモなぜ末端ディレクター戦争指名タイ米粉ステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらいエバコラア山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり野菜炒めラーメン
au予報言氷雨デモなぜ末端ディレクター戦争指名タイ米粉ステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらいエバコラア山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり野菜炒めラーメン
ニンニクヤーフォー低原価スマ金土地酒気帯びNHK公的私的支出トウデン教授嘘芸人横浜名古屋遅延電池切れ福岡損保新規駐車近代ゲームシェア回収フジ政権転職提案たれ巫女ラーメン
abk公式審判漏洩安保険王なにあげてんだよ?「わー!ふーう?」↓↓★★↓↓★↓★▼★宿題通調印鑑カウントダウンたまらんだけ労災募金額休日接待ゴルフ議員国会アイスブルームハンバーグ歌舞伎派大学生 Windows用フリーソフト「クロスワード ギバー」
ヒント直接編集機能が付いたよ!!!
http://katahiromz.web.fc2.com/xword/ Windows用フリーソフト「クロスワード ギバー」
ver.2.2にバージョンアップしたよ!!!
http://katahiromz.web.fc2.com/xword/ Windows用ソフト「クロスワード ギバー」
ver.2.4にバージョンアップしたよ!!!
漢字・英語クロスワードも作れるよ!!!
http://katahiromz.web.fc2.com/xword/ ___
/| |
|| .彡⌒ ミ
||. ( )|
||oと. |
|| |(__)J|
||/彡 ̄ ガチャ ブラウザでペンシルパズルに毛の生えた程度のゲームを作ろうとする。
JAVAアプレット・フラッシュ・html5・・・・
色々選択肢があるのだろうが、無難なのはどれなんだろう。 スケルトンを自動生成するプログラムのヒントをください。
迷路作成アルゴリズムで迷路の直線長さを制限するとよいように思うがうまくゆかない。 29日午前3時半ごろ、
逆走した軽乗用車が大型トラックと衝突。
計3人が死傷した。
認知症の過程は放射能汚染によって加速します。
注意欠陥障害(ADD)多動性障害(ADHD)、
若年性アルツハイマー病の原因となっており、
人々は肺炎やインフルエンザ、慢性疲労、癌、
HIV/エイズなどに抵抗できなくなっています。
免疫システムの崩壊の結果がアレルギーです。
死者の数は、他のいかなる原因よりも多いです。
河川の汚染は犯罪と見られなければなりません。
問題は、日本政府が何も認めないことです。
多くの人々が放射能の影響で死んでいるのに、
彼らは幻想の中に生きています。
日本の近海の食料は安全ではありません。
健康上のリスクは福島に近づくほど高まります。
福島の子供達は癌をもたらす被爆をしています。
福島県民は廃炉後1、2年で戻れるでしょう。
マイト レーヤは原発の閉鎖を助言されます。
マイト レーヤによれば、飛行機など
原子のパターンが妨害されると墜落します。
彼はいかなる人間よりも危険をよくご存じです。
マイト レーヤの唇からますます厳しい
警告と重みが発せられることを覚悟しなさい。 アルファベットの集合をAと表す。
壁の集合をBと表す。空白の集合をEと表す。
アルファベットと壁をあわせてC==A∪B∪E.
サイズm×nの盤の解空間S(m,n)は盤集合(C^m)^nに含まれる。
よって与えられた問題は、盤集合のなかから、解を探し出す探索問題に帰する。
盤が解となる条件はスケルトンであること、すなわち各マスが空白ではなく、かつ、単語集合Wがあって、盤において2文字以上の壁ではない並びがあって、、、 現代的でリッチなプログラム言語なら、関数再帰は可能であろう。以下は疑似C++コードで説明する。
static 盤 g_answer; //グローバル変数
static bool g_solved = false; //解があるか?
// 戻り値は成功か失敗。
bool 再帰求解関数(const 盤& board) {
if (g_solved) return true;
if (boardは正当でない) return false;
if (boardは解) {
g_answer = board; //ただし排他制御が必要
return true;
}
盤 clone;
盤boardを盤cloneにコピー。
盤cloneを何マスか埋める。
if (再帰求解関数(clone)) return true;
return false;
} 盤 clone;
盤boardを盤cloneにコピー。
盤cloneを何マスか埋める。
if (再帰求解関数(clone)) return true;
↑この部分を次のように書き換えると再帰で分岐ができる。
盤 clone1;
盤boardを盤clone1にコピー。
盤clone1を何マスか埋める。
if (再帰求解関数(clone1)) return true;
盤 clone2;
盤boardを盤clone2にコピー。
盤clone2を別の方法で何マスか埋める。
if (再帰求解関数(clone2)) return true; さらにマルチスレッドを使うとより効率よく探索できる。 4年前の書き込みに偉そうにレスする妙な人…と思われたら
クロスワードギバーとやらのダウンロードにいい影響を与えなさそう アルゴリズム考えるなら大学以上のレベルだろう。赤ちゃん言葉や敬語を使うのはむしろ失礼。 電子書籍『クロスワード自動生成の世界 第五版』
プログラミングの話も載ってるよ! AtCoder Heuristic Contestに挑戦してみるといい ■ このスレッドは過去ログ倉庫に格納されています