問題タブ [puzzle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 各エントリを 1 回だけ選択して、セットからランダムに選択する高速な方法は?
私は、n 個のクイーン問題 (標準のチェス クイーンの動きを使用して、n個のチェス クイーンをn x nチェス盤に配置して、他のクイーンをキャプチャできないようにする問題)を解決するプログラムに取り組んでいます。私は発見的アルゴリズムを使用しており、各行に 1 つのクイーンを配置し、まだ占有されていない列からランダムに列を選択することから始めます。このステップは最適化の機会だと感じています。コードは次のとおりです (C++):
コードから明らかでない場合: 各列の整数を含むベクトルを作成することから始めます。次に、行ごとに、ベクトル内のランダムなエントリを選択し、その値を .xml 内のその行のエントリに割り当てますchboard[]
。次に、そのエントリをベクターから削除して、他のクイーンで使用できないようにします。
ベクトルの代わりに配列とポインターを使用できるメソッドに興味があります。それとも<list>
?for
ループ以外に、ベクトルを順番に埋めるより良い方法はありますか? いくつかの提案を聞きたいです!
java - 24 * 60 * 60 * 1000 * 1000 を 24 * 60 * 60 * 1000 で割った値が Java の 1000 に等しくないのはなぜですか?
24 * 60 * 60 * 1000 * 1000 を 24 * 60 * 60 * 1000 で割った値が Java の 1000 に等しくないのはなぜですか?
algorithm - 古典的な「大ヒット作」の解決策
80年代から90年代にかけての英国(70年代もそうだと思います!)には、「ブロックバスター」と呼ばれる古典的なテレビ番組がありました。
(出典:ukgameshows.com)
ご覧のとおり、5列の文字と4行があります。1人またはチームが水平方向に移動しようとしています。1人は垂直方向に移動しようとしています。あなたは質問に答えることによって六角形に勝ちます、そして答えはその六角形に表示された文字で始まります。
勝った人またはチームが最初に「ラインを接続」します-それはそれ自体に戻る可能性があることに注意してください(たとえば、その六角形を勝ち取った相手チームによってブロックされた場合)、多くの可能な勝ちの組み合わせがあります。
数年前、コーディングを始めたばかりのとき、このパズルに基づいて会議ゲームを作成しました(著作権侵害を避けるために八角形と正方形を交互に作成しました!)が、私がいつも苦労したのは、完全な行がいつになるかをチェックするアルゴリズムでした作られた。簡単なものでも大丈夫ですが、上下左右に行き詰まってしまいました!
私は基本的に、すべての不測の事態を捕らえることができなかった大規模なブルートフォースループをコーディングすることになりました。したがって、ロジックが勝者を検出しなかった場合に勝者をすばやく宣言できるように、会議の主催者の画面にボタンを配置する必要がありました。汚いハックについて話してください...
今、私が解決しなければならなかったこのパズルを振り返ると、そこにいる誰かがもっとエレガントな解決策を提案したいと思うだろうか?もちろん言語に依存しません(すべて、喜んで受け入れられる擬似コードを含みます)。
編集データを好きなように保存するのは問題ありません。アレイに貼り付けました。
algorithm - 長方形の配列を介して「パス」をルーティングする
パズルゲームの独自の実装を作成しようとしています。
ゲーム ボードを作成するには、配列内の各正方形を 1 回だけトラバースする必要があります。
トラバーサルは、隣接する隣接 (水平、垂直、または対角線) にリンクする必要があります。
次の形式の配列構造を使用しています。
ランダムパスを構築するための私の現在のアプローチは次のとおりです。
このアルゴリズムは、一部の中規模のグリッドでは非常に時間がかかりすぎます。これは、以前の選択ではエリアが考慮対象から除外されるためです。
私がしたいのは、可能なすべてのパスにインデックスを取り、そのパスに入力された配列を返す関数です。これにより、この特定のボードに戻るための「シード」値を提供できます。
他の提案は大歓迎です..
algorithm - パズルゲームでパターンを見つける
セルのグリッドに適合するパズルゲームでパターンを見つけるために適用される最も一般的に使用されるアルゴリズムはどれか疑問に思っていました.
検出したいパターンの種類やゲームのルールなど、多くの要因に依存することはわかっています...しかし、その種の問題で最も一般的に使用されるアルゴリズムはどれかを知りたかったのです...
たとえば、列、宝石をちりばめた、テトリスなどのゲームです。
また、「ブルート フォース」によるパターンの検出 (すべてのグリッドをスキャンして、同じ色の隣接する 3 つのセルを見つけようとするなど) が、たとえば 4 X 4 などの非常に小さなグリッドで特定のアルゴリズムを使用する場合よりも著しく悪いかどうかも知りたいです (繰り返しになりますが、それはゲームの種類とルールに依存することを知っています...)
この種のゲームで一般的に使用される構造はどれですか?
java - 「{}」のメイン クラス ブロックが実行されない
次のコードを検討してください:-
これは "hi" を出力しません。どうしてこれなの?
java - Java メタプログラミングの難問: 与えられた注釈 A によってそれ自体が注釈されているすべての注釈を取得する
あなたはJavaの魔法使いだと思いますか?
あなたはリフレクション API の秘密に精通していますか?
メソッド solve を記述して、メソッド Cx() および Mark.class で呼び出された場合に {c, d} を返すようにする必要があります。
(これは宿題ではなく、私が開発しようとしているフレームワーク メタプログラミング フレームワークの実際のプログラミング課題です)
algorithm - 配列を更新するための頭の体操のコーディング (言語に依存しない)
全て、
このアルゴリズムを(仕事のために)できるだけ早くきれいに実装するための賢い方法が必要です。言語固有の問題をすべて取り除き、これに要約したと思います。
A と B の 2 つの配列があります。
A には名前のリストがあります {Apple、Apple、Banana、Banana、Banana、Carrot、...} 各 i 番目の値には、A に出現できる回数の上限はありません。 「アップル」または無数。
A の各エントリには、B に一致するエントリがあります (多対多のマッピング)。例えば:
A のエントリのインスタンスが 100 以下の場合 (バナナが 100 以下の場合)、それらはすべて同じ初期 "B" 値を共有する必要があります。100 を超える場合、最初の 100 は同じ B 値を共有する必要がありますが、次の 100 は B[i + 100] 番目の値を持ちます。
りんごが102個ある場合の例
次に、私が望む結果は次のとおりです。
私が考案したくだらないアルゴリズムを思いつくことができるスーパーブレインがそこにいると確信しているので、それを見てみましょう!
編集1:これは仕事のためだったと指摘する必要があると思います。これは、誰かが見て、私が思いついたものよりも優れた解決策を考え出したいと思うかもしれない楽しい挑戦だと思いました.
編集 2:私のばかげた間違いを指摘してくれたダニエルに感謝します。
比較のためだけの私のソリューション(疑似コード):
最初に d と呼ばれる B のハッシュ/辞書を作成します。ここで、d[ "Apple" ] = A 内の Apple のインスタンスの数です。
メモリからこれを行うと、インデックスを台無しにしないことを願っています...
algorithm - 8パズル問題を解決するための効率的なアプローチは何ですか?
8 パズルは、9 つの位置を持つ正方形のボードで、8 つの数字のタイルと 1 つの隙間で埋められます。いつでも、ギャップに隣接するタイルをギャップに移動して、新しいギャップ位置を作成できます。つまり、ギャップは隣接する (水平方向および垂直方向に) タイルと交換できます。ゲームの目的は、タイルの任意の構成から始めて、ボードの周囲を走るか、左上に 1 を付けて左から右に並べるか、昇順で配置された番号のタイルを取得するようにそれらを移動することです。・手の位置。
この問題を解決するにはどのようなアプローチが効率的でしょうか?