2016-10-26 9 views
-2

どのようにこの問題をPythonで解決しますか?荷物をパイソンで扱う?最後のコンテナ、最後のアウト、最初の荷物

荷物を荷物に積み込む。コンテナが限界に達したら(100ポンド)。あなたは次のコンテナに移動します。これは荷物を積み込む方法です。

データをアンロードするときは、最後にロードされたコンテナ(最初は100ポンド未満です)をアンロードしてから、最初にロードされた荷物、次に2番目の荷物を取り除きます)次の容器に移す。

質問が明確でない場合。ここで

は、我々は3個のコンテナを持っているし、ここで、この配列の最後の項目が最初にロードされるロード配置

[30,45,15,25,50,20,30,60] 

だったと言うように積載配列が見えるものです。 2番目の荷物の後、最初の荷物は20ポンドの荷物を収容できませんでしたので、次の荷物に入りました。

20,50,25が2番目に入り、15,45,30が最後のものに入りました。

荷降ろしするときは、最後の荷物の最初の荷物から始め、その順序で移動します。

従って搬出アレイは

[15,45,30,20,50,25,60,30] 

出力に入力を変換することができる機能がありますか?

各容器は100 lbs以下に保たなければならないことに留意してください。

ご意見やご提案はありますか?質問rambles場合

申し訳ありませんが、これは、スタック上の私の最初の質問

THANKSです!

A=[15,20,25,45,20,30,65] 
output=[20,15,20,45,25,65,30] 

    def input_output(A): 
     for i in range(1,len(A)): 
      B=[]*len(A) 
      if A[-i]<100: 
        B[0]=A[-i] 
        B[i]=A[-i-1]+B[i-1] 
        if B[i]>100: 
         for j in range(1,i): 
          C=[]*len(A) 
          C[-i]=A[i-len(A)]# Need a subarray to get reversed. 
           #I don't feel this is going the right direction 
           # C is my intended output array 
+1

はあなたを持っています自分で何か試した? –

+0

私はそれについて考えてみました。アルゴリズムは理にかなっていますが、実装できないようです。A = [15,20,25,45,20,30,65] B = [20,15,20,45,25,65,30]範囲(1、LEN(A))におけるiに対する : B = [] * lenは(A) A [-i <100であれば: B [0] = A [-i] B [i] = A [-i-1] + B [i-1] if B [i]> 100: iの範囲(i、0)の場合: #逆順にするにはサブアレイが必要です。 かなりつまらない – shabieh2

+2

上記のコードを上に置いてください(4つのスペースをインデントするとコードとして表示されます)。 – AChampion

答えて

1

をあなたのアルゴリズムを考える必要があります。ここでは

は、私がこれまで試してみましたものです。
ビンを100に基づいて作成していますので、ビンを構築してから、期待される出力を得るために分解してください。

A = [15,20,25,45,20,30,65] 
bins = [[]] 
for i in reversed(A): 
    if sum(bins[-1]) + i > 100: 
     bins.append([]) 
    bins[-1].append(i) 

>>> bins 
[[65, 30], [20, 45, 25], [20, 15]] 

だから、あなただけのビンを逆にして平らにする必要があり、これはいくつかの方法を行うことができます:インデックスは常にbinsの最後のビンに追加する手段として[-1]を使用して

>>> [a for b in reversed(bins) for a in b] 
[20, 15, 20, 45, 25, 65, 30] 
# Or 
>>> sum(reversed(bins), []) 
[20, 15, 20, 45, 25, 65, 30] 
# Or 
>>> import itertools as it 
>>> list(it.chain.from_iterable(reversed(bins))) 
[20, 15, 20, 45, 25, 65, 30] 
+0

ありがとうAchampion! 私は使用していない機能をいくつか使用していますので、試してみてください! 出力のように見えます! – shabieh2

+0

間違った人のおかげで@ shabieh2 :) AChampionは答えた人です。 – sberry

+0

編集をしました 笑、私はすべての場所を見ることができます..非常に高速ターンアラウンド:) – shabieh2

関連する問題