サイズがm * nの入力配列があります。配列内の各セルには、PまたはTが入力されます。配列に対して実行できる操作は、列の反転のみです。列を反転すると、その列のすべてのセルの文字が切り替わります(PはTになり、逆も同様です)。同じ文字で「x」個の行がある場合(PPPPなど)、ポイントを取得します。結果の配列が可能な最大数のポイントを持つように、配列を取り込んでソリューション(どの列を反転するか)を返すアルゴリズムを設計します。
注:最高のスコアをもたらす複数のソリューションがある場合、フリップの数が最も少ないものを選択してください。例:
入力配列:
PPTPP
PPTPP
PPTTP
PPPTT
PPPTT
出力:
3
説明:
最高点をもたらす解決策:列番号を反転します。3
次に、元の配列は次のようになります。
PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT
//Total: 2 points
列4と5を反転してスコア2を取得することもできますが、追加の反転が必要なことに注意してください。
任意の便利な入力形式を使用して2次元配列を表すことができます。また、2つの異なる(ただし固定された)値を表しP、およびを表すこともできますT。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。