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

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

2
ロボットがテレポーターに到達するのを支援する
更新:はじめにPythonフレームワークを追加しました。 宇宙ステーションはクラッシャーボットによって追い抜かれました。ステーションが自己破壊する前に、「ウサギ」と呼ばれる高価で壊れやすいハイテクボットを出口テレポーターに向ける必要がありますが、クラッシャーボットは通路をパトロールしています。 プログラムにはASCIIマップが与えられ、各ターンにはクラッシャーボットと現在のウサギがいる場所が通知されます。その後、プログラムは、クラッシャーボットを避けながらウサギを出口テレポーターに移動します。 実行 Python 2コントローラーを実行するには: python controller.py <mapfile> <turns> <seed> <runs> <prog>... <prog> can be <interpreter> <yourprog> or similar. シードは、実行を繰り返し可能にするために、クラッシャーとプログラムPRNGに使用される小さな整数です。使用する実際のシードに関係なく、プログラムは一貫して実行する必要があります。シードがゼロの場合、コントローラーは実行ごとにランダムシードを使用します。 コントローラは、マップテキストファイルの名前とシードを引数として使用してプログラムを実行します。例えば: perl wandomwabbits.pl large.map 322 プログラムでPRNGを使用する場合は、指定されたシードで初期化する必要があります。コントローラは、STDINを介してプログラムの更新を送信し、STDOUTを介してウサギの動きを読み取ります。 コントローラが回転するたびに、3行が出力されます。 turnsleft <INT> crusher <x,y> <movesto|crushes> <x,y>; ... rabbits <x,y> <x,y> ... 次に、プログラムが1行を出力するのを待ちます。 move <x,y> to <x,y>; ... 更新:最初の行がコントローラーによって送信される前に、プログラムの初期化に2秒かかります。 コントローラーのウサギの位置を入力した後、プログラムが動きに応答するのに0.5秒以上かかる場合、コントローラーは終了します。 グリッド上にウサギがいない場合、ウサギの行には値がなく、プログラムはむき出しの「移動」文字列行を出力する必要があります。 毎ターン、プログラムの出力ストリームをフラッシュすることを忘れないでください。 例 …

2
スネークピットの食糧不足
スネークピットの食糧不足 35年ぶりに、スネークピットの食料が不足しています。住民のヘビは、この食糧不足を乗り切るために、互いに戦わなければなりません。食物連鎖の一番上に立つことができるのは1匹のヘビだけです! リーダーボード まだここにいない! 最終更新は2月24日 最後の試合の視覚化へのリンク 説明 最後の残りのリンゴ/サクランボ/何のために戦いたいなら、あなたは与えられた入力を受け入れてその次の動きを返すプログラムの形で蛇を提供しなければなりません。 唯一のひねりは、あなたがピットで一人ではないということです。別のヘビも珍しい食べ物を手に入れようとします!しかし、ヘビピット内は暗いので、自分とリンゴしか見えません。敵にぶつかると、自分を噛んだり壁にぶつかったりするように、死に至ります。さらに、最近ではリンゴはめったにないので、対戦相手が長さ7に達するのに十分な量を食べたら飢えてしまいます。 スネークピットは幅と高さが15の2次元マップであり、最外部のタイルは通過できない壁を構築します。 0 1 2 . . . c d e 0 # # # # # # # # # 1 # # 2 # x # . # # . # # . # # c # # d # …

16
最小加重RoDパスの重み
させるAことmによってn矩形行列の正の整数、mとnもある正の整数です。 の左上のセルAから右下のセルへのRoD(「右または下」)パスに関心があります。RoDパスでは、パスの連続する各セルは、1つ右のセルか、前のセルの1つ下のセルです。 そのようなRoDパスがあればA、そのパス内のセルの合計を取得できます。 たとえば、4 x 3のマトリックスを考えます。 [ [1, 2, 3, 4], [5, 1, 6, 7], [8, 2, 1, 1] ] 次に、RoDパスを検討します。 1 > 2 3 4 v 5 1 6 7 v 8 2 > 1 > 1 の合計があり1+2+1+2+1+1=8ます。このパスには、そのマトリックスの左上から右下までのすべての可能なRoDパスの最小合計があることに注意してください。 したがって、提案された課題は、選択した言語で最短の関数/プログラムを提供し、左上から右下へのRoDパスが特定の行列で持つことができる最小合計を出力することAです。 通常の禁止された抜け穴が有効です。入力は合理的な形式で行うことができます。出力は整数でなければなりません。 これはコードゴルフです。回答はバイト数でスコアリングされます。 テストケース [ [5] ] -> 5 [ [5, …

5
オオカミと鶏
川があり、川の片側にはオオカミと鶏がいます。彼らはいかだを持っており、彼らはすべて反対側に到達する必要があります。ただし、いかだは単独では移動できません。3匹以上の動物が乗っていると、いかだは沈みます。川は寒くて汚いので、動物は誰も濡れません。どの動物も川を飛び越えたり、飛ぶことはできません。また、片側に鶏がいる場合、その側に鶏がいるよりも多くのオオカミがいることはできません-その後、オオカミは鶏を食べることにします。つまり、いかだに乗った2匹のオオカミを1羽の鶏と一緒に横に連れて行くことはできません。 あなたのタスクは、入力としてオオカミの数とニワトリの数(オオカミの数以上)を受け取り、いかだが川を横切る必要がある最小回数を見つけるプログラム/関数を作成することです。タスクが不可能な場合、プログラム/関数は空の文字列を出力/返す必要があります。次に、これが次のように行われる方法に関する1つのメソッドを出力/返します。 W if a wolf crosses the river on its own C if a chicken crosses the river on its own CW if a chicken and a wolf cross the river -- WC is also fine CC if two chickens cross the river WW if two wolves cross the …

1
Alphysの最新パズルの開発を支援してください!
地下の王立科学者アルフィスは、新しいパズルのプロトタイプを完成させました。しかし、彼女はそれをテストしてくれる人を見つけることができないようです。 彼女のパズルのルールは次のとおりです。 目標は、左側の中央のタイルから開始して右側に到達することです。高さが偶数のパズルの場合は、2つの中央のタイルの下から始めます。(例:インデックス0の4x4配列では、開始位置は[2,0]-行2、列0になります。インデックス0の5x5配列では、開始位置は[2,0]-行2、列になります0.) 各色のタイルには、独自の「サディスティック」機能があります。 ピンクと緑のタイル(「P」と「G」として表される)は何もしません 赤と黄色のタイル(「R」、「Y」)は通過できません。 オレンジ色のタイル(「O」)により、プレイヤーはオレンジのような香りがします。 紫色のタイル(「U」)は、プレーヤーを向いている方向の次のタイルに移動させ、レモンのような匂いを与えます。 青いタイル(「B」)は、プレイヤーがオレンジのような匂いがしない限り問題ありません。 フレーバーのメカニズムを明確にするために、プレイヤーの匂いは無期限に、または異なる香りのタイルで上書きされるまで持続します。つまり、プレイヤーがオレンジ色のタイルを踏むと、紫色のタイルを踏むまでオレンジの匂いがします。 さらに、青のタイルに垂直または水平に隣接して黄色のタイルを配置すると、青のタイルも通過できなくなります。 あなたのタスクは、入力としてパズルのレイアウトを表す2次元文字配列(または1D文字列配列、または他の有効な形式)を受け入れ、元のパズルと解かれたパズルの両方をアスタリスクなどで出力するプログラムまたは関数を書くことです正しいパスを示す他の文字。与えられたパズルは解けると仮定します。 このパズルを例として使用してください。 BGYBG PGPBG PUBPB OUGYB PPOPP プログラムは次を出力します。 BGYBG PGPBG PUBPB OUGYB PPOPP BGYBG PGPBG ***** OUGYB PPOPP 使用するパズルは、これを使用して生成する必要があります。 標準コードのゴルフ規則が適用されます。最良の回答は、各言語で最短になります。回答には、言語、バイト数、および3つのテストケースが含まれている必要があります。最初の2つは任意のレイアウトにすることができますが、3つ目は次のようにする必要があります。 RRRR RPPR PUOR RPBP

2
鶏はどのように道路を横断しましたか?
ガチャガチャ。鶏が道路を横断した理由は誰にもわかりません。反対側には見栄えの良い雄鶏がいたかもしれません。しかし、私たちはその方法を理解できます。この(または任意の)「道路」を横切る左から右へのプログラムを作成します。 1356 | 1738 3822 | 1424 3527 3718 9809 | 5926 0261 | 1947 7188 4717 6624 | 9836 4055 | 9164 2636 4927 5926 | 1964 3144 | 8254 プログラムは「交差」し、左から右に移動します。あなたが好きな一番左の列の任意の番号から始めます。そこから、右側の隣接するキャラクターに移動できます。左上隅の1で開始した場合は、3または8に移動できます。開始番号を含む、移動したすべての番号が合計に加算されます。スペースは合計に追加されません。「|」右側に移動するのではなく、強制的に上下に移動します。(このキャラクターで前進することはできません)あなたの目標は、可能な限り最小の金額で反対側に到達することです。プログラムは最後に合計を印刷する必要があり、すべての道を解決できなければなりません。道路への入力も可能ですが、必須ではありません。プログラムは、パスと合計の両方を印刷する必要があります。最少バイトのコードが勝ちます。 明確にするために、垂直バー上にいる場合を除き、診断的に移動できます。垂直バーにいるときのみ上下に移動できます。 道路をより明確に指定するために、基本的には文字列(または列や行の配列)を文字のルールに従いますが、文字は何もありません道路。任意の数字、スペース、バー( "|")、または改行を使用できます。ProgrammerDanの答えのように、道路が酔っ払った男によって舗装された場合、それはまだ有効な道路であり、プログラムはそのような道路を解決できる必要があります。反対側に到達することが不可能な場合、道路とはみなされません(たとえば、バーの直線から抜け出す方法がありません)。 プログラムは、道路が無効かどうかを判断する必要はありません。 キー: 任意の数字-合計に数字を追加し、前進します。 スペース-前進します。合計には何も追加されません。 「|」-上下に移動しても、合計には何も追加されません。 編集:提案されたソリューションの例。私は恐ろしく大きなものを作ることはできません。ATMのためにそれを解決するIDEに乗ることはできません。 この小さな道を進みます。 9191 | 8282 1919 | 2727 5555 5555 …

9
ポータル迷路の最短経路
あなたの目標は、使用してランダムな10×10のマップを作成するプログラムを書くことで0、1、および2、および左上から右下に最短経路を見つける、と仮定します: 0は芝生のフィールドを表します。誰でも歩くことができます。 1は壁を表します。壁を越えることはできません。 2はポータルを表します。ポータルに入ると、マップ内の他のポータルに移動できます。 仕様: 左上の要素と右下の要素は0でなければなりません。 ランダムマップを作成するとき、すべてのフィールドは、0になる確率が60%、1になる確率が30%、2になる確率が10%でなければなりません。 隣接するフィールドで移動できます(斜めのフィールドでも)。 プログラムは、マップと最短パスのステップ数を出力する必要があります。 右下のフィールドにつながる有効なパスがない場合、プログラムはマップのみを出力する必要があります。 任意のリソースを使用できます。 最短のコードが優先されます。 ステップの計算: ステップは実際の動きです。フィールドを変更するたびに、カウンターをインクリメントします。 出力: 0000100200 0100100010 1000000111 0002001000 1111100020 0001111111 0001001000 0020001111 1100110000 0000020100 9

1
カタンの開拓者-最長の道!
これは、カタンの開拓者の終盤ボードです。 バックグラウンド: 道路(長い棒の部分)と集落(および都市)は、小さな小屋によってレンダリングされます。次のスキームを使用して、これらのピースの配置をエンコードします。上から、道路を配置できる行の水平頂点とエッジがあります。次に、道路のみの列などがあります。赤にR、オレンジにO、青にBを使用し、_を使用しない場合、写真のボードは次のようにエンコードされます。 ________RR_R_ __R_ __RR_R_RRR_____R_ B___R _B_________B__OO_OOR_ B__B_R BB_BBB_____B____RR_R_ OBB_O OO__BB_BB__OOO_OO O_O_ _O_OOO_O_____ このようなボードが入力文字列になります。どんな手紙でも[A-Z]もプレーヤーの色を示すことができますが、最大4色(空を含む)があります。それ以外の場合、ボードは入植者の規則に従って有効であることが保証されます。 各色には、最大で2つの連続した道路網があり、他のプレイヤーの居住地/都市(頂点の建物)によって分割される場合と分割されない場合があります。サンプル画像の右側のオレンジ色の集落が赤い道路をバラバラにしているのを見てください。 各道路網には、少なくとも1つの集落があることが保証されています。 すべての集落と都市は、少なくとも 、最も近い他の集落/都市(あなたのものまたはそうでないもの)から 2つの端 1人のプレイヤーは、ゲームボード上に15の道路しか持てません。 カタン愛好家の場合:この問題の目的のために集落と都市の区別はないため、入力文字列では区別しません。 これはすべて、「入力」文字列を指定するためのものです。 最長の道: 入植者では、プレイヤーは「最長の道」を持つことで2つの勝利ポイントを獲得します。これは次のように定義されます:開始地点から終了地点までの最長の連続した単一の経路(道路で測定)。敵の集落または都市によって分割されない。特定の開始点から特定の終了点までのパスをトレースできる限り、サイクルは問題ありません。したがって、6本の道路と分岐する1本の道路のループは長さ7ですが、反対側の6本の道路ループから分岐する2本のループはまだ7の価値しかありません。 例のマップでは、右側の赤い道路は4の価値しかありません。ボードの右側のオレンジの集落によって彼が切り離されているためです(そのため、集落はまったく含まれません)。青には長さ13の道路があり、オレンジには長さ12の道路があります。赤の一番上の道路は、その隣の2つの単一道路に接続していないため、7の価値があります。 出力: 最長の道路(同点の場合は複数になる可能性があります)があり、その後に空白またはアンダースコアで区切られた道路があるすべてのプレイヤーは、その道路の長さのベース10でカウントされます。 したがって、サンプルボードの出力は次のようになります。 B 13 問題ステートメント: プログラムまたは関数を記述し、STDIN経由で、または関数への文字列引数として入力ボードを受け取ります。関数は、上記の出力を文字列として返すか、STDOUT(または最も近い代替)に出力します。オプションで、出力に単一の末尾の改行を含めることができます。 これはcode-golfで、最短のプログラムが勝ちます。もちろん、標準的な抜け穴は禁止されています。

4
除数グラフの最短経路
前書き この課題では、特定の無限の無向グラフを扱います。これを高除数グラフと呼びます。そのノードは、2つのノード間のエッジがある2から始まる整数である<Bであれば分割のB及び2 ≥bは。2〜18の範囲で形成されるサブグラフは次のようになります。 16-8 12 18 \|/ |/| 4 6 9 10 15 14 | |/ |/ | 2 3 5 7 11 13 17 無限大除数グラフが接続されていることを示すことができるため、2つのノード間の最短経路について尋ねることができます。 入出力 入力は2つの整数aとbです。2≤a≤b <1000と仮定できます。あなたの出力との間の最短経路の長さであり、そしてB無限高い除数のグラフです。これは、パス内のエッジの数を意味します。 あなたは次のことが役立つことがあります。常にから最適なパスが存在するB最初に増加し、その後減少し、かつ厳密に未満のみの訪問ノードだ2bの2。特に、b <1000なので、2 000 000未満のノードのみを考慮する必要があります。 例 入力3とを考慮してください32。ノード3と32の間の1つの可能なパスは 3 -- 6 -- 12 -- 96 -- 32 このパスには4つのエッジがあり、短いパスはないため、正しい出力は4です。 別の例として、のための最適な経路2と25なります 2 -- 4 -- …

2
どうすれば人生でもっと多くのKlotskiを獲得できますか?
私はタイルパズルをスライドさせるのが大好きですが、最近は時間がありませんでした。したがって、スライディングタイルパズル、特にKlotskiパズルを修正するプログラムが必要です。 入力は次の形式になります。 ####### #001gg# ##.222# .###### ここで、#は壁、.オープンエリア、g目標、隣接する数字は異なるブロックを表します。あなたはそれを仮定することができます: 10ブロックを超えることはありません 同じ番号のブロックは2つありません すべてのブロックは壁で囲まれます グリッドは長方形です 0ブロックは、目標の正方形のすべてをカバーするために十分な大きさです。 有効な解決策があります 0すべてのゴールスクエアをカバーするようにブロックを配置する一連の動きを返す必要があります。ブロックは壁や他のブロックを通過できません。上記のパズルの場合、適切なシーケンスは 2L,1R,1R,1D,0R,0R,0R 2ブロックを左に1マス、1ブロックを右に2マス(ゴールの上)、次に1マス下に移動し、0ブロックを右に3マス移動することを表します。 実際には、上記の問題に対して機能するいくつかのシーケンスがあり、それらのいずれかを生成することは許容されます。ソリューションは最適でなければなりません。つまり、できるだけ少ないステップでパズルを解くシーケンスを作成する必要があります。 シーケンスは上記のように出力する必要がありますが、カンマ、改行、またはスペースで区切ることができます。末尾にコンマまたは空白があるかどうかは気にしません。妥当な時間で出力を生成する必要があります(以下のパズルでは最大120秒)。 パズル1: ..####.. ..#00#.. ###00### #......# #.1122.# ##3124## .#3344#. .##55##. ..#gg#.. ..####.. パズル2: ###### #1002# #1002# #3445# #3675# #8gg9# ###### パズル3: .####. ##1g## #22g3# #4255# #4.56# #.006# #7008# ###### パズル4: .####. ##00## #.00g# …

2
一連のターンが与えられた最短の自己回避経路
右または左ターンの空でないシーケンスが与えられた場合に、それらのターンを持つ2Dラティス上の最短の自己回避パスの長さを出力するプログラムまたは関数を記述します。 入力は、各文字があることで、文字列として扱われるべきRか、Lそれぞれ右左折のために。 出力は整数、つまり指定されたターンの最短経路の長さでなければなりません。 これはゴードゴルフです-最短のコードが勝ちます。 例 与えられた入力 LLLLLLLLLLRRL 最短パスは次のとおりです(から開始#): +-+-+-+-+-+-+ | | + . + +-+-+ + | | | | | + +-+ + #-+ + | | | | + +-+ +-+-+-+ | | +-+-+ . . . . そして、このパスの全長は29(sではなく、s -と|sを数える+)です。 テストケース L 2 RRRRRRRRRR 23 LRRLRLRRRRL 15 LLRRLRRRRLLL …

3
ギャップを埋める
白の背景と黒のドットのセットを備えた白黒の画像が与えられたら、黒のピクセルの各ペアの間にパスがあるように、白のピクセルのセットを赤でペイントします。 詳細 パスは、接続されたピクセルのセットです(8近傍接続)。黒いピクセルをパスの一部として使用できます。目標は、上記の条件下で赤いピクセルのセットを最小化して、対応する画像を出力することです。 最適なソリューションを見つける必要はありません。 些細で同時に最悪の解決策は、すべての白いピクセルを赤で塗りつぶすことです。 例(視認性のためにピクセルが拡大されています): 詳細 (適切な形式の)ピクセル画像を指定すると、上記で指定したようにドットが接続された別の画像と、使用された赤いピクセルの数を示す整数が返されます。 スコアは、14個のテストケースのそれぞれの積(1 +赤いピクセルの数)です。 目標は最低のスコアを持つことです。 テストケース 14個のテストケースを以下に示します。出力の接続性を確認するためのpythonプログラムは、ここにあります。 メタ さまざまな提案をしてくれた@ Veskah、@ Fatalize、@ wizzwizz4、@ trichoplaxに感謝します。

3
マルチレベルの無料駐車スペースファインダー
キッズ関連のイントロ 子供を遊園地に連れて行くたびに、子供たちは公園に近づくにつれて緊張し、駐車場にいるときに神経質になり、駐車する場所が見つかりません。そこで、駐車に費やす時間を最小限に抑えるために、最も近い無料駐車スペースを見つける方法が必要だと判断しました。 技術紹介 このような駐車場の表現を想像してください: ***************** * * * ··CC··C··CC·· * * ************* * * ··CCCCCCCCC·· * * * **********E****** この表現で*は、aは壁、·無料駐車スペース、E入り口、およびCすでに駐車されている車を意味します。すべての空白は、駐車する車が駐車場内を移動するために使用できる位置です。次に、この概念を3Dに拡張して、複数レベルの駐車場を作成します。 1st floor 2nd floor 3rd floor 4th floor ***************** ***************** ***************** ***************** * 1 * 2 * 3 * * * CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * …

1
サンフランシスコのタクシー
あなたはサンフランシスコのタクシー運転手です。タクシードライバーの典型であるように、移動できる有効な方向は左、右、上、下のみであるグリッドをナビゲートしています。ただし、サンフランシスコは非常に丘が多いため、2つの隣接する交差点間の距離は必ずしも同じではありません。より具体的には、高度aでの交差点と隣接する高度での交差点間の距離bはになります1 + |a - b|。あなたの目標は、地図の左上の出発地から右下の目的地までの最短経路をすべて見つけることです。 入力 最も便利な形式の整数高度の2次元グリッド(2次元配列、幅や高さを持つ1次元配列など)。 出力 最短距離高度の二つの隣接する交点間の距離与えで左上から入力の右下隅に到達する旅行への方向の配列aとbの式で与えられます1 + |a - b|。複数のソリューションがある場合、すべてのソリューションを出力します。 私が使用していますがU、D、L、およびRアップのために、下、左、右、それが中に、すべての入力間にそれらと一致しているとして、方向を表すために、任意の4つの別個の文字列を使用することができ、あなたのプログラム以下の例インチ 例 Input: 0 3 0 0 0 0 2 0 2 0 0 0 0 3 0 Output: D D R R U U R R D D Input: 3 Output: <empty> Input: 11 11 11 …

1
チェッカーズ:キングミー?
チャレンジ: チェッカーボードが与えられた場合、可能な限り最小の動きを出力し(黒がまったく動かないと仮定して)、可能であれば赤の駒をキングします。 ルール: 赤の側は常に下になりますが、それらの駒はどの列からでも開始できます(王の列であっても到達する必要があります)。黒のピースは静止しているため、赤の動きの間に移動することはありませんが、キャプチャされるとボードから削除されます。ピースはボード上の任意のスペースで開始できることに注意してください。これは通常のチェッカーの再生方法ではありませんが、プログラムでこれらを解決できる必要があります。(入力5を参照)ただし、チェッカーピースは斜めにのみ移動する必要があります(入力3を参照)。最初のキャプチャーがチェーンの前方にある場合、逆方向キャプチャーが許可されます(入力7を参照)。 入力: ボードスペースが次の文字として定義されている8x8チェッカーボード(一貫性がある限り自由に代替を使用できます): 。- 空の R-赤いピース B-黒い部分 出力: ボードの一番上の列(黒の側)の王の列に入ることによって「王」になるために赤い駒が必要な動きの最小数。赤いピースをキングすることが不可能な場合は負の数(つまり、黒が最初の行全体を占める)。 入力1: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . …

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