Policz kolejne znaki


24

Biorąc pod uwagę ciąg znaków zawierający tylko litery, wypisz długość najdłuższego ciągu kolejnych liter alfabetu, które zawiera słowo, w przypadku gdy kolejność nie ma znaczenia. Przykładowy algorytm może sortować słowo, usuwać duplikaty, a następnie wyświetlać długość najdłuższego przebiegu.

Przypadki testowe

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

Na przykład antidisestablishmentarianismzawiera literyabdehilmnstr . Najdłuższe przebiegi to lmni rstoba o długości 3.

Notatki

Jako dane wejściowe możesz wziąć wszystkie małe, wszystkie wielkie lub małe litery, ale wielkość liter nie może zakodować informacji o tym słowie (tzn. Nie możesz wpisać nwielkich liter, gdyn jest długość najdłuższego ciągu).

To jest , więc wygrywa najkrótsza odpowiedź w bajtach.


@ H.PWiz, myślę, że to literówka i tak powinno być rst- ujednolicaj, sortuj i uzyskaj najdłuższy z rzędu ciąg. Czy możemy przyjmować dane wejściowe jako tablicę znaków?
— Kudłaty

@ Shaggy tak, zdecydowanie nie uwzględniłem go, ponieważ myślałem, że to domyślny
— Stephen

Czy „a” sąsiaduje z „z” - czy „zebra” powinna otrzymać 2 lub 3?
— Jonathan Allan,

(... sądząc po twoim przykładowym algorytmie, wydaje mi się, że „nie” i „2”)
— Jonathan Allan

@JonathanAllan masz rację
— Stephen

Odpowiedzi:


10

Galaretka ,  10 9 8 7  6 bajtów

OṬṣ0ZL

Wypróbuj online!

9 używał metody Sok :ṢQẆẇƇØaṪL

W jaki sposób?

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

8

R , 44 43 bajtów

Działa na szeregu małych liter. Edycja: zmieniono z testowania wartości True na pomnożenie przez T / F bajtu.

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

Wypróbuj online!

Wykonuje kodowanie długości przebiegu dla liter, które są w dostarczonych znakach, a następnie zwraca maksymalną wartość dla prawd.


Pracowałem nad podobnym rozwiązaniem rle przy użyciu utf8ToInt, ale pobranie tablicy ciągów jest znacznie mądrzejsze. +1
— JayCe

@JayCe Zacząłem w ten sam sposób, ale potem zdałem sobie sprawę, że litery% w% check zajęły się sortowaniem, unikalnymi i różnicowymi krokami za jednym zamachem
— MickyT

7

APL (Dyalog Classic) , 10 9 bajtów

-1 bajt dzięki H.PWiz

≢⍉↑⊆⍨⎕a∊⍞

Wypróbuj online!

⍞ wprowadza ciąg

⎕a jest wielką literą alfabetu angielskiego

⎕a∊⍞ wektor boolowski o długości 26 - które litery występują w ciągu?

⊆⍨ tworzą wektory kolejnych 1s

≢⍉↑ wmieszaj w macierz, transponuj i zwróć jej wysokość - skutecznie znajdź długość najdłuższego wektora 1s


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

6

Perl 6 , 41 bajtów

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

Sprawdź to

Rozszerzony:

{  # 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
}

Biorąc pod uwagę 'stars', .ords.sort.squish Z-0..*wróci(97,113,113,113)



6

JavaScript (Node.js) , 51 bajtów

Wielkość ciągu wejściowego nie ma znaczenia.

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

Wypróbuj online!

W jaki sposób?

Najpierw konwertujemy ciąg wejściowy na maskę bitów napotkanych liter za pomocą:

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

Przesunięcie bitowe jest przetwarzane za pomocą niejawnego modułu 32.

Przykład:

"feedback" --> 100001111110
               kjihgfedcba-

Następnie „zmniejszamy” przebiegi kolejnych 1 w masce bitowej, wielokrotnie ORAZ ustawiając ją za pomocą przesuniętej w lewo kopii samej siebie, aż wszystkie bity zostaną usunięte:

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

Liczba kolejnych liter w kolejności alfabetycznej jest liczbą iteracji powyższego procesu. Stąd funkcja rekurencyjna:

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

5

Pyth , 9 bajtów

le}#G.:S{

Przyjmuje się, że wejście jest ciągiem małych liter. Wypróbuj on-line tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .

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

Świetna metoda wykorzystująca fakt, że podciągi są uporządkowane według długości!
— Jonathan Allan,

Będzie znacznie mniej wydajny, ale możesz go użyć yzamiast .:.
— FryAmTheEggman

5

MATL , 10 bajtów

2Y2imY'*X>

Dane wejściowe są pisane małymi literami.

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wykorzystuje to połączenie podejść @ Sundar (stary) i @ ngn .

Wyjaśnienie

Rozważ dane wejściowe 'tutorial'jako przykład.

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

05AB1E , 6 bajtów

Œ...é→æ

êæAÃθg

Wypróbuj online!

Również 6 bajtów

Zaoszczędzono 2 bajty, ponownie dzięki Adnanowi : użycie ASåzamiast tego êÇ¥Θ, eliminując w ten sposób potrzebę zwiększania maksimum na końcu. Zobacz historię zmian, aby porównać zachowanie obu metod.

ASåγOà

Wypróbuj online!

Jak to działa

Lubię takie wyzwania, które prowadzą do różnych podejść.

êæ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.

W pierwszym programie można grać w golfa, êæAÃ`gaw drugim - w golfa ASåγOZ.
— Adnan,

@Adnan Dzięki, zaktualizowano! Lubię ASåpodstęp.
— Pan Xcoder,

4

TSQL (Microsoft SQL Server), 206 bajtów

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

Do wprowadzenia użyj następującej DECLAREinstrukcji przed kodem:

DECLARE @ varchar(200) = 'propinquities';

Oczekuje się, że dane wejściowe są identyczne (górna lub dolna nie ma znaczenia, ale mieszane wielkości nie będą działać).

Nie golfowany:

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

Wyjaśnienie:

Dzieli ciąg na wiersz dla każdego znaku (dostosowany z /programming//a/27623321/1474939 ) wCTE cte.

Następnie znajduje ciągi kolejnych liter, konwertując na kod ASCII w Runscte.

Na koniec wybiera największy przebieg i raportuje z powrotem w instrukcji select.


Dobra odpowiedź, bardzo miłe użycie CTE. Nie jestem pewien, czy to pomogłoby lub zraniło liczbę bajtów, ale „zatwierdzona” metoda uzyskiwania danych wejściowych w języku T-SQL odbywa się za pomocą wstępnie utworzonej tabeli .
— BradC

@BradC Jeśli mogę wziąć tabelę z każdym wierszem jako jeden znak (coś w rodzaju tablicy char zamiast łańcucha), pomogłoby to usunąć jedno CTE. Jeśli nadal musi to być jeden wiersz, prawdopodobnie jest tak samo, jak przyjmowanie go jako zmiennej wejściowej. Dzięki za pomysł!
— Brian J

4

C (gcc) , 58 56 bajtów

Zaoszczędź 2 bajty dzięki @gastropner

Wykorzystuje takie samo podejście jak mój node.js odpowiedź . Wielkość liter wejściowych nie ma znaczenia.

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

Wypróbuj online!

Skomentował

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

Czy jest to konkretna implementacja, która się 1<<*sotacza, czy jest to standardowe zachowanie?
— Jonathan Frech,

@JathanathanFrech Myślę, że to oficjalnie niezdefiniowane zachowanie. Musi więc być specyficzny dla implementacji.
— Arnauld,

Co ciekawe, wydaje się, że zawija się tylko wtedy, gdy jest obliczane w czasie wykonywania. W czasie kompilacji 1<<32powoduje 0wyświetlenie ostrzeżenia o rozmiarze typu danych.
— Jonathan Frech,

W rzeczywistości wątpię, aby kompilator wyraźnie zastosował maskę 5-bitową. Możliwe, że odbywa się to na poziomie procesora.
— Arnauld,

2
@ Arnauld jest (patrz uwaga: „[...] Argument licznika może być wartością natychmiastową lub rejestrem CL. Liczba jest maskowana do 5 bitów, co ogranicza zakres zliczania do 0 do 31.”)
— ErikF

3

C (gcc) , 100 bajtów

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;}

Wypróbuj online!

Wyjaśnienie

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

Wypróbuj online!


+1 dla „c, o, u; n (t, e, r)” :)

3

MATL , 12 10 bajtów

91:wX-dX>q

Wypróbuj online!

Wyjaśnienie:

91:- Utwórz listę cyfr od 1 do 91. 91 to znak „[”, który występuje po „Z”. Skutecznie tworzy to listę wszystkich znaków od „\ x1” do „[”. (Chcemy głównie tych z zakresu [„A'-1:„ Z ”+ 1]), ale reszta nie boli i wymaga mniejszej liczby bajtów.)

w - Implikowane dane wejściowe, wprowadź dane wejściowe na szczyt stosu (załóż „ĆWICZENIA”)

X- - Ustaw różnicę. Pozostawia to tylko znaki, których nie znaleziono w ciągu wejściowym, w ich oryginalnej kolejności („stabilna”). Stos:' !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHJKMNPQVWXYZ['

d - Różnica między kolejnymi elementami na tej liście. Stos:[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> - Uzyskaj maksimum tych różnic, tj. Maksymalną liczbę kolejnych alfabetów brakujących w ustawionej różnicy.

q - Zmniejszenie, aby uzyskać rzeczywistą liczbę znaków


Starsze:

12 bajtów

Sud1=Y'*X>sQ

Wypróbuj online!


Tak wiele podejść :-)
— Luis Mendo,

3

K (ngn / k) , 17 15 bajtów

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

Wypróbuj online!

- czy istnieje tylko konwersja znaków na liczby (nie ma znaczenia, czy są one ujemne)

{ }\ stosuje funkcję aż do konwergencji, zachowując wyniki pośrednie

x+1 dodaj 1 do każdego numeru w x

^ „bez” - lista po lewej bez elementów, które występują na liście po prawej stronie

x^x^x+1oznacza xprzecięty zx+1

1_ upuść pierwszy element

# liczyć


#1_{x^x^x+1}\-?
— Adám

@ Adám tak, pewnego dnia powinienem sprawić, by pociągi działały ...
— ngn

wyobrażając to sobie jako przecięcie ze wzrostem, dopóki konwergencja nie będzie całkiem przyjemna
— Jonah

pociągi pracować
— NGN

2

Retina 0.8.2 , 54 bajty

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

Wypróbuj online!Link zawiera przypadki testowe. Wyjaśnienie:

O`.

Sortuj litery w kolejności.

D`.

Deduplikuj litery.

.
$&$&¶

Duplikuj każdą literę w osobnych wierszach.

T`l`_l`¶.

Zmniejsz pierwszą z każdej pary.

(.)¶\1
$1

Jeśli teraz pasuje do poprzedniej postaci, połącz je ponownie.

.(.+)
$.1

Policz długości wszystkich przebiegów.

O#^`

Posortuj je w odwrotnej kolejności numerycznej.

1G`

Weź pierwszą (największą).


2

J, 16 bajtów

-7 bajtów dzięki FrownyFrog

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

Wypróbuj online!

wyjaśnienie

[: >./ 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 

Myślę, że możesz użyć ]zamiast ~.@/:~Alfabet jest już posortowany, więc nie musisz sortować danych wejściowych i przechowywać tylko unikatowe elementy. TIO - 18 bajtów
— Galen Iwanow


@FrownyFrog i Galen, dziękuję wam obu! Z perspektywy czasu powinno być oczywiste, że najpierw nie potrzebowałem tego typu uniq / sort.
— Jonasz

2

C (gcc) , 98 92 bajtów

Podziękowania dla Jonathana Frecha za sugestie.

Tylko wielkie litery.

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);}

Wypróbuj online!


Tak naprawdę nie potrzebujesz k;na końcu. Niejawne zwracanie gcc jest efektem ubocznym przypisywania zmiennych, który najwyraźniej jest wykonywany jako ostatni krok w twojej pętli for.
— Jonathan Frech,


@JathanathanFrech Nie ufam niejawnym zwrotom gcc. Nie zawsze zdarzają się tak, jak się tego spodziewam, i często nie działają wcale dla wskaźników i liczb zmiennoprzecinkowych. Na szczęście poza kodem golfowym nigdy ich nie używam! :-)
— ErikF,

2

Japt -h , 9 bajtów

Case insenstive, przyjmuje dane wejściowe jako ciąg znaków lub tablicę znaków.

;CôkU mÊn

Wypróbuj lub uruchom wiele testów (drugi wiersz służy jako zamiennik -hflagi, aby zamiast tego można było użyć flagi do przetwarzania wielu danych wejściowych)


Wyjaśnienie

              :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, czy możesz podać powód swojej decyzji -1?
— Kudłaty

2

Perl 5, 68 bajtów

$"=<>;map{$"=~/$_/i&&++$$_||last for$_..z;$.=$$_ if$$_>$.}a..z;say$.

Wypróbuj online .

Nie golfowany:

use feature 'say';

my $s = <>;
my $r;
for ('a' .. 'z') {
    my $c = 0;
    for ($_ .. 'z') {
        last if $s !~ /$_/i;
        $c++;
    }
    $r = $c if $c > $r;
}
say($r);

2

C (gcc) , 66 65 63 bajtów

Zakłada, że ​​dane wejściowe zawierają tylko małe litery. Najpierw zapętla się nad łańcuchem i ustawia bity w liczbie całkowitej, zgodnie z którymi widoczne są litery. Następnie zlicza najdłuższą serię 1 bitów w liczbie całkowitej.

Edycja: ajest globalna, więc przy pierwszym wywołaniu zostanie zainicjowana na 0. Druga pętla upewnia się, że jest resetowana do 0 przed powrotem. Dlatego możemy uniknąć resetowania go ręcznie.

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

Wypróbuj online!


2

Perl 5, 62 + 2 ( -nFflaga) = 64 bajty

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

Wypróbuj online .

Perl 5, 68 bajtów

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

Wypróbuj online .


1
Niezłe podejście! W ogóle nie rozważyłem tej metody ... Możesz zaoszczędzić kilka bajtów, używając -pFi -MList::Util+(max)dostać się do 56: Wypróbuj online!
— Dom Hastings

@DomHastings -MList::Util=maxdodaje 16 bajtów do wyniku.
— Denis Ibaev

Jeśli dobrze rozumiem nową punktację, flagi wiersza poleceń nie są liczone jako bajty, ale jako osobno oceniany język, więc zamiast Perla, będzie to Perl z -MList::Util+(max) -pFlub podobny. 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);

Nie golfowany:

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

Brachylog , 14 13 12 bajtów

{⊇pS∧ẠsSl}ᶠ⌉

Wypróbuj online!

{        }ᶠ    % 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

Na tyle powolny, że nie kończy się na wprowadzeniu „antydestablishmentarianism” na TIO. Relatywnie dużo szybszy dla 1 bajtu:

13 bajtów

{dosS∧ẠsSl}ᶠ⌉

Wypróbuj online!

Używać doszamiast ⊇pS jest deduplicated s orted substring wprowadzania, a nie tylko niektóre permutacji pewnego podzbioru.


1

Haskell , 87 bajtów

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

Wypróbuj online!

Oczekuje małych liter

Wyjaśnienie:

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 bajtów

le@.:G).:S{

Dane wejściowe muszą być ujęte w cudzysłów. Jeśli nie wolno:

Pyth - 12 bajtów

le@.:G).:S{z

Wyjaśnienie:

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 bajtów

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;}

Odpowiedź C z Port of Arnauld . Wypróbuj online tutaj .

Nie golfowany:

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 bajty

Odczytuje małe litery ze standardowego wejścia, wypisuje liczbę na standardowe wyjście.

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

Wypróbuj 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.