Dada uma sequência que contém apenas letras, produza o comprimento da maior sequência de letras alfabéticas consecutivas que a palavra contém, em que a ordem não importa. Um algoritmo de exemplo pode classificar a palavra, remover duplicatas e gerar o comprimento da execução mais longa.
Casos de teste
watch -> 1
stars -> 3
antidisestablishmentarianism -> 3
backdoor -> 4
a -> 1
tutorials -> 4
Por exemplo, antidisestablishmentarianism
contém as letras abdehilmnstr
. As corridas mais longas são lmn
e rst
, ambas de comprimento 3.
Notas
Você pode usar todas as letras minúsculas, todas as maiúsculas ou maiúsculas como entrada, mas a caixa não pode codificar informações sobre a palavra (ou seja, você não pode colocar os primeiros n
caracteres em maiúsculas onde n
está o comprimento da execução mais longa).
Isso é código-golfe , então a resposta mais curta em bytes vence.
rst
- unificar, classificar e obter a execução consecutiva mais longa. Podemos considerar a entrada como uma matriz de caracteres?Respostas:
Geléia ,
10 9 8 76 bytesExperimente online!
9 estava usando o método de Sok :
ṢQẆẇƇØaṪL
Quão?
fonte
R ,
4443 bytesFunciona em uma matriz de caracteres minúsculos. Editar: mudou de teste de True valores para multiplicar pelo T / F para um byte.
Experimente online!
Uma codificação de comprimento de execução nas letras que estão nos caracteres fornecidos retorna o valor máximo para as verdades.
fonte
APL (Dyalog Classic) ,
109 bytes-1 byte graças a H.PWiz
Experimente online!
⍞
insere uma string⎕a
é o alfabeto inglês maiúsculo⎕a∊⍞
um vetor booleano length-26 - que letras ocorrem na string?⊆⍨
formam vetores de 1s consecutivos≢⍉↑
misture em uma matriz, transponha e retorne sua altura - efetivamente, encontre o comprimento do vetor mais longo de 1sfonte
⌈/≢¨
->≢⍉↑
Perl 6 , 41 bytes
Teste-o
Expandido:
Dado
'stars'
,.ords.sort.squish Z-0..*
retornaria(97,113,113,113)
fonte
Haskell , 35 bytes
Experimente online!
Haskell , 50 bytes
Experimente online!
fonte
JavaScript (Node.js) , 51 bytes
O caso da sequência de entrada não importa.
Experimente online!
Quão?
Primeiro convertemos a string de entrada em uma máscara de bits de letras encontradas com:
O deslocamento bit a bit é processado com um módulo implícito 32.
Exemplo:
Em seguida, 'reduzimos' as execuções de 1s consecutivos na máscara de bits repetidamente AND'ing com uma cópia de deslocamento à esquerda até que todos os bits sejam limpos:
O número de letras consecutivas em ordem alfabética é o número de iterações do processo acima. Daí a função recursiva:
fonte
Pitão , 9 bytes
A entrada é assumida como uma sequência minúscula. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .
fonte
y
no lugar de.:
.MATL , 10 bytes
A entrada está em minúscula.
Experimente online! Ou verifique todos os casos de teste .
Isso usa uma combinação das abordagens de @ Sundar (antiga) e de @ ngn .
Explicação
Considere a entrada
'tutorial'
como um exemplo.fonte
Python 3 , 55 bytes
Experimente online!
Python 2 , 58 bytes
Experimente online!
Python 2 , 63 bytes
Experimente online!
fonte
f=lambda s:s and-~f({*s}&{c+1for c in s})or 0
:?05AB1E , 6 bytes
Œ...é
æ
).Experimente online!
Também 6 bytes
Economizou 2 bytes, novamente graças a Adnan : usando em
ASå
vez dissoêÇ¥Θ
, eliminando também a necessidade de aumentar o máximo no final. Veja o histórico de revisões para comparar os beviours dos dois métodos.Experimente online!
Como essas obras
Gosto de desafios como este, que levam a uma variedade de abordagens diferentes.
fonte
êæAÃ`g
e o segundo programa pode ser jogadoASåγOZ
.ASå
truque.TSQL (Microsoft SQL Server), 206 bytes
Para entrada, use a seguinte
DECLARE
instrução antes do código:Espera-se que a entrada seja do mesmo tipo (superior ou inferior não importa, mas maiúsculas e minúsculas não funcionariam).
Ungolfed:
Explicação:
Divide a sequência em uma linha para cada caractere (adaptado de /programming//a/27623321/1474939 ) no
CTE
cte.Em seguida, localiza execuções de letras consecutivas convertendo para o código ASCII no
Runs
cte.Por fim, ele seleciona a maior execução e os relatórios de volta na instrução select.
fonte
C (gcc) ,
5856 bytesGuardado 2 bytes graças a @gastropner
Usa a mesma abordagem que a minha resposta Node.js . O caso da sequência de entrada não importa.
Experimente online!
Comentado
fonte
1<<*s
envolve ou é um comportamento padrão?1<<32
resulta0
e emite um aviso de tamanho do tipo de dados.C (gcc) , 100 bytes
Experimente online!
Explicação
Experimente online!
fonte
MATL ,
1210 bytesExperimente online!
Explicação:
91:
- Crie a lista de números de 1 a 91. 91 é o caractere '[', que vem depois de 'Z'. Portanto, isso cria efetivamente a lista de todos os caracteres de '\ x1' a '['. (Nós queremos principalmente aqueles no intervalo ['A'-1:' Z '+ 1], mas ter o resto não dói e precisa de menos pelo número de dígitos).w
- Entrada implícita, coloque a entrada no topo da pilha (assuma 'TUTORIAIS')X-
- Definir diferença. Isso deixa apenas os caracteres que não foram encontrados na sequência de entrada, na ordem original ('stable'). Pilha:' !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHJKMNPQVWXYZ['
d
- Diferença entre elementos sucessivos nessa lista. Pilha:[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>
- Obtenha o máximo dessas diferenças, ou seja, o número máximo de alfabetos consecutivos ausentes da diferença definida.q
- Decremento para obter a contagem real de caracteresMais velho:
12 bytes
Experimente online!
fonte
K (ngn / k) ,
1715 bytesExperimente online!
-
existe apenas para converter os caracteres em números (não importa se são negativos){
}\
aplica uma função até a convergência, preservando resultados intermediáriosx+1
adicione 1 a cada número emx
^
"sem" - a lista à esquerda sem elementos que ocorrem na lista à direitax^x^x+1
significax
interseção comx+1
1_
solte o primeiro elemento#
contagemfonte
#1_{x^x^x+1}\-
?Retina 0.8.2 , 54 bytes
Experimente online! O link inclui casos de teste. Explicação:
Classifique as letras em ordem.
Desduplicar as letras.
Duplique cada letra em linhas separadas.
Reduza o primeiro de cada par.
Se isso agora corresponder ao personagem anterior, junte-os novamente.
Conte os comprimentos de todas as execuções.
Classifique-os em ordem numérica inversa.
Pegue o primeiro (maior).
fonte
J, 16 bytes
-7 bytes graças ao FrownyFrog
Experimente online!
explicação
fonte
]
vez de~.@/:~
O alfabeto já está classificado, então você não precisa classificar a entrada e manter apenas os itens exclusivos. TIO - 18 bytesC (gcc) ,
9892 bytesObrigado a Jonathan Frech pelas sugestões.
Somente maiúsculas.
Experimente online!
fonte
k;
do final. O retorno implícito do gcc é um efeito colateral da atribuição de variáveis que aparentemente é executada como a última etapa do seu loop for.Japt
-h
, 9 bytesNão diferencia maiúsculas de minúsculas, recebe a entrada como uma sequência ou uma matriz de caracteres.
Experimente ou execute vários testes (a segunda linha serve como um substituto para o
-h
sinalizador, para que o sinalizador possa ser usado para processar várias entradas)Explicação
fonte
-1
, por favor?Perl 5, 68 bytes
Experimente online .
Ungolfed:
fonte
C (gcc) ,
666563 bytesAssume que a entrada contém apenas letras minúsculas. Primeiro, ele circula a string e define os bits em um número inteiro, de acordo com o qual as letras são vistas. Em seguida, conta a sequência mais longa de 1 bits no número inteiro.
Edit:
a
é global, então será inicializado como 0 na primeira chamada. O segundo loop garante que seja redefinido para 0 antes de retornar. Portanto, podemos evitar redefini-lo manualmente.Experimente online!
fonte
Perl 5, 62 + 2 (
-nF
sinalizador) = 64 bytesExperimente online .
Perl 5, 68 bytes
Experimente online .
fonte
-pF
e-MList::Util+(max)
chegando a 56: Experimente online!-MList::Util=max
adiciona 16 bytes à pontuação do resultado.-MList::Util+(max)
-pF
ou similar. codegolf.meta.stackexchange.com/a/14339/9365SQLite 265
Ungolfed:
fonte
Braquilog ,
141312 bytesExperimente online!
Lento o suficiente para não terminar com o "antidisestablishmentarianism" de entrada no TIO. Um relativamente mais rápido para um byte de +1:
13 bytes
Experimente online!
Use
dos
em vez de⊇p
: S é umd
eduplicated so
rteds
ubstring da entrada, em vez de apenas alguns permutação de algum subconjunto.fonte
Haskell , 87 bytes
Experimente online!
Espera caracteres minúsculos
Explicação:
fonte
Python 2 , 95 bytes
Experimente online!
fonte
Pitão - 11 bytes
A entrada deve estar entre aspas. Se não for permitido:
Pitão - 12 bytes
Explicação:
fonte
Kotlin , 97 bytes
Experimente online!
fonte
Java 8, 77 bytes
Resposta C do porto de Arnauld . Experimente online aqui .
Ungolfed:
fonte
> <> , 63 bytes
Lê caracteres minúsculos de stdin, gera um número para stdout.
Experimente online!
fonte