前提・実現したいこと
現在、pythonを使ってアルゴリズムやデータ構造などを勉強中なのですが、
問題につまずいてしまいヘルプをお願いしたいです。
乱数を発生させる為に2つの整数を入力します。この整数の最初の数は乱数を発生させるための数字で、
後ろの数は1の発生率になります。
数が大きくなればなるほど、10*10の枠組みの中の1の数が増えます。
その中から、縦と横の、(斜めは含めません)連続する1のみで出来た歪な図形の杭(spike)の部分を赤色に染めて出力するという問題なのですが、logicが分からずに困惑しています。
下の写真はそれに応じた出力結果になります。ちなみに、枠組みの中に1でできた図形が複数ある場合はその中から、最大の面積をもつ図形の杭を出力させます(黄色に塗ってあるのはその図形を見易くするためで出力とは関係ありません)。
該当のソースコード
from random import seed, randrange import sys dim = 10 def display_grid(): for row in grid: print(' ', *row) def colour_shapes(): pass def max_number_of_spikes(nb_of_shapes): pass try: for_seed, density = (int(x) for x in input('Enter two integers, the second ' 'one being strictly positive: ' ).split() ) if density <= 0: raise ValueError except ValueError: print('Incorrect input, giving up.') sys.exit() seed(for_seed) grid = [[int(randrange(density) != 0) for _ in range(dim)] for _ in range(dim) ] print('Here is the grid that has been generated:') display_grid() nb_of_shapes = colour_shapes() print('The maximum number of spikes of some shape is:', max_number_of_spikes(nb_of_shapes) )
試したこと
from random import seed, randrange import sys dim = 10 def display_grid(): for row in grid: print(' ', *row) def colour_shapes(): pass maxArea = 0 def display_grid(): for row in grid: print(' ', *row) def max_number_of_spikes(nb_of_shapes): global maxArea for i in range(dim*dim): # fixed point x = i % dim y = i // dim # from fixed point to right side until the wall for j in range(2,dim+1-x): #print(f'x={x}, y={y}, j={j}') area = is_safe(x,y,j) if area != 0: # to search under for k in range(1,dim-y): # y axis += 1 area2 = is_safe(x,y+k,j) if area2 == 0: if k==1: area = 0 break else: area += area2 #print(x,y,j,area) #x,y, length, area maxArea = max(maxArea, area) # to search for left under return maxArea def is_safe(x,y,length): result = 0 # if x is not over the left side if x < 0: return 0 # if x is not over the dimention (10*10 grid) if x+length > dim: return 0 for xi in range(length): result += grid[y][x+xi] if result == length: return result else: return 0 try: for_seed, density = (int(x) for x in input('Enter two integers, the second ' 'one being strictly positive: ' ).split() ) if density <= 0: raise ValueError except ValueError: print('Incorrect input, giving up.') sys.exit() seed(for_seed) grid = [[int(randrange(density) != 0) for _ in range(dim)] for _ in range(dim) ] print('Here is the grid that has been generated:') display_grid() nb_of_shapes = colour_shapes() print('The maximum number of spikes of some shape is:', max_number_of_spikes(nb_of_shapes) )
自分のコードで2次元配列の枠組みの行と列を1つずつみて行って、その中から出来た最大面積の図形を返す関数とis_safeで枠組みの中からはみ出していたり、1ではない時には0を返すという関数を作ったのですが、
出力が違いダメでした。color_shapes内の関数はまだ杭が見つけられてないのでpassしています。最初からコードを書き直す形でも自分的には問題ないので、問題が解ける方が居ましたら、
お助けいただけば幸いです。よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー