2つのリストの未分類のメジャー化


13

定義

ベクターを含有するn個の要素があると言われている majorize又は 支配 AベクトルBN個の すべての値のIFF要素は、k個のように1つの≤ KNの最初の要素の和介してK番目の要素大きいとよりや介して第1の和に等しいk個の要素番目 B vはベクトルを表し、Vは、降順にソート。

あれは、

                          a_1 >= b_1
                    a_1 + a_2 >= b_1 + b_2
              a_1 + a_2 + a_3 >= b_1 + b_2 + b_3
                              ...
      a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1
a_1 + a_2 + ... + a_n-1 + a_n >= b_1 + b_2 + ... + b_n-1 + b_n

ここabは降順でソートされます。

この課題のために、メジャー化のわずかな一般化を使用します:abをソートせずに上記の不等式がすべて真である場合、リストは別の未ソートのメジャー化であると言います。(もちろん、これは数学的には役に立たないが、挑戦をより面白くする。)

チャレンジ

二つの別個のリストの入力所与及びB、255(両端を含む)までの範囲0の整数の両方の長さのリストN ≥1を、出力は、第1のリストかどうかを第(未選別-majorizes > B)、unsorted-秒最初の(b > a)をメジャー化するか、どちらでもありません。

必要に応じて、2つのリストの長さを入力として提供する必要があります。出力は常に三つの異なる値のいずれかでなければなりませんが、自分たちはあなたが好きかもしれ値は(値が表すかを指定してください > BBを > 、そしてどちらもあなたの答えで)。

a > bのテストケース:

[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]

以下のためのテストケースB > :

[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]

メジャー化なしのテストケース:

[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]

入力として2列の配列を使用できますか?
ルイスメンドー

1
@LuisMendoはい、入力は追加の情報をエンコードしない任意の形式にすることができます。
ドアノブ

ペアの配列は受け入れられますか?
デニス

回答:


6

ゼリー10 8 6 バイト

@orlpのおかげで2バイト。

@Dennisのおかげで2バイト。

_+\ṠQS

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

1for a>b-1for a<b0専有化なし。

_+\ṠQS

_       Difference (vectorized)
 +\     Cumulative sum.
   Ṡ    Sign of every difference
    Q   Deduplicate
     S  Sum

両方あった場合1-1存在する(一部の累積和が、大きいいくつか小さい)、最後のステップは、生成するであろう0


3

ngn / apl、11バイト

{+/∪×+\⍺-⍵}

@Leaky Nun's answerのメソッドに基づきます

2つのリストABが与えられた場合、各値の要素ごとの差を見つけるか、C = A-Bとします。次に、Cの累積和を見つけ、それぞれの符号を取ります。一意の符号値の合計が結果になります。場合A > Bの場合、結果は、1であり、A < Bの結果が-1であり、いかなる大部分が存在しない場合、結果は0です。

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


3

ジュリア、30バイト

a^b=sum(sign(cumsum(a-b))∪0)

@Dennisのおかげで4バイト節約されました!


ジュリアのどのバージョンでこれをテストしましたか?
デニス

おっと:PIはこれでうまくいくと思う。
ママファンロール

1
確かに。a^b=sum(sign(cumsum(a-b))∪0)数バイト節約します。
デニス


2

チェダー118 114バイト

n->[n.map(i->i[0]-i[1]).map((j,k,l)->l.slice(0,k+1).sum).map(i->i>0?1:i<0?-1:0)].map(j->j has 1?j has-1?0:1:-1)[0]

基本的に私のゼリー答えのポートです。

関数内のスコープが壊れており、関数内の変数を定義できないという事実は、の[xxx].map(i->yyy)[0]代わりに行う必要があることを意味しvar a=xxx;yyyます。

入力として転置された配列を取ります。

n->[n
.map(i->i[0]-i[1])                     Difference (vectorized)
.map((j,k,l)->l.slice(0,k+1).sum)      Cumulative sum.
.map(i->i>0?1:i<0?-1:0)]               Sign of every difference
.map(j->j has 1?j has-1?0:1:-1)[0]     Deduplicate and Sum

1

Python 2、73バイト

a,=b,=r={0}
for x,y in zip(*input()):a+=x;b+=y;r|={cmp(a,b)}
print sum(r)

Ideoneでテストします。



1

Python 2、59バイト

t=r=0
for x,y in zip(*input()):t+=x-y;r|=cmp(t,0)%3
print r

出力:

  • 1 にとって a>b
  • 2 にとって b>a
  • 3 どちらにも

リストを反復処理して、t差の現在の合計を追跡します。数値sは、2ビットの数値として見られる兆候を追跡しrます。右ビットに正、左ビットに負です。これはcmp(t,0)%3

  • t>0 →→ +11
  • t==0→→ 0 0
  • t<0 →→ -12

服用orこれとの電流値のr更新との2ビットをorゼロ値に影響を与えないと、。


0

Javascript(外部ライブラリ列挙可能を使用)(123バイト)

(a,b)=>(z=(c,d)=>_.Range(1,c.length).All(x=>_.From(c).Take(x).Sum()>=_.From(d).Take(x).Sum()))(a,b)==z(b,a)?0:(z(a,b)?1:-1)

libへのリンク:https : //github.com/mvegh1/Enumerable

コードの説明:ベクトルaおよびbを渡し、グローバル関数zを作成します。zは、a.lengthのカウントに対して、1から整数の配列を作成することから始めます。.Allは、aに属するすべてのメンバーについて述語が真であることを検証します。その述語は、aを列挙可能としてロードし、作成したその範囲の現在の反復値に相当するその列挙可能数をカウントし、それを合計することを示しています。それが配列「b」の同じロジックかどうかを確認します。したがって、zを(a、b)の順序で呼び出し、それを(b、a)の順序と比較します。等しい場合は、メジャーがないことを示すために0を返します。それ以外の場合、(a、b)が真であれば1を返し、そうでなければ-1を返します

ここに画像の説明を入力してください

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