コードのナゲット
それはだそれは仮定の状況金曜日の夜、あなたの好きな趣味に参加するために通常のゴルフ仲間の上に招待した:コードゴルフ。ただし、これは非常に頭脳流出の作業であるため、コードから可能な限りゴルフをできるように、グループの脳の食べ物を手に入れる必要があります。
今、みんなのお気に入りのスナックはチキン・ナゲットですが、問題があります:みんなのニーズを満たす単一のパックはありません。だから、あなたはすでにゴルフのムードにいるので、すべてのナゲットのニーズを満たすために購入しなければならないパックを正確に把握するプログラムを作成することにします。
チキンナゲットパックのサイズはいたるところにあり、世界のどこに住んでいるかによって標準サイズも変わります。ただし、最も近い[ナゲットを提供する場所]では、次のサイズのナゲットパックを在庫しています。
4, 6, 9, 10, 20, 40
これで、ナゲットの特定の組み合わせを注文できないことに気付くかもしれません。たとえば、正確に11等しい組み合わせがないため、ナゲットは不可能です11。ただし、431パック20、1パック10、1パック9、1パック4、
20 + 10 + 9 + 4 = 43 (597)
ここ597で、各項は二乗されて加算されます(ヒント:最適なソリューションではこれが最高値になります)。もちろん、他の作成方法もあり43ますが、ご存知のように、パックあたりのナゲットが多いほど、ナゲットごとに安くなります。したがって、コストを最小限に抑えるために、理想的には最小数のパックを最大数で購入する必要があります。
タスク
各人の要件に対応する整数のリストを取得するプログラムまたは関数を作成する必要があります。次に、チキンナゲットを購入するための最もコスト効率の高いα注文を計算して印刷する必要があります。最もコスト効率の高いα次数は、各数量の二乗和が最高になる組み合わせです。完全にナゲットを購入する方法は絶対に存在しない場合、あなたがしなければならない印刷などfalsy値を、、、またはあなたの言語で利用可能であるものは何でも。0FalseImpossible!
I / Oの例:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
以下は、最初の400の理想的なソリューションのリストです。これらは、あなたの期待通りにフォーマットされていないことに注意してください。それぞれtupleはの形式(N lots of M)です。
ルール
- 標準的な抜け穴はありません。
FrobeniusSolveMathematica など、タスクのすべてまたは大部分を実行する組み込み関数は使用しません。
α-これを例で明確にするために、を行うことで43を作成することもできますが4 + 6 + 6 + 9 + 9 + 9 = 43 (319)、これは最適ではなく、したがって、平方和が導入部で述べた組み合わせよりも小さいため、誤った出力になります。基本的に、平方和が大きいほどコストが低くなり、コスト効率が最も高くなります。