問題タブ [river-crossing-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.
prolog - プロローグ リバー クロッシング
そのため、Prolog でこの問題を解決しようとする課題が与えられましたが、先生は基本的なことしか説明しておらず、これは本質的に Prolog の唯一のプロジェクトです。私はそれを考えすぎているように感じます.そして、彼は初めてのPrologプログラムとして期待しすぎているだけです.
問題は次のとおりです。これを解決するにはどうすればよいですか?
次の文章題を解く Prolog プログラムを書きなさい。ソリューションの一部として、パドラーが最初にリストされた状態で、すべての交差点を出力する必要があります。
トム、ジャック、ビル、ジムは、2 人乗りのカヌーで川を渡らなければなりませんでした。
川の左岸から右岸への 3 回の渡河ではそれぞれ 2 人がカヌーに乗り、右岸から左岸への 2 回の渡河ではそれぞれ 1 人がカヌーに乗っていました。トムは、他の誰かが彼と一緒にカヌーに乗っているとき、パドルを漕ぐことができませんでした。
ビル以外の誰かが彼と一緒にカヌーに乗っているとき、ジャックは漕ぐことができませんでした。一人一人が少なくとも 1 回の横断をパドリングしました。
これは私がこれまでに持っているものですが、「機能する」とはいえ、誰もが少なくとも一度はパドルすることを保証するものではありません.
artificial-intelligence - PDDL - ヤギとオオカミとキャベツ
有名な「ヤギとオオカミとキャベツ」のシナリオの解決策を書くように依頼されました。シナリオは次のようになります。
農夫は 3 つすべてを川を渡って輸送したいと考えています。ただし、次の場合:
- ヤギとキャベツを放っておくとヤギがキャベツを食べてしまう
- オオカミとヤギを放っておくと、オオカミがヤギを食べてしまいます!
したがって、問題の1つの解決策は次のとおりです。
- ヤギを連れて川を渡り、対岸に降ろす
- 川を渡って戻ってきて
- キャベツかオオカミのどちらかを拾い、反対側に持っていく
- オオカミを降ろし、ヤギを拾い、反対側に戻る
- ヤギを降ろし、キャベツを拾い、反対側に戻る
- ヤギを拾って、出来上がり!3つすべてが輸送されます。
ただし、これを PDDL に投影するのに問題があります。私は問題の定義を与えてきました:
最後に、述語は 1 つしか与えられておらず、これは 4 つのアクションで実行できると言われています。Move_empty、move_goat、move_wolf、move_cabbage。
述語は次のとおりです。
(config ?wolf ?goat ?cabbage ?boat) (valid ?wolf ?goat ?cabbage ?boat)
そして、私は move_empty で開始しようとしました:
私が見つけたものから、PDDLに関する多くの情報がないため、これを解決する方法についてのヘルプとアドバイスのみを希望します。
append - ネストされたリストに複数のアイテムを追加する方法は? 川を渡る問題のバリエーションにうまくアプローチするにはどうすればよいでしょうか?
私は、オオカミ、ヤギ、キャベツの問題に似たこのなぞなぞを解こうとしており、それをグラフ形式で表現しようとしています (ノードとエッジがすべての潜在的なパスを表しています)。
これが問題です:
2 つのサーカス家族は、母、父、娘からなる 1 つの家族が空中ブランコの左側に、もう 1 つの家族 (2 人の兄弟と 1 人の姉妹) が空中ブランコの右側にいるという行為を行いました。空中ブランコ。各人は自分のブランコにぶら下がることから始め、次のように 2 つの家族を分ける空のブランコがあります。
母、父、娘、空、妹、弟、兄
人は自分のスイングから、現在のスイングに隣接するか、どちらかの家族の 1 人の個人によって自分の位置から離れている空のスイングにスイングすることしかできません。トリックの目的は、両方の家族が側を交換することです。家族のどのメンバーも、どの段階でも後方にスイングすることはできません。トリックが成功する結果となる一連の動きは何ですか?
左側のファミリーをファミリー「A」、右側のファミリーを「B」、空のファミリーを「É」とラベル付けし、最初の位置から始めて、存在する可能性のあるすべての順列をグラフ化しようとしました。
今、私は最初の可能性のある動き (隣接する空のスイングへの移動) のみを実行しようとしましたが、技術的な問題が発生しているようです。理由はわかりません。
各ステップで可能なステップのリストを作成しようとしています。
これは私が持っているものです。
新しいアイテムを新しいリストに追加しようとしていますが、代わりにアイテムが変更されます。追加がifステートメントに2回あり、追加されたアイテムを変更するだけなのでしょうか? これを行うより効率的な方法はありますか?助けていただければ幸いです:)