2016-11-10 8 views
1

私は、脳の霧のような構造を解こうとしています。誰かがこの問題を解決するのに役立つかもしれません。特定の結果に到達するためにループを生成する

10 11 12 00 11 12 13 01 12 13 14 02 13 14 15 03 14 15 16 04 15 16 17 05 

10 11 12 20 11 12 13 21 12 13 14 22 13 14 15 23 14 15 16 24 15 16 17 25 

10 11 12 02 11 12 13 03 12 13 14 04 13 14 15 05 14 15 16 06 15 16 17 07 

10 11 12 22 11 12 13 23 12 13 14 24 13 14 15 25 14 15 16 26 15 16 17 27 

このテーブルを生成するアルゴリズム/ループのセットはどのように見えますか?外観の順序は重要ではありません。ちょうど4つのペアのすべてのバンドルがポップアップするはずです。ペアは実際には個別の数字である必要があります。つまり10tenではなく10です。

EDIT:数字には確かにパターンがあります。しかし、パターンを「キャッチ」するための適切なループを作成することはできませんでした。

(これだけはすでに役立つだろう解くことができる場合)最初の行の一つのパターンは以下のとおりです。

x = 1 
i = 0 
xi x(i+1) x(i+2) (x-1)i  x(i+1) x(i+2) x(i+3) (x-1)(i+1) ... 
+4

あなたはあなたが問題を抱えていることを指摘して、あなたが試したことを示すことができますか? – glibdud

+1

はこの宿題ですか? – RickyA

+1

なぜ最後の2つのグループ( '16 17 18 26'と '17 18 19 27')ではなく( '14 15 16 26'と '15 16 17 27')ですか?このテーブルはどのような種類のデータ構造ですか?それは単なる文字列ですか、それとも何らかのリストであると思われますか? –

答えて

1

をこのコードは、文字列の3Dリストとして必要なデータを生成するものを決定するアルゴリズムで列と行を使用しました。

a = (0, 0), (2, 0), (0, 2), (2, 2) 
b = 10, 11, 12 
result = [ 
    [ 
     [str(i + j) for j in b] + [str(u) + str(v+i)] for i in range(6) 
    ] for u, v in a 
] 

# Display the resulting list in a relatively compact way  
for row in result: 
    print([' '.join(u) for u in row]) 

出力

['10 11 12 00', '11 12 13 01', '12 13 14 02', '13 14 15 03', '14 15 16 04', '15 16 17 05'] 
['10 11 12 20', '11 12 13 21', '12 13 14 22', '13 14 15 23', '14 15 16 24', '15 16 17 25'] 
['10 11 12 02', '11 12 13 03', '12 13 14 04', '13 14 15 05', '14 15 16 06', '15 16 17 07'] 
['10 11 12 22', '11 12 13 23', '12 13 14 24', '13 14 15 25', '14 15 16 26', '15 16 17 27'] 

これらのペアは、実際に我々はわずかに異なる戦略が必要整数のペアことになっている場合:

from pprint import pprint 

a = (0, 0), (2, 0), (0, 2), (2, 2) 
b = 10, 11, 12 
result = [ 
    [ 
     [divmod(i + j, 10) for j in b] + [(u, v+i)] for i in range(6) 
    ] for u, v in a 
] 

pprint(result) 

出力

[[[(1, 0), (1, 1), (1, 2), (0, 0)], 
    [(1, 1), (1, 2), (1, 3), (0, 1)], 
    [(1, 2), (1, 3), (1, 4), (0, 2)], 
    [(1, 3), (1, 4), (1, 5), (0, 3)], 
    [(1, 4), (1, 5), (1, 6), (0, 4)], 
    [(1, 5), (1, 6), (1, 7), (0, 5)]], 
[[(1, 0), (1, 1), (1, 2), (2, 0)], 
    [(1, 1), (1, 2), (1, 3), (2, 1)], 
    [(1, 2), (1, 3), (1, 4), (2, 2)], 
    [(1, 3), (1, 4), (1, 5), (2, 3)], 
    [(1, 4), (1, 5), (1, 6), (2, 4)], 
    [(1, 5), (1, 6), (1, 7), (2, 5)]], 
[[(1, 0), (1, 1), (1, 2), (0, 2)], 
    [(1, 1), (1, 2), (1, 3), (0, 3)], 
    [(1, 2), (1, 3), (1, 4), (0, 4)], 
    [(1, 3), (1, 4), (1, 5), (0, 5)], 
    [(1, 4), (1, 5), (1, 6), (0, 6)], 
    [(1, 5), (1, 6), (1, 7), (0, 7)]], 
[[(1, 0), (1, 1), (1, 2), (2, 2)], 
    [(1, 1), (1, 2), (1, 3), (2, 3)], 
    [(1, 2), (1, 3), (1, 4), (2, 4)], 
    [(1, 3), (1, 4), (1, 5), (2, 5)], 
    [(1, 4), (1, 5), (1, 6), (2, 6)], 
    [(1, 5), (1, 6), (1, 7), (2, 7)]]] 

ここでは、ループの代わりに、ネストされたリストの内包表記は、「伝統的な」を使用して第二の溶液の変化があります。うまくいけば、読むのが少し楽です。 :)

a = (0, 0), (2, 0), (0, 2), (2, 2) 
b = 10, 11, 12 
result = [] 
for u, v in a: 
    row = [] 
    for i in range(6): 
     row.append([divmod(i + j, 10) for j in b] + [(u, v+i)]) 
    result.append(row) 

内蔵divmod関数は、その引数で除算およびモジュラスを行うので、abが整数であるときdivmod(a, b)a // b, a % bと等価です。 xが2桁の整数なら `divmod(x、10)は2桁のタプルを返します。

+0

この結果は私が探していたものです。しかし、私はまだコードを把握していません。それを掘り起こす必要があります。 –

+1

@ Al_Iskander "従来の" forループを使用する2番目のソリューションのバリエーションを追加します。これは理解しやすいでしょう。 –

+0

が完璧です。非常に役立ちます。どうもありがとう –

1

私はこの問題のために効率的なアルゴリズムが出ている:)

for row in range(4): 
    extra = 0 
    if row >= 2: 
     extra = 2 
    for column in range(6): 
     print(10+column, 11+column, 12+column, str(2*(row%2))+"."+str(column + extra), end = " ") 
    print() 

考えますそれはテーブルのように、行単位で、次に列単位で作業したいと考えています。私はあなたが理解していないものがあるかどう数字は

コメントを追加する必要があります:)

+0

ありがとう。結果は正しい方向です。しかし、@PM 2Ringの答えは数字の問題をより直接的に扱っています。 –

+0

問題はありません:) –

関連する問題