連続した文字を数える


24

文字のみを含む文字列の場合、単語に含まれる連続したアルファベットの最長実行の長さを出力します。順序は関係ありません。アルゴリズムの例では、単語をソートし、重複を削除してから、最長実行の長さを出力します。

テストケース

watch -> 1
stars -> 3
antidisestablishmentarianism -> 3
backdoor -> 4
a -> 1
tutorials -> 4

たとえばantidisestablishmentarianism、文字が含まれていますabdehilmnstrます。最長の実行はとlmnrst、両方とも長さ3です。

ノート

入力としてすべて小文字、すべて大文字、または大文字と小文字を混在させることができますが、大文字と小文字の区別は単語に関する情報をエンコードできません(つまり、最初のn文字を大文字にすることはできませんn)。

これはであるため、バイト単位の最短回答が優先されます。


@ H.PWiz、私はそれがタイプミスであると推測しているrst- それはする必要があります-単一化、ソート、最長の連続実行を取得します。入力を文字の配列として取得できますか?
シャギー

@Shaggyはい、間違いなく、それがデフォルトだと思ったので、私はそれを含めませんでした
スティーブン

「a」は「z」に隣接していますか?「zebra」のスコアは2または3ですか?
ジョナサンアラン

(...あなたのアルゴリズム例から判断すると、「いいえ」と「2」だと思います)
ジョナサンアラン

@ジョナサンアランあなたは正しいです
スティーブン

回答:


10

ゼリー 10 9 8 7  6 バイト

OṬṣ0ZL

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

9はSokの方法を使用していましたṢQẆẇƇØaṪL

どうやって?

OṬṣ0ZL - Link: list of (single-case) characters  e.g.  codegolf
O      - ordinal (vectorises)           [99,111,100,101,103,111,108,102]
 Ṭ     - untruth (1s at those indices)  [0,0,0,...,1,1,1,1,1,0,0,0,0,1,0,0,1]
       -                                 ^         ^       ^         ^     ^
       -                   i.e. indices: 1        99     103       108   111
   0   - literal zero
  ṣ    - split at                       [[],[],[],...,[1,1,1,1,1],[],[],[],[1],[],[1]]
    Z  - transpose                      [[1,1,1],[1],[1],[1],[1]]
     L - length                         5

7

APL(Dyalog Classic)10 9バイト

H.PWizのおかげで-1バイト

≢⍉↑⊆⍨⎕a∊⍞

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

文字列を入力します

⎕a は大文字の英語のアルファベットです

⎕a∊⍞ ブール値の長さ26ベクトル-文字列に含まれる文字はどれですか?

⊆⍨ 連続する1のベクトルを形成する

≢⍉↑ 行列に混ぜ、転置し、その高さを返す-事実上、1の最長ベクトルの長さを見つける


1
⌈/≢¨->≢⍉↑
H.PWiz

7

R44 43バイト

小文字の配列で機能します。編集:True値のテストから、1バイトのT / Fによる乗算に変更しました。

function(x,r=rle(letters%in%x))max(r$l*r$v)

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

指定された文字に含まれる文字に対してランレングスエンコーディングを行い、trueの最大値を返します。


utf8ToIntを使用して同様のrleソリューションに取り組んでいましたが、文字列の配列を取得する方がはるかにスマートです。+1
JayCe

@JayCeは同じ方法で開始しましたが、その後、文字%in%のチェックが1回でソート、ユニーク、差分のステップを処理することに
気付きました-MickyT

6

Perl 6、41バイト

{max values bag .ords.sort.squish Z-0..*}

試して

拡張:

{  # bare block lambda with implicit param $_

  max       # find the max
    values  # get the values from the following Bag (repeat counts)
      bag   # find the repeats

          .ords.sort.squish # get the unique ordinals (method call on $_)
        Z-                  # zip subtract with
          0 .. *            # Range starting with 0
}

与えられた'stars'.ords.sort.squish Z-0..*返すだろう(97,113,113,113)



6

JavaScript(Node.js)、51バイト

入力文字列の大文字と小文字は区別されません。

s=>(g=_=>s&&1+g(s&=s*2))(Buffer(s).map(c=>s|=1<<c))

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

どうやって?

まず、入力文字列を、検出された文字のビットマスクに変換します:

Buffer(s).map(c => s |= 1 << c)

ビット単位のシフトは、暗黙のモジュロ32で処理されます。

例:

"feedback" --> 100001111110
               kjihgfedcba-

次に、ビットマスク内の連続する1の実行を、すべてのビットがクリアされるまで、それ自体の左シフトされたコピーとANDを繰り返して「削減」します。

0100001111110 AND 1000011111100 --> 0000001111100
0000001111100 AND 0000011111000 --> 0000001111000
0000001111000 AND 0000011110000 --> 0000001110000
0000001110000 AND 0000011100000 --> 0000001100000
0000001100000 AND 0000011000000 --> 0000001000000
0000001000000 AND 0000010000000 --> 0000000000000

アルファベット順で連続する文字の数は、上記のプロセスの反復回数です。したがって、再帰関数:

g = _ => s && 1 + g(s &= s * 2)

5

Pyth、9バイト

le}#G.:S{

入力は小文字の文字列であると想定されます。ここでオンライン試すか、ここですべてのテストケースを一度に確認してください

le}#G.:S{Q   Q=eval(input()), G=lowercase alphabet. Trailing Q inferred.

        {Q   Deduplicate input string
       S     Sort it
     .:      Take all substrings (these are generated in length order)
  }#G        Filter out those that aren't found in the alphabet
le           Find the length of the last remaining element

部分文字列が長さ順に並べられているという事実を使用した素晴らしい方法です!
ジョナサンアラン

あまり効率的ではありませんがy、の代わりに使用できます.:
FryAmTheEggman

5

MATL、10バイト

2Y2imY'*X>

入力は小文字です。

オンラインでお試しください!または、すべてのテストケースを確認します

これは、@ Sundar(古い)と@ngnのアプローチを組み合わせて使用​​します。

説明

'tutorial'例として入力を検討してください。

2Y2   % Push predefind literal 'abcdefghijklmnopqrstuvwxyz'
      % STACK: 'abcdefghijklmnopqrstuvwxyz'
i     % Push input
      % STACK: 'abcdefghijklmnopqrstuvwxyz', 'tutorials'
m     % Ismember: true for letters present in the input
      % STACK: [1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 0 0 0 0 0]
Y'    % Run-length encoding
      % STACK: [1 0 1 0 1 0 1 0 1 0], [1 7 1 2 1 2 1 2 4 5]
*     % Multiply, element-wise
      % STACK: [1 0 1 0 1 0 1 0 4 0]
X>    % Maximum. Implicitly display
      % STACK: 4

5

Python 3、55バイト

f=lambda s:s and-~f({*s}&{chr(ord(c)+1)for c in s})or 0

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


Python 2、58バイト

f=lambda s,c=99,r=0:c and max(r,f(s,c-1,-~r*(chr(c)in s)))

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


Python 2、63バイト

n=t=0
for c in input():n|=2**ord(c)
while n:n&=n/2;t+=1
print t

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


入力としてpython3バイトを使用するのはどうf=lambda s:s and-~f({*s}&{c+1for c in s})or 0ですか?
ビンセント

5

05AB1E、6バイト

Adnanのおかげで1バイト節約されました。連続したサブストリングを取得し、長さ(Œ...é)でソートします代わりに組み込みのpowersetを使用します(æ)。

êæAÃθg

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

また6バイト

再びAdnanのおかげで2バイトを節約しました。ASå代わりêÇ¥Θにを使用しているため、最後に最大値を増やす必要もなくなりました。2つの方法の利点を比較するには、改訂履歴を参照してください。

ASåγOà

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

それらの仕組み

私は、このようなチャレンジが好きで、さまざまなアプローチにつながります。

êæAÃθg | Full program.
ê      | Push a sorted and without duplicates version of the input.
 æ     | Powerser.
  AÃ   | Keep those that also occur in the lowercase alphabet.
    θg | Take the length of the last one. θ and ` can be used interchangeably.
-------+-------------------------------------------------------------------------------
ASåγOà | Full program.
A      | Push the lowercase alphabet.
 S     | Listify it (i.e. convert it to a sequence of characters).
  å    | Replace each char in the alphabet by 1 if its in the input, else by 0.
   γ   | Split into chunks of equal adjacent elements.
    O  | Sum each part.
     à | Extract the maximum of this list. Again, à and Z can be used interchangeably.

最初のプログラムはにゴルフできêæAÃ`g、2番目のプログラムはにゴルフできますASåγOZ
アドナン

@Adnanありがとう、更新されました!ASåトリックが好きです。
Mr Xcoder

4

TSQL(Microsoft SQL Server)、206バイト

WITH C AS (SELECT 1p,SUBSTRING(@,1,1)c UNION ALL SELECT p+1,SUBSTRING(@,p+1,1)FROM C WHERE p<LEN(@)),R AS(SELECT c d,1r FROM C UNION ALL SELECT c,r+1FROM R JOIN c ON ASCII(d)+1=ASCII(c))SELECT MAX(r)FROM R

入力DECLAREには、コードの前に次のステートメントを使用します。

DECLARE @ varchar(200) = 'propinquities';

入力はすべて大文字と小文字が区別されます(大文字でも小文字でも問題ありませんが、大文字と小文字を混在させると機能しません)。

ゴルフをしていない:

DECLARE @data varchar(200) = 'propinquities'

;WITH CTE AS (
    SELECT
        1 as CharacterPosition,
        SUBSTRING(@data,1,1) as Character
    UNION ALL
    SELECT
        CharacterPosition + 1,
        SUBSTRING(@data,CharacterPosition + 1,1)
    FROM
        CTE
    WHERE CharacterPosition < LEN(@data)
), Runs AS
(
    SELECT Character, 1 rc
    FROM CTE
    UNION ALL
    SELECT b.Character, rc + 1
    FROM Runs r
    JOIN CTE b ON ASCII(r.Character) + 1 = ASCII(b.Character)
)
SELECT max(rc)
from runs

説明:

文字列(から適応各文字についてAA行に分割/programming//a/27623321/1474939に)CTE cteの。

次に、RunscteでASCIIコードに変換することにより、連続した文字の連続を検出します。

最後に、最大の実行を選択し、selectステートメントにレポートします。


良い答え、CTEの非常に良い使用法。これがバイトカウントに役立つかどうかはわかりませんが、T-SQLで入力を取得するための「承認済み」メソッドは、事前に作成されたtableを介しています
BradC

@BradC各行を1文字(文字列ではなくchar配列のようなもの)としてテーブルを取得できる場合、1つのCTEを削除するのに役立ちます。それでも1行である必要がある場合は、入力変数として使用するのとほぼ同じです。アイデアをありがとう!
ブライアンJ

4

C(gcc) 58 56バイト

@gastropnerのおかげで2バイト節約

Node.js answerと同じアプローチを使用します。入力文字列の大文字と小文字は区別されません。

m,i;f(char*s){for(i=0;*s?m|=1<<*s++:(i++,m&=m*2););s=i;}

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

コメント済み

m,                   // m = bitmask of encountered letters
i;                   // i = counter of max. consecutive letters
f(char *s) {         // f = function taking the input string s
  for(               // main loop:
    i = 0;           //   start with i = 0 and assume m = 0 on first call
                     //   (it is forced back to 0 when the program terminates)
    *s ?             //   if we haven't reached the end of the string:
      m |= 1 << *s++ //     update m by setting the appropriate bit for this character
                     //     (with implicit modulo 32) and advance the string pointer
    : (              //   else:
        i++,         //     increment i
        m &= m * 2   //     'reduce' runs of consecutive 1's in m by AND'ing it with a
      );             //     left-shifted copy of itself (e.g. 11101 & 111010 -> 11000;
                     //     11000 & 110000 -> 10000); we stop when m = 0
  );                 // end of for()
  s = i; }           // return i

1<<*sラップするのは実装固有ですか、それとも標準の動作ですか?
ジョナサンフレッチ

@JonathanFrechこれは公式には未定義の動作だと思います。そのため、実装固有でなければなりません。
アーナルド

興味深いことに、それは実行時に計算されたときにのみラップするように見えます。コンパイル時に、データ型サイズの警告が表示さ1<<320、発行されます。
ジョナサンフレッチ

実際、コンパイラーが明示的に5ビットのマスクを適用することを疑っています。これは、CPUレベルで行われる可能性があります。
アーナルド

2
@Arnauld です(注:「[...]カウントオペランドは即値またはレジスタCLにできます。カウントは5ビットにマスクされ、カウント範囲は
0〜31に

3

C(gcc)、100バイト

c,o,u;n(t,e,r)char*r,*e,*t;{for(u=0,e=t;c=*t++;u=u<o?o:u)for(o=0,r=e;*r;*r++-c||(c++,r=e,++o));o=u;}

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

説明

c,o,u;n(t,e,r)    // setup, function declaration
char*r,*e,*t;{    // K&R style
 for(u=0,e=t;     // initialize global maximum u to 0, write string start to e
 c=*t++;          // look at every character in the string
 u=u  <o?o:  u)   // funny face
  for(o=0,r=e;*r; // initialize local maximum o to 0, look at entire string again
  *r++-c||(c++,   // equal character found, search for next one
   r=e,++o));     // reset local pointer, increment local maximum
o=u;}             // return maximum character streak

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


「c、o、u; n(t、e、r)」の

3

MATL12 10バイト

91:wX-dX>q

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

説明:

91:-1から91までの数字のリストを作成します。91は文字「[」で、「Z」の後にあります。したがって、これにより、「\ x1」から「[」までのすべての文字のリストが効果的に作成されます。(主に['A'-1:' Z '+ 1]の範囲にあるものが必要ですが、残りを使用しても問題はなく、バイトカウントも少なくて済みます。)

w -暗黙的な入力、スタックの最上部への入力(「チュートリアル」を想定)

X- -差を設定します。これにより、入力文字列で検出されなかった文字のみが元の順序(「安定」)で残ります。スタック:' !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHJKMNPQVWXYZ['

d -そのリスト内の連続する要素の違い。スタック:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 5 1 1 1 1 1]

X> -それらの差の最大値、つまりセットの差から欠落している連続したアルファベットの最大数を取得します。

q -実際の文字数を取得するための減少


古い:

12バイト

Sud1=Y'*X>sQ

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


非常に多くのアプローチ:-)
ルイスメンドー

3

K(ngn / k)17 15バイト

#1_{x^x^x+1}\-:

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

- 文字を数字に変換するためだけにあります(それらが負であるかどうかは関係ありません)

{ }\ 収束するまで関数を適用し、中間結果を保存します

x+1 の各数値に1を加算します x

^ 「なし」-右側のリストに出現する要素のない左側のリスト

x^x^x+1 手段 x交差するx+1

1_ 最初の要素をドロップします

# カウント


#1_{x^x^x+1}\-
アダム

@Adámええ、いつか電車を
動かす

これを収束が非常にうまくなるまで増分との交差点として概念化
ジョナ

電車は動作します
ngn

2

Retina 0.8.2、54バイト

O`.
D`.
.
$&$&¶
T`l`_l`¶.
(.)¶\1
$1
.(.+)
$.1
O#^`
1G`

オンラインでお試しください!リンクにはテストケースが含まれます。説明:

O`.

文字を順番に並べ替えます。

D`.

文字を重複排除します。

.
$&$&¶

各文字を別々の行に複製します。

T`l`_l`¶.

各ペアの最初をデクリメントします。

(.)¶\1
$1

これが前の文字と一致するようになったら、それらを再び結合します。

.(.+)
$.1

すべての実行の長さを数えます。

O#^`

逆の番号順に並べ替えます。

1G`

最初の(最大)を取ります。


2

J、16バイト

FrownyFrogのおかげで-7バイト

[:>./a.#;._1@e.]

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

説明

[: >./ a. #;._1@e. ]    
       a. (    )e. ]    is the ascii alphabet an element of the input:
                        this will transform the alphabet into a 1-0 array,
                        the ones representing the letters in the input
          #;._1@        split that 1-0 list up into pieces, using 0
                        as the delimiter, and transforming each chunk
                        into its length. now we have a list of ints
[: >./                  take the max 

アルファベットの]代わりに使用できると思う~.@/:~ので、アルファベットは既にソートされているため、入力をソートして固有のアイテムのみを保持する必要はありません。TIO-18バイト
ガレンイワノフ


@FrownyFrogとGalen、ありがとうございます!振り返ってみると、最初にそのuniq / sortを必要としなかったことは明らかだったはずです。
ジョナ

2

C(gcc)98 92バイト

提案をしてくれたJonathan Frechに感謝します。

大文字のみ。

f(char*s){int a[99]={0},i,j,k=j=i=0;for(;*s;a[*s++]++);for(;i<99;j=!!a[i++]*++j,k=j>k?j:k);}

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


k;最後に実際には必要ありません。暗黙的なgccの戻りは、変数の割り当ての副作用であり、forループの最後のステップとして実行されるようです。
ジョナサンフレッチ


@JonathanFrech gccの暗黙のリターンを信用していません。それらは私が期待するように常に起こるとは限らず、ポインターや浮動小数点に対してはまったく機能しないことがよくあります。幸いなことに、コードゴルフ以外では、私はそれらを使用しません!:-)
ErikF

2

ジャプト -h、9バイト

大文字と小文字を区別せず、文字列または文字の配列として入力を受け取ります。

;CôkU mÊn

試してみるか複数のテストを実行します(2行目-hはフラグの代わりに使用されるため、代わりにフラグを使用して複数の入力を処理できます)


説明

              :Implicit input of string/array U
;C            :The lowercase alphabet
  ô           :Partition at characters returning truthy
   kU         :  Remove all characters in U from the current letter
              :  This will return a non-empty string (truthy) if the current letter ISN'T in U
     m        :Map
      Ê       :  Length
       n      :Sort
              :Implicitly output the last element in the array

@Downvoter、理由を教えて-1ください。
シャギー


2

C(gcc)66 65 63バイト

入力には小文字のみが含まれると想定します。最初に、文字列をループし、どの文字が見えるかに応じてビットを整数に設定します。次に、整数の1ビットの最長ストリークをカウントします。

編集:aグローバルなので、最初の呼び出しで0に初期化されます。2番目のループでは、戻る前に必ず0にリセットされます。したがって、手動でリセットすることを回避できます。

a,l;f(char*s){for(l=0;*s;)a|=1<<*s++-97;for(;a;l++)a&=a*2;s=l;}

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


2

Perl 5、62 + 2(-nFフラグ)= 64バイト

$c[ord lc$_]=1for@F;$y[y///c]++for"@c "=~/((1 )+)/g}{say@y/2|0

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

Perl 5、68バイト

<>=~s/./$c[ord lc$&]=1/gre;$y[y///c]++for"@c "=~/((1 )+)/g;say@y/2|0

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


1
素敵なアプローチ!私はその方法をまったく考えていませんでした...を使用-pF-MList::Util+(max)て数バイトを節約でき、56に到達することができます:オンラインで試してみてください!
ドムヘイスティングス

@DomHastings -MList::Util=maxは、結果スコアに16バイトを追加します。
デニスイバエフ

新しいスコアリングを正しく理解していれば、コマンドラインフラグはバイトとしてカウントされませんが、別個にスコアリングされた言語としてカウントされるため、Perlだけでなく、Perl with -MList::Util+(max) -pF、または同様のものになります。codegolf.meta.stackexchange.com/a/14339/9365
Dom Hastings

2

SQLite 265

WITH w AS(SELECT'a'w),n AS(SELECT 1 n UNION ALL SELECT n+1 FROM n LIMIT(SELECT length(w)FROM w)),l AS(SELECT substr(w,n,1)l FROM n,w)SELECT max(v)FROM(SELECT min(n)v FROM(SELECT*FROM l,n EXCEPT SELECT l.l,unicode(l.l)-unicode(b.l)d FROM l,l b WHERE d>0)GROUP BY l);

ゴルフをしていない:

WITH w AS (SELECT 'antidisestablishmentarianism' w)
   , n AS (SELECT 1 n
           UNION ALL
           SELECT n+1 FROM n
           LIMIT (SELECT length(w) FROM w) )
   , l AS (SELECT DISTINCT substr(w,n,1) l FROM n,w ORDER BY l)
   , d AS (
           SELECT l,n FROM l,n
           EXCEPT
           SELECT a.l l, unicode(a.l) - unicode(b.l) d 
           FROM l a, l b 
           WHERE d > 0 
           )

SELECT max(v) FROM ( SELECT min(d.n) v FROM d GROUP BY d.l );

2

Brachylog14 13 12バイト

{⊇pS∧ẠsSl}ᶠ⌉

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

{        }ᶠ    % Find all values that satisfy this predicate
           ⌉   % And get their maximum
               % The predicate being:
 ⊇pS           % There exists a permutation of a subset of the input
               %  Call it S
    ∧          % And, 
      sS       % S is a substring of
     Ạ         %  the set of alphabets, Ạ, 
        l      % Then, the length of that substring is the return value of the 
               %  predicate

TIOでの入力「反体制主義」のために終わらないほど遅い。+1バイトの場合は比較的高速です:

13バイト

{dosS∧ẠsSl}ᶠ⌉

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

使用dosの代わり⊇p:Sは、dS eduplicated oRTED s代わりに、いくつかのサブセットのちょうどいくつかの並べ替えのため、入力のubstring。


1

Haskell、87バイト

import Data.List
maximum.map length.filter(`isInfixOf`['a'..'z']).subsequences.nub.sort

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

小文字が必要です

説明:

maximum.map length.filter(`isInfixOf`['a'..'z']).subsequences.nub.sort
                                                                  sort {- sort the characters -}
                                                              nub      {- remove duplicates -}
                                                 subsequences          {- all subsequences -}
                   filter(`isInfixOf`['a'..'z'])                       {- all characters are adjacent -}
        map length                                                     {- length of filtered subsequences -}
maximum                                                                {- maxmimum length -}


1

Pyth-11バイト

le@.:G).:S{

入力は引用符で囲む必要があります。許可されない場合:

Pyth-12バイト

le@.:G).:S{z

説明:

l(
  e(
    @(
      .:(G),
      .:(
         S(
           {(Q)
         )
      )
    )
  )
)
length(
    last element(
        intersection(
            all positive length substrings(the alphabet as string),
            all positive length substrings(
                sorted(
                    uniquified(input)
                )
            )
        )
    )
)


1

Java 8, 77 bytes

int i,j,m;
c->{for(i=j=0;(m=j<c.length?m|1<<c[j++]:m&m*2+0*++i)>0;);return i;}

Port of Arnauld's C answer. Try it online here.

Ungolfed:

int i, j, m; // instance variables of the surrounding class - initialised to 0
c -> { // lambda - c is of type char[]; return type is int
    for(i = j = 0; // i is the length of the longest run, j is used to step through c - both start at 0
        (m = j < c.length // work with the bitmask of all the letters present in c: if we have not reached the end of c ...
             ? m | 1 << c[j++] // ... set the bit corresponding to the current character, advance one character ...
             : m & m * 2 + 0 * ++i) > 0 ;) ; // ... else reduce runs of consecutively set bits in m by AND-combining it with a left-shifted copy of itself until m hits 0
    return i; // return the result - by now m is back to 0
}

1

><>, 63 bytes

Reads lowercase characters from stdin, outputs a number to stdout.

0l55*)?\
8/?(0:i<]r1~r[-*c
~/00
}</?)@:{:*+1/?(3l
  \~:03. ;n~/

Try it online!

0l55*)?\             Push 26 zeroes onto the stack

Record which characters are used
      i              Read a character from the input
 /?(0:               Check if it is -1, marking the end of the input
8             -*c    Subtract 96 from the character code, 
                         giving 1 for 'a', 2 for 'b' etc.
            r[       Pop that many values on to a new stack and reverse 
                         it, putting that character's value at the top of 
                         the stack
          1~         Write 1 to that value
        ]r           Return the stack back to it's normal state

Count the longest run of ones in the stack
  00                 Push values for currentRun = 0, and bestRun = 0
}                    Move bestRun to the bottom of the stack
            /?(3l    Check if there are only 2 values left on the stack
          +1         Increment currentRun
         *           Multiply currentRun by the next value in the stack, 
                         resetting it to 0 if the run is broken
  /?)@:{:            Check if currentRun > bestRun
  \~:                Overwrite bestRun if so
     03.             Jump back to the start of loop
         ;n~/        Once all values have been consumed, 
                         print bestRun and exit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.