W x H桁のグリッドで最大のN桁の数字を見つける


25

正の整数Nと、幅Wと高さH(これも正の整数)の10進数のグリッド(0〜9)を取り込むプログラムまたは関数を作成します。Nは、WとHの大きい方以下になると想定できます。

グリッドに水平または垂直に表示され、通常の読み取り順または逆順で書き込まれた最大の連続したN桁の数字を印刷または返します。

  • 数字の対角線は考慮されません。
  • グリッドはラップアラウンドしません。つまり、周期的な境界条件はありません。

たとえば、3×3グリッド

928
313
049

なければならない9N = 1のための出力として94N = 2のための出力として、および940N = 3に対する出力として。

4×3グリッド

7423
1531
6810

8N = 1、86N = 2、854N = 3、7423N = 4の場合、出力は次のようになります。

3×3グリッド

000
010
000

1N = 1、10N = 2、N = 3の出力010があります(N = 3の場合も有効です)。

1×1グリッド

0

0N = 1の出力があります。

便利で合理的な形式で入力を取得できます。たとえば、グリッドは、改行で区切られた数字列、多次元配列、または数字リストのリストなどです。それらがグリッドの一部である場合、出力に先行ゼロを使用できます。

これはであるため、バイト単位の最短コードが勝ちますが、アルゴリズムが計算上効率的であることを示すことができる回答に対してブラウニーポイント(つまり、より有望な投票)も授与します。


1
先行ゼロを印刷することはできますか?
-PurkkaKoodari

@ Pietu1998「先行ゼロは、グリッドの一部である場合、出力で許可されます。」
カルビンの趣味

回答:



9

CJam、39 36 35 34バイト

qN/)i\[{zW%_}4*]ff{_,@e<ew:i}e_:e>

すぐに、@ Dennisが起きる前に:P

オンラインでお試しください

説明

基本的なアルゴリズムは、グリッドの4つの回転すべてを取得しN、各行を長さのチャンク(または行の長さのいずれか小さい方)に分割することです。次に、チャンクをintに変換し、最大のものを取得します。

qN/             Split input by newlines, giving an array of lines
)i\             Drop N from the array and put at bottom
[        ]      Wrap in array...
 {    }4*         Perform 4 times...
  zW%_              Rotate grid anticlockwise and push a copy
                Note that this gives an array of 5 grids [CCW1 CCW2 CCW3 CCW4 CCW4]
ff{         }   For each grid row, mapping with N as an extra parameter...
   _,             Push length of row
     @e<          Take min with N
        ew        Split into chunks
          :i      Convert to ints
e_              Flatten that array
:e>             Take cumulative max

好奇心から、few何か特別なことをしますか、それとも3つの別々のコマンドですか?
ETHproductions

3
@ETHproductions実際には、「または追加のパラメーターを使用したマップ」ewを使用して適用される演算子fです。たとえば、["abcd" "efgh"] 2 few結果はになり[["ab" "bc" "cd"] ["ef" "fg" "gh"]]ます。
Sp3000

しかし、それは興味深い偶然です。
ETHproductions

唯一の問題は、@ Dennisが目覚めると、他のすべての人がとにかく負けてしまうことです。;)
kirbyfan64sos

-2

バーレスク

最終的な回答ではありませんが、おそらく次のように機能します。

blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{3.+ti}m[>]
854
blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{4.+ti}m[>]
7423

Nとグリッドは正確にどのように与えられますか?


通常、回答が機能するまで回答の投稿を待つ必要があります。OPに関する質問は、投稿に対するコメントとして提供する必要があります。
アレックスA.

コードは実際に動作します。
mroman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.