ヒドラ・スレイヤーの帰還


Its been a while since you killed that hydra
, you basked in the
glory for years, but now people are calling you washed up, a has
been. Well its time you prove them wrong, you’ve heard the
whereabouts of annother hydra. Simply kill it and you will be
awarded all the glory you deserve.

あなたはあなたの剣を受け取るために兵器庫に到着するが、彼らはすべてがセクターである通常の剣から出ている。
nセクタは、ヒドラのヘッドの数をnで除算しますが、ヘッドの数がnで割り切れる場合にのみ使用できます。

もう一度、ヒドラを殺すのに役立つコードを書くつもりです。
あなたのコードは、ヒドラの頭の数を入力として受け取り、戦いを開始し、ヒドラが各ターンを迎える頭の数、そしてあなたが使うことができるn-セクタのリストを取ります。あなたのコードは、可能な限り速くハイドラを殺すための最適な動きパターンを出力します

戦いの各ターンは、あなたがスライスの後にヒドラがあなたが勝つ唯一の頭を持っている場合は、それが頭を育てる場合は、使用する単一の剣を選択することがあります。あなたは決して動かすことはできません、そして可能な動きがない場合、あなたは失います。

解決策がない場合は、ソリューション以外のものを出力することができます。空のリスト、何もない、数字の0など

This is
so answers will be scored as their byte counts, with less being
better.

テストケース

いくつかの超基本的なテストケースがありますが、要求に応じてさらに多くのテストケースが追加されます。

24 heads, 1  heads per turn, [2,3] -> [3,3,2,3]
25 heads, 2  heads per turn, [2,3] -> No solutions
4  heads, 2  heads per turn, [2]   -> No solutions
4  heads, 3  heads per turn, [2,5] -> [2,5]
10 heads, 17 heads per turn, [2, 3, 7, 19] -> No solutions
10 heads, 6  heads per turn, [1,16] -> [1,16]
6  heads, 2  heads per turn, [2, 3, 5] -> [2, 5]
125 heads, 1  head per turn, [1, 2, 3, 127] -> [1, 1, 127]
ベストアンサー

JavaScript(ES6)、 111 105バイト

@ThePirateBayのおかげで4バイト保存

(h,p,a)=>{for(b={[h]:[]};c=b,b=[];)for(d in c)for(e of a){d%e?0:q=b[d/e+p]=[...c[d],e];if(d==e)return q}}

もっと安全な幅優先ループのために使用しようとしていた、深さ優先の再帰を捨てました。存在する場合は配列として出力し、そうでない場合は永遠に出力します。これが許されない場合、最終的に停止するものがあります(とにかくほとんどの場合)。

(h,p,a)=>{for(b={[h]:[]};c=b,b=[],c+c;)for(d in c){for(e of a){a[[,d]]||d%e?0:q=b[d/e+p]=[...c[d],e];if(d==e)return q}a[[,d]]=1}}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です