O iBug recentemente adquiriu uma barra longa feita de materiais compostos, mas valiosos. A barra é tão longa que o iBug não pode vendê-la facilmente por créditos, então ele quer cortá-la. A barra é feita de materiais tão frágeis e mágicos que, se uma peça for quebrada, todas as partes da barra feitas com o mesmo material também quebrarão, dificultando o corte arbitrário.
O iBug deseja cortar a barra em tantos pedaços quanto possível. Ele também gosta de programas muito curtos e de código-golfe, por isso fez uma análise abstrata de seu problema.
A barra mágica do iBug é representada como uma string (ou uma matriz ou uma sequência de caracteres, se você preferir), assim:
aaabbccccccbbbaaacccccaabbbaaaaa
Cada letra da string representa um material mágico. A barra sempre corresponde ao RegEx ^\w*$
, portanto, pode haver até 63 materiais na barra. Uma "parte" é uma sequência consecutiva de caracteres que não são separados por espaços.
O iBug deseja que você escreva um programa que calcule o máximo de partes possível, se zero ou mais conjuntos de caracteres forem totalmente removidos (substituídos por espaços) e informe o número ao iBug.
Exemplo 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Descrição: se b
for totalmente removido da barra, o iBug poderá obter 4 partes. Ele também pode obter 4 partes removendo b
e c
, como mostrado abaixo
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
E esse é o número máximo de peças que o iBug pode obter dessa barra
Exemplo 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Descrição: removendo apenas o sublinhado, o iBug pode obter 6 partes da barra e esse é o máximo.
Exemplo 3:
In: __________
Out: 1
Descrição: O que? Você quer cortar isso? Só é possível obter 1 parte se você não a cortar.
Exemplo 4:
In:
Out: 0
Descrição: não há nada para cortar, então zero.
Existem também algumas regras que o iBug deseja que os programas obedeçam:
O iBug não gosta de brechas padrão e é proibido.
Desde que funcione, ele não precisa ser um programa completo. Também é aceita uma função que recebe entrada de um parâmetro e fornece saída via valor de retorno.
Entrada e saída flexíveis são permitidas. Seu programa ou função pode ter uma string, uma matriz de caracteres ou o que você achar mais fácil de lidar. Você pode fornecer a saída imprimindo o número ou retornando-o.
Exemplos de casos de teste (mas não limitados a estes)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Como este é um código de golfe , o programa mais curto (em bytes) em cada idioma vence!
Extra
O iBug aprecia muito se você pode fornecer uma explicação para o seu programa, mesmo que isso não afete sua pontuação (ainda é o comprimento em bytes).
123456789
rende 5? E comoaaabcccdedaaabefda
produz 6? Recebo 2 e 4, respectivamente, para esses dois casos de teste.2468
, para o segundo, removabd
.2,4,6,8
do primeiro eb,d,f
do segundo.Respostas:
Haskell ,
73 7170 bytesAgradecemos a Laikoni por economizar 1 byte!
Experimente online!
fonte
maximum$(length$words x):
pode ser reduzido paramaximum$length(words x):
.JavaScript (ES6),
10990 bytesUm pouco lento no
123456789
caso de teste. A resposta anterior de 109 bytes não se limitou a!/\s/
:fonte
Python 2 ,
1119372 bytes-21 bytes graças Kirill L.
Experimente online!
fonte
Geléia ,
1311 bytesMuitas instruções de 2 bytes-2 graças ao Zgarb (use o produto externo rapidamente
þ
>. <)Um link monádico que aceita uma lista de caracteres e retorna um número inteiro não negativo.
Experimente online!
Quão?
Para cada subsequência da entrada (os conjuntos que podemos remover, mais os equivalentes redundantes) obtém uma lista de existência para identificar quais são removidos e, efetivamente, descobre quantas execuções de zeros permanecem e produz o máximo. A última parte funciona de uma maneira um pouco estranha, já que eu a achei mais golfista do que as alternativas mais ingênuas - encontra as corridas como
[element, count]
pares, nega identificar zeros como unidades, somas encontra o máximo e depois pega a cabeça (a soma dos elementos em vez das contagens )fonte
€Đ€
pode serþ
.Ruby ,
98 89 75 6461 bytesExperimente online!
menor e mais lento do que antes!
Basicamente, uma porta de resposta Javascript do @ Neil
Ungolfed e anotado
Experimente online!
fonte
Casca ,
1211 bytesExperimente online! Isso funciona com força bruta e é bastante lento. Adicione
u
à extremidade direita para acelerar a execução, sem alterar a semântica.Explicação
fonte
Perl 5 , (versões mais antigas),
-p -I.
,524943 bytesContagem de estilo antigo:
+3
para-p
:46
bytes (porque ele deve estar em um programa, não pode ser executado usando-e
)barsplit.pl
:Execute com a string em STDIN:
Experimente online!
A
-I.
opção existe para fazer isso também funcionar em perls recentes, nos quais, por padrão,.
não existe mais@INC
. Nas versões mais antigas do perl, essa opção não é necessária. Eu testei isso em uma máquina mais antiga que ainda tinhaperl 5.20
, então a pontuação é baseada nisso (caso contrário, eu também deveria contar o.
argumento-I
)Versão rápida (
49
bytes):fonte
Wolfram Language (Mathematica) , 77 bytes
Experimente online!
fonte