タグ付けされた質問 「path-finding」

制約(障害物)の影響を受ける、最適な(たとえば最短の)パスを見つけることを含む、ジオメトリまたはグラフ理論の問題。

2
Poly Nemoを見つける!
大野!ニモ、私たちの小さなカクレクマノミはこのASCIIの海で失われ、彼の父マーリンは彼を見つけようとしています。 あなたの仕事は、Marlinを安全にNemoに連れて行くことです。しかし、気をつけてください、私たちはルーズにブルースを食べているので、彼を避けてください! 詳細 小文字のアルファベットのみを含む長方形のASCIIオーシャングリッドが表示されますa-z。この海にはがありnemo、marlinそのbruce内部には連続ポリオミノの形で、常にポリオミノの最初の列の一番上のセルから始まります。たとえば、可能なすべてのテトロミノのうち、有効なものは以下のスニペットにリストされています コードスニペットを表示 nemo n e m o no em ne om nem o o nem n e mo o m ne ne m o n emo ne mo n em o mo ne コードスニペットを実行する結果を非表示スニペットを展開 ただし、次のようなフォームは無効であり、入力には含まれません。 omen ne mo nem o o m en nem o n eo …

1
旅行をクールに!
チャレンジ マークスとスペンサーを歩いていると、店の周りにエアコンユニットがランダムに配置されていることに気付きました。冷静を保ちたいと思った私は、エアコンユニットから離れすぎずに店全体を動き回る最も簡単な方法は何だろうと考えました。 マップが与えられたら、エアコンユニットからの距離をできるだけ短く保ちながら、マップ全体を移動する方法を見つける必要があります(ACユニットが壁の反対側にある場合でも)。 地図 マップは任意の方法で提供でき、次の記号を使用します。 + is a corner of a wall | is a east/west facing wall - is a north/south facing wall X is an air conditioning unit S is the start and end point マップの例は次のとおりです。 +------S---+ | X | | ---+-+ X | | |X| | | …

3
ローグライクのマップを生成する
今日は、ローグライクRPGのマップを生成します! サンプルマップ: ########## #### F# #### ## ## C#C# # ## # # C #E # #### # # # # #P # ########## #壁でPあり、プレイヤーの開始位置でFあり、到達しなければならないフィニッシュであり、C収集できるコインでありE、戦うことができる敵です。 地図の仕様: 高さと幅は両方とも10から39の間でなければなりません。高さは幅と同じである必要はありません。 マップの境界は壁で埋める必要があります。 P 左下隅に配置する必要があります。 F 右上隅に配置する必要があります。 1〜3人の敵がいるはずです。 2〜4枚のコインがあるはずです。 中央にある程度の壁があるはずです。そこから取得するためのパスでなければなりませんPすべてにC、EとF、プレイヤーが斜めに動くことができないということを念頭に置いて。 可能なすべての組み合わせには、発生する可能性があります。 ルール 最少バイトのプログラムが勝ちます。 プログラムは何も入力しないでください。 プログラムはエラーで終了しない可能性があります(致命的でない出力は問題STDERRありませんが、マップ生成後に不正なクラッシュを起こすことはできません!) 単一の末尾の改行が許可され、末尾のスペースが許可されます。 他の出力は許可されません。

4
携帯電話料金
私の大学コードチャレンジコンテストの許可を得てチャレンジ 私たちが携帯電話に依存しているため、毎晩バッテリーの最大レベルまで充電するので、翌日の途中で電力が不足するリスクはありません。日中に無料のコンセントを見て、何が起こったのかを充電する人もいます。 私もその一人です。 長年にわたって、私は毎晩バッテリーを最大に充電しないように私の技術を磨きました。私の完全に知られている反復的なルーチンにより、それらの部分的な再充電を実行できる時間帯(およびレベルが増加するユニット数)と、各充電の間にバッテリーレベルを低下させる原因は明らかです。これらのデータを使用して、毎晩、自分が課した2ユニットのしきい値を下回らないように、翌日家を出なければならない最小バッテリーレベルを計算します。 私がまだ何とかマスターしていないのは、私が確立されたルーチンを離れたときの同じ計算であり、物事を行うためのいくつかの選択肢があります。たとえば、私が別の方法で到着できる別の都市に行く途中の日に起こります。 問題への最初のアプローチでは、「チェス盤」を左上隅から右下隅に移動したいと想定しています。各「セル」で、携帯電話に特定の金額を充電するか、または充電できず、その負荷レベルが低下します。 チャレンジ 整数のFxC行列を指定して、負荷レベルが2ユニットを下回ることなく、左上隅から右下に移動するために必要な最小バッテリーレベル量を出力します。 マトリックスでは、正の数はパスをたどる前に携帯電話を充電できる量を示し、負の数はコンセントがなく、携帯電話のバッテリーがその量だけ充電レベルを下げていることを示します。ソースセルと宛先セル(左上隅と右下隅)の数量が常に0であり、残りの値(絶対値)が100を超えないことが保証されています。 指定例 : ⎡⎣⎢⎢⎢📱− 1− 11− 1− 1111− 1− 1− 1− 1− 1− 10⎤⎦⎥⎥⎥[📱−11−1−1−1−1−1−11−1−111−10] \begin{bmatrix} 📱&-1&1&-1 \\ -1&-1&-1&-1 \\ -1&1&-1&-1 \\ 1&1&-1&0 \end{bmatrix} 私がより少ないバッテリーを必要とする道は: ⎡⎣⎢⎢⎢📱− 1− 11− 1− 1111− 1− 1− 1− 1− 1− 10⎤⎦⎥⎥⎥[📱−11−1−1−1−1−1−11−1−111−10] \begin{bmatrix} 📱&-1&1&-1 \\ \color{blue}{-1}&-1&-1&-1 \\ \color{blue}{-1}&1&-1&-1 \\ …

7
ヤコビ行列を作成する
未知数のベクトルを取り、いくつかの一般的な微分可能関数を適用します。ヤコビアンは、次いで行列によって与えられるように。 たとえば、と仮定m=3しn=2ます。次に(0ベースのインデックスを使用) のヤコビアンfは この課題の目標は、このヤコビ行列を出力することです。 入力 プログラム/関数は、2つの正の整数mとを入力として受け取る必要nがfありuます。これらはそれぞれとのコンポーネントの数を表します。入力は、任意のソース(stdio、関数パラメーターなど)から取得できます。あなたはこれらが受け取られる順序を指示することができ、これはあなたの答えへのどんな入力でも一貫していなければなりません(あなたの答えで指定してください)。 出力 ヤコビ行列を表すもの。この表現は、ヤコビ行列のすべての要素を明示的に記述する必要がありますが、各項の正確な形式は、何が区別され、何が明確であり、すべてのエントリが論理的な順序で出力される限り、実装で定義されます。マトリックスを表すための受け入れ可能なフォームの例: 外部リストの各エントリがヤコビアンの行に対応し、内部リストの各エントリがヤコビアンの列に対応するリストのリスト。 各行がヤコビアンの行であり、行の各区切り文字で区切られたエントリがヤコビアンの列に対応する文字列またはテキスト出力。 マトリックスのグラフィック/ビジュアル表現。例:MatrixFormコマンドを使用したときにMathematicaによって表示されるもの 他のいくつかの密行列オブジェクト。すべてのエントリは既にメモリに格納されており、クエリできます(つまり、ジェネレータオブジェクトを使用できません)。例としては、Mathematicaが内部的にMatrixオブジェクトをどのように表すかが挙げられます エントリ形式の例: 形式の文字列。d f_i/d u_jここでi、およびjは整数です。例:d f_1/d u_2。dとf_1またx_2はの間のこれらのスペースはオプションであることに注意してください。また、アンダースコアもオプションです。 d f_i(u_1,...,u_n)/d u_jまたはの形式の文字列d f_i(u)/d u_j。つまり、関数コンポーネントの入力パラメーターf_iはオプションであり、明示的に指定するか、コンパクトな形式で残すことができます。 フォーマットされたグラフィック出力。例:式を評価したときにMathematicaが出力するものD[f_1[u_,u_2,...,u_n],u_1] 開始インデックスとその目的uを選択できますf(回答で指定してください)。出力は、必要なシンク(stdio、戻り値、出力パラメーターなど)への出力です。 テストケース 次のテストケースでは、この規則を使用していm,nます。インデックスは0ベースで表示されます。 1,1 [[d f0/d u0]] 2,1 [[d f0/d u0], [d f1/d u0]] 2 2 [[d f0/d u0, d f0/d u1], [d f1/d u0, d …

2
あなたの人生であなたの缶を守りましょう!
キック・ザ・カンで遊ぼう! 現在の勝者はムージーですが、誰かが彼の王冠を取ることができる場合は、そうすることをお勧めします キック缶は子供のゲームです。1人のディフェンダーと複数のアタッカーが関与します。今日、それはもはやそのようなゲームではありません!あなたの仕事は、それを再生するボットを書き、勝利し、丘の王様のスタイルを作ることです! https://en.wikipedia.org/wiki/Kick_the_can このゲームにはいくつかの重要な違いがあります。最初の主な違いは、ゲームがマルチプレイヤー(5v5)であることです。2番目の主な違いは、両方のボットセットが、地雷と爆弾の両方で敵プレイヤーを殺し、排除できることです。ボットは5ブロックを超える距離にある鉱山(距離に関係なく)やプレイヤーを見ることができません! 地図は以下のような迷路です。 この迷路は、最初に深さ優先の再帰的バックトラッキングアルゴリズムを使用して迷路を作成することにより、手続き的に生成されます。次に、表示された穴を配置します(また、迷路をより「不完全」にします。迷路は65x65ブロック幅で、インデックスは0です。したがって、青い旗(缶)は1,1にあり、赤い旗(缶)はブルーチームは2、2、3、3、4、4などでスポーンします。レッドチームは62、62、61、61、60、60などでスポーンします。シアンのブロックは、ブルーチームのボットです。マゼンタのブロックは赤いボットです。ゲームは常に5対5です。チームの各ボットは、コードを使用します(ただし、他のインスタンス変数を格納(またはローカルファイルを作成)して、状態を追跡し、役割を区別します。 ゲームプレイ 地雷は灰色で見えるように配置できます。そして爆弾は最大4ブロックの最大距離を投げることができます。これらは壁を通り最大4ブロックまで移動し、他のプレイヤーはあなたの邪魔をする敵のみを殺します。各ステップの後、40%の確率で脱落します。つまり、1レンジが60%、2レンジが36%、3レンジが21.6%の確率が100%です。これは0から始まり、オレンジ色のボックスを収集することで増やすことができます。これらの弾薬キャッシュのうち4つは便利に中央に配置されることに注意してください。ボットは、2つの赤と2つの青の配列で並んでいます。IE RRRRRBBBBB。旗のガードは許可されていますが、旗の近く(つまり5ブロック未満)になると速度が低下し、移動のみが許可されることに注意してください。3ターンごと。アリーナは、ターンごとにランダムなスターターを選びます。私。 目的 5つのボット(それぞれが同じクラスファイル)をプログラムして、迷路をうまくナビゲートし、誤って自分の缶を倒したり、地雷を踏んだりしないように注意しながら、反対の缶に触れます。 プログラミング アリーナとボットのエントリは現在Javaですが、他の言語用のstdin / outラッパーが存在します。 アリーナコードは利用可能になりますが、関連する詳細はこちらです。 ボットクラス public class YourUniqueBotName extends Bot{ public YourUniqueBotName(int x , int y, int team){ super(x,y,team); //optional code } public Move move(){//todo implement this method //it should output a Move(); //A move has two …

3
数に到達する方法
最初の番号の入力と第2の数(両方とも正の整数、exludedゼロ)を考えると、次のアクションを使用して、あなたが最初の第二の実施を作ることができるどのように多くの方法で決定します+1、+2と*3。操作は単純に左から右に適用されます。 例: 入力:1 2。出力:1。つまり、あなただけ得ることができる2ことによって+1、片道そう。 入力:1 3。出力:3。+2つまり+1+1、またはを実行して3を取得できます。*3 入力:1 4。出力:4。 入力:2 6。出力:6。 入力:2 7。出力:9。 入力:1 10。出力:84。 方法がない場合、たとえば100 100、または100 80、出力は0です。 入力を配列または任意の便利なセパレーター付きの文字列として受け取ることもできます。 最短のソリューションが優先されます。

1
自動操縦モード
左上隅から始まるヘリコプターは、地面に向かって(この質問では、2D空間で)下降しています。自動操縦モードと手動モードがあります。 自動操縦モードは次のように動作します。 真下のスペースが空いていれば下へ。 それ以外の場合は、ステップを完全にランダムに左または右に移動します。(この方法で複数のステップを移動する場合があります。) そして、地面にぶつかるまで、これらの2つのステップを繰り返し続けます。手動モードはよりスマートで、上方向への移動や巧妙な操作が必要な場合でも、地面への最適な経路を見つけます。 あなたの仕事は オートパイロットは、指定されたシナリオで合格します。 オートパイロットは、特定のシナリオで失敗する可能性があります。 自動操縦は失敗しますが、手動モードは成功します、または どちらのモードも失敗します(地面への有効な経路がありません)。 入力 1dまたは2dの空でない配列としてのシナリオを想定し、2つの異なる文字を使用して空きスペースとブロックされたスペースを表します。句読点はオプションです。 オプション:配列の次元 出力 どのケースが発生したかを示す4つの定義済み文字の1つ。 サンプルデータ 入力で0(空)と1(ブロック)を使用し、出力で1 2 3 4(上記の番号)を使用 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 出力: 1 0 0 1 0 1 0 0 1 0 0 0 0 …

2
安全をクラック!
/puzzling/24334/to-catch-a-thiefに触発されました sとs(または任意の他の文字)で満たされたnby n(nそれ自体はオプションの入力)グリッドが与えられます。すべてのセルを同じにすることを目的としています(または)。以下に定義する一連の動きを行うことができます(Puzzling SEリンクとの相違点に注意してください)。0101 セルを選択します。 同じ行と列のすべてのセル(セル自体を除く)は、その反対に変更されます。0へ1と1へ0。 タスクを完了するために必要な最小移動数を出力します。解決できない場合は、負でない整数以外を出力します。最短のコードが勝ちます。 サンプルデータ 1 0 0 0 0 0 0 0 0 -1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 …

7
今週の4年生の数学の宿題:最も非効率的な出張セールスマン
私の娘は数学の宿題のために次のような割り当てがありました。E、F、G、H、J、Kという名前のラインに住んでいる6人の友人を想像してください。ライン上の彼らの位置は、以下に示すとおりです(縮尺どおりではありません)。 したがって、FはEから5ユニット、Gから2ユニットというように住んでいます。 あなたの課題:友達の位置とnを入力として、合計nユニットで各友達を1回だけ訪問するパスを特定するプログラムを作成します。見つかった場合はパスを報告する必要があります(たとえば、長さが17の場合は「E、F、G、H、J、K」を報告する可能性があり、解決策が存在しない場合は正常に終了する必要があります。 Mathematicaでの非推奨のソリューションであり、271バイトです。それよりもずっと簡潔に実行できると思います。

2
ロボット!これらの漬物を集めてください!
少し漬け物になっているようです。文字通り。たくさんの漬物を床に落としました、そして今、それらはすべて散らばっています!それらすべてを集めるのを手伝ってほしい。ああ、私は自分の命令でたくさんのロボットを持っていると言ったのですか?(また、それらはすべてあちこちに散在しています。私は物事を整理するのが本当に苦手です) 次の形式で入力する必要があります。 P....... ..1..2.. .......P ........ P3PP...4 .......P すなわち、いずれかの複数の行.、P(漬物)、または数字(ロボットのID)。(各行は同じ長さで、が埋め込まれて.いると想定できます。)これらの行を配列として入力するか、STDINから丸呑みするか、コンマ区切りの単一行で読み取るか、ファイルを読み取るか、または何でもできます入力を受け取りたい。 出力は行の形式である必要があります。nここnで、は最大のロボットIDです。(ロボットIDは常に1から始まります。)各行には、L(左)、R(右)、U(上)、D(下)の文字で構成されるロボットのパスが含まれます。たとえば、そのパズルの出力例は次のとおりです。 LLU RDR LRRR D それもすることができます LLU RDR LRRR D または ["LLU","RDR","LRRR","D"] または、ソリューションが何であるかを理解できる限り、任意の形式を使用できます。 あなたの目標は、最小のステップを持つ最適な出力を見つけることです。歩数は、すべてのロボットの最大歩数としてカウントされます。たとえば、上記の例には4つのステップがあります。複数のソリューションがある場合がありますが、出力する必要があるのは1つだけであることに注意してください。 得点: プログラムは、5つの(ランダムに生成された)テストケースのそれぞれで実行されます。 各実行からステップを追加する必要があり、それがスコアになります。 最も低い合計、累積スコアが勝ちます。 これらの特定の入力をハードコードすることはできません。コードは他の入力でも機能するはずです。 ロボットはお互いを通り抜けることができます。 プログラムは確定的でなければなりません。つまり、すべての実行で同じ出力になります。シードされ、一貫してクロスプラットフォームで同じ数値を生成する限り、乱数ジェネレーターを使用できます。 コードは、各入力に対して3分以内に実行する必要があります。(できればはるかに少ない。) 引き分けの場合、ほとんどの賛成票が勝ちます。 ここにテストケースがあります。それらは私が書いた小さなRubyスクリプトでランダムに生成されました。 P.......1. .......... P.....P... ..P....... ....P2.... ...P.P.... .PP..P.... ....P....P PPPP....3. .P..P.P..P ....P..... P....1.... .P.....PP. .PP....PP. .2.P.P.... ..P....P.. .P........ …

1
正確な終点とゼロの終端速度を備えたレーストラックのバリアント
前書き チャレンジは、ゲームレーストラックの非常に興味深いバリエーションであり、次の2つのチャレンジです。 Vectoryへ!–ベクターレーシンググランプリ レーシングカーをプログラムする この課題の出典はこちら(ドイツ語):c't-Racetrack この課題は、非常に興味深いものです(上記の2つの課題とは異なります)。これは、巨大な検索スペースと、満たさなければならない正確な条件を組み合わせるためです。膨大な検索スペースのため、網羅的な検索手法は使いにくく、正確な条件のため、近似法も簡単に使用できません。このユニークな組み合わせ(および物理学からの基本的な直感)のため、問題は魅力的です(そして、レーシングカーに関連するすべてがとにかく魅力的です;-) チャレンジ 次の競馬場(ソース)をご覧ください。 壁の1つに触れることなく、(120,180)正確に(320,220)(ドイツ語では "Ziel")で開始して終了する必要があります。 車は次の形式の加速度ベクトルによって制御されます(a_x,a_y)-例として: (8,-6) (10,0) (1,9) 最初の数値はxベクトルの加速度、2番目の数値はyベクトルの加速度です。グリッド上の整数点のみを使用できるため、整数でなければなりません。さらに、次の条件を満たす必要があります。 a_x^2 + a_y^2 <= 100, つまり、任意の方向の加速度は以下でなければなりません10。 どのように機能するかを確認するには、次の図(ソース)をご覧ください。 例として、x方向とy 方向に(120,180)加速します。次のステップでは、これは、次の結果の動き(ポイントへ)を取得する(物理的に正しい)加速度を追加する速度です。結果の動きは、壁の1つに触れたかどうかを調べるときに重要になります。次のステップでは次の加速度ベクトルを現在の速度に追加して、次の動きを取得します。したがって、すべてのステップで、車の位置と速度がわかります(上の図の画像では、青い矢印は速度、オレンジの矢印は加速と結果の動きの濃い赤の矢印)8-6(10,0)(146,168) 追加の条件として、(0,0)あなたが終点にいるとき、あなたは最終速度を持っている必要があります(320,220)。 出力は、上記の形式の加速度ベクトルのリストでなければなりません。 勝者は、加速度ベクトルが最も少ない解を見つけるプログラムを提供する人です。 タイブレーカー さらに、これが最適なソリューションであり、これが唯一の最適なソリューションであるかどうか、またはいくつかの最適なソリューションがあるかどうか(そしてそれらがどれであるか)を示すことができればすばらしいでしょう。 また、アルゴリズムがどのように機能するかについての一般的な概要を示し、コードにコメントを付けて、Googleが理解できるようにするとよいでしょう。 特定のソリューションが有効かどうかをチェックするプログラムがあり、フィードバックを提供します。 補遺 任意のプログラミング言語を使用できますが、誰かがRを使用した場合、私はそれを私の日常業務で頻繁に使用し、どういうわけかそれに慣れているので、特に嬉しく思います:-) 補遺II 初めて私は賞金を始めました-うまくいけば、これはボールが転がることです(またはそれ以上:車の運転です:-)

2
下り坂の迷路ソルバー
下り坂の迷路は、0から9までの一連のスペースで区切られた数字の列と、1つの「S」と1つの「X」として与えられます。ここで、Sは開始を示し、Xは終了を示します。下り坂の迷路では、北、南、東、西(対角線なし)に隣接するスペースにのみ行くことができ、値以下のスペースにのみ行くことができます現在オンです。 プログラムは、迷路をナビゲートするためのパスを入力と同じ形式で出力する必要があります。通過したすべてのスペースにのみ「。」が必要です。それらの中に、そしてすべての訪問されていないスペースにそれらの中に「#」があるはずです。開始セルと終了セルもそれぞれ「S」と「X」を保持する必要があります。迷路には常に解決策があると考えることができます。 入力例: 3 3 3 3 2 1 S 8 9 3 1 1 3 3 0 6 8 7 1 2 2 4 3 2 5 9 7 1 2 1 5 4 3 4 4 6 1 1 X 6 4 4 5 5 5 出力例: . …

1
拡張可能な列車交換問題
拡張列車交換問題 パート1:通常の列車交換問題 1996年のCCC(カナダコンピューティングコンペティション)では、最初のステージ2の問題は列車交換問題でした。ここのリンクにアクセスできます。基本的に、番号付きの列車の束があり、それらを順番に取得するために必要な列車の入れ替えの数を調べたい場合、各列車の入れ替え操作では、隣接する2つの列車を入れ替えることができます。車両はどちらの方向にも走ることができるので、入れ替えたときに車両が反対方向に向いていることを誰も気にしません。これはとても簡単です。あなたがする必要があるのは: それをバブルソートするためのステップ数を見つけます。隣接する要素の交換のみを行うことができる場合、これは最も効率的なソートアルゴリズムです。 だから、もっと難しいものを作りました。 パート2:この課題の仕組み 基本的に、隣接する列車だけでなく、交換することができます。回転プラットフォームが長いと、複数の列車の位置を入れ替えることができます。たとえば、長さが4の回転プラットフォームでは、内側と外側のペアを同時に交換できるため、に1 2 3 4なり4 3 2 1ます。さまざまな回転プラットフォームサイズの例を以下に示します。 Length 2: 1 2 3 4 5 --- 1 3 2 4 5 Length 3: 1 2 3 4 5 ----- 1 4 3 2 5 Length 4: 1 2 3 4 5 ------- 4 3 2 …

2
ブラックポーンの復讐
目的 黒のポーンは復讐を望んでいます。最後の攻撃をプロットします。 ルール 黒いポーン(L)は一番上の行から始まり、一番下の行に移動します。取得したポイントを最大化し、でパスを示しますX。ポーン(P)は1、ビショップ(B)とナイト(N)3、ルーク(R)5、クイーン(Q)9です。入力にはキングはありません。 ポイントの数が最大のパスが複数ある場合は、それらのパスのいずれかを出力します。ポーンが最下列に到達できない状況はありません。 例 入力: ----L--- -----P-- ------P- --R--P-Q ----P-P- ---P-P-P --P-N--- -P------ 出力: ----L--- -----X-- ------X- --R--P-X ----P-X- ---P-X-P --P-X--- -P--X--- 入力: --L----- -P------ P------- -P------ P--Q---- -P------ P------- -P------ 出力: --L----- -PX----- P-X----- -PX----- P--X---- -P-X---- P--X---- -P-X----

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.