■□□□
□□□□
□□□□
□□□□
■=空きマス
プログラミング初心者です。javascriptの練習にと思い、↑のような16面のパズルを作りました。(正式名称はよくわかりません。マスをずらして絵柄を完成させるアレです)
パズルを始める際にマスの並びをシャッフルする、まではできたのですが、一つ問題があり、シャッフルされたマスの並びで絶対に解けないパターンが発生してしまいます。
16面のパズルの解けないパターンというのは、↓の状態から(2)と(1)を入れ替える事が不可能、というものです。
■(2)(1)(3)
(4)(5)(6)(7)
(8)(9)(10)(11)
(12)(13)(14)(15)
現段階でのシャッフルの方法は、単純に、マス(画像)が正しい順番で並んでいる状態を
シャッフル前 ⇒ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
とし、これをシャッフルして
シャッフル後 ⇒ 14,8,1,7,12,9,3,5,15,2,10,6,4,11,13
のようにランダムな並び順となった配列を作り、それを元に画像を並べていく、というものです。
このシャッフル後の配列をチェックして解けないパターンであればエラーとしたいのですが、どのようなチェックをすれば良いのかがわかりません。数学のカテゴリに質問すべきかとも思いましたが、もしどなたかわかる方いらっしゃいましたら教えて頂けると幸いです。
No.2ベストアンサー
- 回答日時:
解けないパターンの識別方法は数学的に証明されています。
「15パスル パリティ」で検索してください。
ただ、方法論としてはシャッフルするよりスワップする方が簡単だと思います。
No.1
- 回答日時:
単純なはなし・・・シャッフルしなければいいのでは?
このゲームの主旨は空マスと最多4つの隣接するマスとを
入れ替えるという処理ですね
よって隣接するマスをランダムに選び、入れ替えをおこなえば
すむはずです。(端のマスは例外処理をいれる)
どのくらいでバラバラになるかは微妙ですが、1万回も入れ替えを
行えばよいのでは?
この回答への補足
回答ありがとうございます。
その方法は最初に考えたのですが、数学的な考え方で配列をチェックできないものか、という点がどうしても気になってしまい、質問させて頂きました。やはり数学のカテゴリが専門でしょうか…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 占い タロットカードを浄化していたら、引くように言われたので引いたのですが… 1 2022/09/02 06:32
- YouTube やり方教えてください 1 2022/03/28 00:50
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- その他(ゲーム) 数独の解き方 4 2023/05/17 16:09
- 数学 『確率Ⅹ/2』 6 2022/11/21 00:00
- クラフト・工作 木材のマス目と板目につきまして 2 2023/06/29 06:16
- YouTube Youtubeでチャンネル登録した中だけを連続再生したいです。 シャッフルでもいいですけど出来れば新 1 2023/08/14 00:30
- テクノ・ハウス 音楽を数曲取り入れてすべて続けて聴くにはどんな方法がありますか? 5 2022/11/13 21:41
- 数学 『◯と●の帰納法』 2 2023/04/19 20:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
HTMLの外部jsのようなcgiファイ...
-
JavaScriptにおける[] とか :...
-
javascript 変数名の連結をしたい
-
javascriptで変数名
-
javascriptで2つのArrayの...
-
JavaScriptの連想配列について
-
javascriptで行を抽出したいです。
-
【急ぎ】javascriptで、特定の...
-
javascriptを用いて作成された...
-
多次元配列から最大値を1行また...
-
javascritp「sort」メソッドに...
-
javascript 省略した記述と思わ...
-
sliceについて
-
オブジェクトから任意のプロパ...
-
C#OpenCv V4にのエラーに関する...
-
C# 演算 奇数と偶数 表現の仕方
-
関数でy=g(x)のgとは何の略です...
-
「オブジェクトが必要です。」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
二次元配列を使って順位をだす...
-
React hooksが値を返して配列変...
-
undefinedを表示させない方法は...
-
フォーム入力値の重複チェック
-
javascriptで行を抽出したいです。
-
JavaScriptでの動的な多次元配...
-
多次元配列から最大値を1行また...
-
HTMLで誕生石と星座をアラート...
-
JSONデータを50音順でソートしたい
-
重複しないようにランダムで表...
-
1から20までの整数から、重複な...
-
JavaScriptにおける[] とか :...
-
gas 配列
-
【JavaScript】オブジェクト型...
-
WSH(Jscript)でファイル一覧
-
JavaScriptで簡単なクイズを作...
おすすめ情報