同一の要素間の最大実行


24

これは、ar kangによって削除されたこの質問のオーバーホールです。その質問のOPがこの質問を取り戻したい場合、またはこれを投稿することで問題がある場合は、喜んで対応します

入力として整数のリストを指定すると、同じ値で開始および終了する連続サブリストの最大可能合計を見つけます。サブリストの長さは少なくとも2でなければなりません。たとえば、リストの場合

[1, 2, -2, 4, 1, 4]

同じ値で開始および終了する2つの異なる連続サブリストがあります

[1,2,-2,4,1] -> 6
[4,1,4]      -> 9

大きい方の合計は9なので、9を出力します。

すべての入力に少なくとも1つの重複が含まれると想定できます。

これはため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。

テストケース

[1,2,-2,4,1,4]  -> 9
[1,2,1,2]       -> 5
[-1,-2,-1,-2]   -> -4
[1,1,1,8,-1,8]  -> 15
[1,1,1,-1,6,-1] -> 4
[2,8,2,-3,2]    -> 12
[1,1,80]        -> 2
[2,8,2,3,2]     -> 17

すべきである[2,8,2,3,2]12または17なりますか?私は17を
仮定します。-ニコニール

@NikoNyrhそれは17でなければなりません
小麦ウィザード

CC BY / SAのHooray。あなたは、コミュニティメンバーによって後でlaterされたとしても、別の質問の派生的な質問を投稿する権利があります。このブログ投稿から得たように、OPのページへのリンクを追加する必要があるようです。「3.すべての質問と回答の著者名を表示[...] 4.各著者名をソースサイトのユーザープロファイルページに直接ハイパーリンクします」 -削除された質問を表示する権限がないため、誰がオリジナルを作ったのかわかりません。
マインドウィン

@Mindwinありがとう、OPのページへのリンクを追加しました。OPが投稿を削除した場合、質問へのリンクを避けたいと考えたため、私はもともとそれを省きました。
小麦ウィザード

削除の理由は無関係であり、一般ユーザー(私)には透過的ではありません。しかし、帰属はオプトアウトのようなものです。ライセンスを提出して同意することで、彼らはそれらの条件の下でそれらの権利を私たちに与えました。それ以外はすべて例外です。GJ。
マインドウィン

回答:


9

Haskell、62バイト

f 整数のリストを取り、整数を返します。

f l=maximum[x+sum m-sum n|x:m<-t l,y:n<-t m,x==y]
t=scanr(:)[]

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

使い方

  • t標準の「インポートせずにリストのすべてのサフィックスを取得するData.List.tails」機能です。
  • f l、引数リストのすべての非空のサフィックスを介してリスト内包反復l最初の要素と、x残部m
  • それぞれについて、のすべての空でない接尾辞に対して同じことを行い、m最初の要素yと残りを選択しnます。
  • 場合xy同じである、リストの内包は、それらの間の要素の和を含んでいます。このサブリストは、x:m接尾辞をn削除したものと同じであるため、合計はとして計算できますx+sum m-sum n

8

JavaScript(ES6)、68 62バイト

a=>a.map(m=(x,i)=>a.map((y,j)=>m=j<=i||(x+=y)<m|y-a[i]?m:x))|m

テストケース

コメント済み

a =>                    // a = input array
  a.map(m =             // initialize m to a function (gives NaN in arithmetic operations)
    (x, i) =>           // for each entry x at position i in a:
    a.map((y, j) =>     //   for each entry y at position j in a:
      m =               //     update m:
        j <= i ||       //       if j is not after i
        (x += y) < m |  //       or the sum x, once updated, is less than m
        y - a[i] ?      //       or the current entry is not equal to the reference entry:
          m             //         let m unchanged
        :               //       else:
          x             //         update m to the current sum
    )                   //   end of inner map()
  ) | m                 // end of outer map(); return m

私は少しの順序で混乱していたy - a[i]し、(x += y) < mそれがより簡単なゴルフのように見えることから、コードがそれらを交換して少し明確になりIMHO - (x += y) < m || y != a[i]
ニール

@ニールはあなたの主張を見るが、同様に(x+=y)<m|y-a[i]誤解される可能性がある(x+=y)<(m|y-a[i])。あいまいさを本当に取り除くことができるかどうかはわかりません。(とにかくこのバージョンを好む傾向があるので編集。)
アーナルド

まあ、それは彼らが... と誤解y-a[i]|(x+=y)<mしないことを前提としてい(y-a[i]|(x+=y))<mます
ニール

5

ゼリー、12バイト

ĠŒc€Ẏr/€ịḅ1Ṁ

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

使い方

ĠŒc€Ẏr/€ịḅ1Ṁ  Main link. Argument: A (array)

Ġ             Group the indices of A by their corresponding values.
 Œc€          Take all 2-combinations of grouped indices.
    Ẏ         Dumps all pairs into a single array.
     r/€      Reduce each pair by range, mapping [i, j] to [i, ..., j].
        ị     Index into A.
         ḅ1   Convert each resulting vector from base 1 to integer, effectively
              summing its coordinates.
           Ṁ  Take the maximum.

5

、10バイト

▲mΣfΓ~€;ṫQ

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

説明

▲mΣfΓ~€;ṫQ  Input is a list, say x=[1,2,-2,4,1,4]
         Q  Slices: [[1],[2],[1,2],..,[1,2,-2,4,1,4]]
   f        Keep those that satisfy this:
    Γ        Deconstruct into head and tail, for example h=2 and t=[-2,4,1]
        ;    Wrap h: [2]
      ~€     Is it an element of
         ṫ   Tails of t: [[-2,4,1],[4,1],[1]]
            Result: [[1,2,-2,4,1],[4,1,4]]
 mΣ         Map sum: [6,9]
▲           Maximum: 9


3

R108の 103 90 88 83バイト

function(l)max(combn(seq(l),2,function(x)"if"(rev(p<-l[x[1]:x[2]])-p,-Inf,sum(p))))

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

combn再びストライキ!少なくとも長さのすべてのサブリストを生成し、最初と最後が等しくない場合に2サブリストの合計を設定し、-Infすべての合計の最大値を取ります。

"if"警告の束を上げるが、彼らが安全に無視されます-おそらく、ここで最高のゴルフのトリックだと、rev(p)-p最初の要素のIFFではゼロであるp[1]==tail(p,1)、と"if"警告してその状態の最初の要素を使用しています。




2

ゼリー13、12のバイト

=ṚṖḢ
ẆÇÐfS€Ṁ

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

現在私と競っているXcoder氏によって1バイトが保存されました。:D

説明:

        # Helper link:
=Ṛ      # Compare each element of the list to the element on the opposite side (comparing the first and last)
  Ṗ     # Pop the last element of the resulting list (so that single elements return falsy)
   Ḣ    # Return the first element of this list (1 if the first and last are equal, 0 otherwise)

        # Main link:
Ẇ       # Return every sublist
 Ç      # Where the helper link
  Ðf    # Returns true (1)
    S€  # Sum each resulting list
      Ṁ # Return the max


1

Pyth、15バイト

eSsMf&qhTeTtT.:

オンラインで試す

説明

eSsMf&qhTeTtT.:
             .:Q  Take all sublists of the (implicit) input.
    f qhTeT       Take the ones that start and end with the same number...
     &     tT     ... and have length at least 2.
  sM              Take the sum of each.
eS                Get the largest.



1

Python 2、86バイト

デニスのアウトゴルフ

lambda x:max(sum(x[i:j+1])for i,v in enumerate(x)for j in range(i+1,len(x))if v==x[j])

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

最初の要素が最後の要素と等しい、長さ2より大きいすべてのサブリストを生成し、それぞれをその合計にマッピングして、最大値を選択します。


88バイトラムダ関数を使用して
Halvardフンメル

@HalvardHummel を使用して86バイトenumerate
ジョナサンフレッチ

デニスのアウトゴルフ –正直なところ、何を期待していましたか?
Mr Xcoder

@ Mr.Xcoder私は彼の解決策を持っているはずだったが、私は眠りについた:(
FlipTack



1

ゼリー、11バイト

チャレンジをポストデートするいくつかの機能を使用します。

Ẇµ.ịEȧḊµƇ§Ṁ

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

使い方?

Ẇµ.ịEȧḊµƇ§Ṁ || 完全なプログラム。CLAから入力を受け取り、STDOUTに出力します。
Ẇ|| サブリスト。
 µ µƇ || フィルターキープ
    ȧḊ|| ...長さが少なくとも2で、...
 .ị|| ... floor(0.5)およびceil(0.5)の要素(モジュラー、1インデックス)...
    E || ... 等しいです。
         §|| それぞれを合計します。
          Ṁ|| 最大。

-1 ケアードの助けを借りて


0

バッチ、179バイト

@set s=%*
@set/a"m=-1<<30
:l
@set/at=n=%s: =,%
@set s=%s:* =%
@for %%e in (%s%)do @set/at+=%%e&if %%e==%n% set/a"m+=(m-t)*(m-t>>31)
@if not "%s%"=="%s: =%" goto l
@echo %m%

入力をコマンドラインパラメーターとして受け取ります。



0

Clojure、92バイト

#(apply max(for[i(range(count %))j(range i):when(=(% i)(% j))](apply +(subvec % j(inc i)))))

0

Java 8、129バイス

a->a.stream().map(b->a.subList(a.indexOf(b),a.lastIndexOf(b)+1).stream().mapToLong(Long::intValue).sum()).reduce(Long::max).get()

Xリスト内の各整数について、関数はstartとendを持つ最大のサブリストの合計を見つけXます。次に、OPが指定する最大合計を見つけます。


私はそれをテストしていませんが、[2,8,2,-3,2]テストケースで失敗する可能性があるように見え[1,1,80]ます。
Ørjanヨハンセン

0

Perl、 61 59バイト

含み+3のために-p

max_ident_run.pl

#!/usr/bin/perl -p
s:\S+:$%=$&;($%+=$_)<($\//$%)||$_-$&or$\=$%for<$' >:eg}{

として実行:

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