Mathematicaの120 130
編集する
このバージョンは、さまざまなサイズの配列で動作します。
l = List;
g = Grid@Cases[Outer[l, Sequence @@ MapIndexed[l, #, {2}], 1]~Flatten~(Length[#] - 1),
x_ /; LessEqual @@ x[[All, 1]] == True :> x[[All, 2, 2]] - 1] &
使用法
g@{{10, 20, 30}, {1, 22, 3}}
g@{{1, 5, 7, 10}, {2, 6, 6, 8, 12}, {4, 5, 9}}
g@{{10, 20, 30}, {1, 2, 3}}
g@{{1, -2, 3}, {-12, -7, 8, 9, 6}, {3, 99, 9}, {100, 10, -23}, {90, 10}}

説明
上記の最初の例を使用して、
a = {{10, 20, 30}, {1, 22, 3}}
MapIndexedすべての要素のインデックスを設定します。注意:Mathematicaは1から数え始めます(後でそれを考慮します)。
MapIndexed[l, a, {2}]
{{{10、{1、1}}、{20、{1、2}}、{30、{1、3}}}、{{1、{2、1}}、{22、{2、 2}}、{3、{2、3}}}}
Outerすべてのリストを生成し、それぞれの候補をサンドイッチ配列として、それらの要素のインデックスを作成します。%以前の出力の結果が含まれています。番号、10および22出力後に強調表示した{10,22}ものは、まだ識別されていないサンドイッチ配列を参照しています。
Outer[l, Sequence @@ %, 1]~Flatten~(Length[a] - 1)
{{{10、{1、1}}、{1、{2、1}}}、{{ 10、{1、1}}、{ 22、{2、2}}}、{{10、{ 1、1}}、{3、{2、3}}}、{{20、{1、2}}、{1、{2、1}}}、{{20、{1、2}}、 {22、{2、2}}}、{{20、{1、2}}、{3、{2、3}}}、{{30、{1、3}}、{1、{2、 1}}}、{{30、{1、3}}、{22、{2、2}}}、{{30、{1、3}}、{3、{2、3}}}}
Cases上記の各要素をテストして、LessEqual(以下)関係が成立するかどうかを判断します。以下に示す結果は、アレイサンドイッチが検出された例です。もう一度、{10,22}出力で強調表示しました。
Cases[%, x_ /; LessEqual @@ x[[All, 1]] == True]
{{{ 10、{1、1}}、{ 22、{2、2}}}、{{20、{1、2}}、{22、{2、2}}}}
%%最後から2番目の結果を指します。:>、[RuleDelayed]は、対象のインスタンスの部分、つまり配列サンドイッチのインデックスを返します。 -1Mathematicaが0ではなく1で配列を開始するという事実を修正します
Cases[%%,
バツ_ /; LessEqual @@ x [[All、1]] == True:> x [[All、2、2]]-1]
{{0、1}、{1、1}}
Grid結果をグリッドに表示します。最初の行0 1は、最初のサブリスト(つまり10)の要素0 と2番目のサブリスト(つまり22)の要素1が、見つかった最初のサンドイッチ配列を構成することを意味します。
Grid@%
0 1
1 1