연속 문자 수 1 tutorials ->

문자 만 포함하는 문자열이 주어지면 순서에 관계없이 단어에 포함 된 연속 알파벳 문자의 가장 긴 실행 길이를 출력하십시오. 예제 알고리즘은 단어를 정렬하고 중복을 제거한 다음 가장 긴 실행 길이를 출력 할 수 있습니다.

테스트 사례

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

예를 들어, antidisestablishmentarianism글자가 포함되어 있습니다 abdehilmnstr. 가장 긴 실행은 lmn하고 rst, 모두 길이 3의.

노트

모든 소문자, 모든 대문자 또는 대소 문자를 입력으로 사용할 수 있지만 대소 문자는 단어에 대한 정보를 인코딩 할 수 없습니다 (즉, 첫 번째 n문자 n는 가장 긴 실행 길이 인 대문자를 만들 수 없습니다 ).

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.



답변

젤리 ,  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


답변

R , 44 43 바이트

소문자 배열에서 작동합니다. 편집 : True 값 테스트에서 바이트에 대한 T / F 곱으로 변경했습니다.

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

온라인으로 사용해보십시오!

제공된 문자에있는 문자에 대해 실행 길이 인코딩을 수행 한 후 true의 최대 값을 리턴합니다.


답변

APL (Dyalog Classic) , 10 9 바이트

H.PWiz 덕분에 -1 바이트

≢⍉↑⊆⍨⎕a∊⍞

온라인으로 사용해보십시오!

문자열을 입력

⎕a 대문자 영어 알파벳입니다

⎕a∊⍞ 부울 길이-26 벡터-문자열에서 어떤 문자가 발생합니까?

⊆⍨ 연속 1의 형태 벡터

≢⍉↑ 행렬로 혼합하고, 조옮김하고, 높이를 반환합니다. 효과적으로 1의 가장 긴 벡터의 길이를 찾습니다


답변

펄 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)


답변

하스켈 , 35 바이트

f[]=0
f s=1+f[c|c<-s,elem(succ c)s]

온라인으로 사용해보십시오!

하스켈 , 50 바이트

f s=maximum$scanl(\x c->sum[x+1|elem c s])0['a'..]

온라인으로 사용해보십시오!


답변

자바 스크립트 (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-

그런 다음 모든 비트가 지워질 때까지 왼쪽으로 이동 된 복사본으로 반복하여 AND에 ‘비트 마스크에서 연속 1’런을 ‘감소’합니다.

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)


답변

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